区块链到底在干嘛〈下〉区块链安全吗?共识机制?智能合约如何运作?

本文为《区块链到底在干嘛〈上〉用生活化的例子轻鬆学会区块链技术的重要概念》,为动区专栏作者“邱骏”所著。文中,笔者将化繁为简,试著把区块链技术中的每个元素都使用生活化的例子比拟,让区块链爱好者与初学者不需用到密码学/经济学/资讯科学,也能领会区块链技术的精髓之处,本文同步刊载于邱骏 Medium
(传送门:《区块链到底在干嘛〈上〉用生活化的例子轻鬆学会区块链技术的重要概念》)

们熟知的世界正在慢慢地被区块链技术瓦解与重建。不论背景,有愈来愈多人想对区块链技术一探究竟,或许更进一步成为从业者、贡献者或佈道者。

不幸的是,初学者若想学习区块链技术,第一个问题可能会是高学习门槛,这是因为目前在各种主流平台上所流传的区块链知识或资源,都不免会大量使用艰涩的术语,长久以来便塑造出区块链高大上的距离感,好似区块链是只专属于一小群骇客或者专业人士才能理解的技术。然而这是不准确的,事实上,区块链技术中许多概念都能用一般常识理解,顶多只需要中学数学。

 

本文将接续上集概念,介绍涵盖:

 

  • 有哪些共识机制?
  • 区块链安全吗?
  • 智能合约如何运作?

 

以下正文开始:


共识机制:如何达成共识?

在区块链技术中,大致上有两种方式可以产生共识:抽彩(Lottery)或表决(Vote),它们各自有不同特性,每一种分散式帐本都会使用其中之一作为共识机制。

抽彩

在抽彩机制中,唯有摘要小于门槛值的“合法”区块才会被所有参与者收受。然而,区块生产者无法预测摘要,且可验证的摘要使区块生产者难以作弊。因此若想生产数字小于门槛值的摘要,区块生产者必须不断改动区块内容,例如流水号或者交易顺序,直到找到摘要小于门槛值的区块,就像抽彩一样。只有合法的区块才会被区块生产者散佈给其他 EPC 参与者。

在这样的规则下,可能会同时出现多个合法区块。还记得区块链中“链”的部分吗?当收受多个低于门槛的区块时,该选哪个区块作为上一个区块呢?这裡我们可以用一些简单的规则来做抉择:选择合法区块中高度(Height)最高的区块,若高度一样则选择摘要数字较低的区块。

区块纸条的摘要就是正式区块链中的区块杂凑值。在正式的区块链中,门槛值愈低,困难度(Difficulty)也愈高。区块的选择规则也称为分岔选择规则(Fork Choice Rule),使用可验证的乱数作为共识的做法又称为中本共识(Nakamoto Consensus)。

表决

有别于複杂的抽彩,表决机制相当直观:所有参与者针对某个预先选出的领袖(Leader)的提案(Proposal),也就是区块,进行投票。领袖是怎麽选出的?一个直觉的做法是按照假名的顺序,按照 Alice / Bob / Charlie 的顺序,所有参与者轮流担任领袖。

所有参与者在收到提案后,可以选择同意或反对这个区块的内容,若同意的话,则将自己对提案的同意票记在纸条上,并将这个投票纸条散佈给所有其他参与者。若多数的参与者同意了提案,则所有参与者皆须认定该提案为共识。

然而,表决机制虽然直观,却不如抽彩具有可验证性,参与者若想作弊则相对容易:例如,参与者可以重複投票,或者串通其他参与者一起不投票,以破坏帐本;另一方面,表决比抽彩来得有效率,因其不需要所有参与者都费功去制造可能将不被收受的区块。

拜占庭错误(Byzantine Fault)特指这些不在预期内的行为,表决机制事实上也就是拜占庭容错(Byzantine-fault-tolerant, BFT)演算法。PBFT 家族的协定是目前拜占庭容错演算法的主流,然而其至多只能容忍不超过参与者总数一半的拜占庭错误。若想了解更多 PBFT 的细节,可以参考笔者日前的撰文:

前往 Medium.com 检视

女巫:如何避免帐本被单一个体掌控?

上文提到:为了保证公平的记帐权,帐本上的识别都是假名,如上文提及,Alice 跟 Bob 实际上都是由同一个参与者王小庭所控制,其他参与者不仅难以得知,而且王小庭喜欢的话,他爱用几个假名就用几个假名 — 掌控多个假名的王小庭就成为了“女巫”(Sybil)。

不论是採取何种共识机制,女巫的存在都会破坏分散式帐本的安全性:

  • 在抽彩机制中,如果多数的参与者皆由女巫控制,则女巫有很大的机会可以无视规则,不需抽彩便窜改帐本。
  • 在表决机制中,如果由女巫控制的参与者可以集体进行不在预期内的行为,例如重複投票或者不投票。

因此,抵抗女巫对于分散式帐本的安全至关重要。对此,一个直觉的思路是:让每个假名的行为都必须付出有限的资源,例如钱跟力。因此有两种方式可以抵抗女巫:要嘛出钱,要嘛出力。

  • 出力:在抽彩机制中,每个合法区块的生产都必须附有低于门槛的摘要,而摘要的计算需要参与者出力不断地重上发条。
  • 出钱:在表决机制中,抵押一定数量 EPC 的参与者才能获选为领袖被生产提案,且若违反规则,参与者的押金将会被没收。

出力即是工作证明(Proof of Work, PoW);出钱即是权益证明(Proof of Stake, PoS),抵抗女巫的机制称为抗女巫机制(Sybil-control Mechanism)。

合约:进行条件式的交易

回顾一下本文开头所提:区块链技术可以用来打造去中心化的运算平台,它可以用以记录任何资讯,不止馀额,例如一段合约(Contract)。合约就是指一段会依据不同条件而达成不同执行结果的语句。例如

CheckAndPay

给定 A、B 两个假名,若 A 的馀额大于/等于 30 EPC,则 A 支付 20 EPC 给 B ,否则 A 不支付任何 EPC。

这个合约就可以被记录在帐本中:

Alice 100 EPC
Bob 0 EPC
Charlie 0 EPC
David 0 EPC
Eva 0 EPC
CheckAndPay "给定 A、B 两个假名,若 A 的馀额大于/等于 30 EPC,则 A 支付 20 EPC 给 B ,否则 A 不支付任何 EPC。"

之后 Alice 就可以发起像这样的交易:

Tx 99
CheckAndPay, {[Alice], [Bob]}, ALICE

如此,若 Alice 的 EPC 馀额不足 30 EPC 则不会支付 Bob。

触发合约的 Tx 99 ,它的执行过程比较烦琐:执行 Tx 99 的参与者首先会从帐本中寻找 CheckAndPay 的合约内容,并从 Tx 99 中取出合约需要的输入:A 与 B,接著参与者再解读合约的语句,依照条件进行帐本的状态转换。其中,为了使参与者能解读合约,合约需用所有参与者皆能看懂的语言书写。

合约又称智能合约(Smart Contract)。正式的区块链使用虚拟机(Virtual Machine)来解读与执行合约。事实上,智能合约能做的事情非常多,这使具有智能合约功能的分散式帐本得以成为去中心化的运算平台,例如以太坊(Ethereum)。

总结: 分散式帐本究竟是一个怎样的系统?

如果以上环节皆运作顺利,那麽便能成功只用纸笔便发行了专由学生使用的货币。最后再次强调一次:这是一个为了便于使初学者掌握核心观念而极度简化的例子。正式运行的区块链,例如以太坊,其实际运作远远複杂得多。

还有一些比较进阶的概念,虽然碍于篇幅未在此文章提及,但部分主题笔者曾撰文介绍:

  • 可扩展性(Scalability):第二层方案(Layer 2)与分片(Sharding)
  • 隐私(Privacy)与匿名(Anonymity)
  • 共识机制的安全性(Safety)与活跃性(Liveness)

最后,如果日后朋友/家人问起“什麽是区块链”时,我想你会知道如何解释了:)

 

 

区块链到底在干嘛〈下〉区块链安全吗?共识机制?智能合约如何运作?

扫一扫手机访问

区块链到底在干嘛〈下〉区块链安全吗?共识机制?智能合约如何运作?

发表评论