正在阅读:

区块链共识机制

扫一扫下载界面新闻APP

区块链共识机制

一个设计精妙、实际操作起来简单的共识机制是一个分布式的体系能够顺利自运转下去的关键所在。

■什么是区块链的共识机制

现实生活中,每个社会运作的环节几乎都是中心化运作的结果。在一个中心化的结构体系中,系统的共识是由中心决定的,各参与方只需要服从中心下达的命令就可以了。因此,中心化体系共识和运作效率极高。

比如,上一所大学,学费多少、如何缴纳、何时缴纳、报道时间地点等,基本都是学校规定的,你遵照执行就可以。如果你违反这些规定,不按时缴纳学费和报道,你有可能损失你上学的机会。因此你会按照要求进行报到。这种中心化的方式也会让入学报名工作井井有条,并且快速完成程序。

但区块链不一样,区块链本质上是分布式系统,其中包含不同的基于各自动机和可用信息行动的参与者。由于各个参与者的地位是平等的,当出现分歧的时候,听谁的、如何达成共识就成了问题。

区块链中,每当一笔新交易在网络中广播出来,节点有权选择将该交易纳入其持有的账本副本之中,或者将其忽略。当网络中的大部分参与者选定某一状态之时,就能达成共识。

分布式计算和多智能体系统的一个基本问题是如何在一些错误流程存在的情况下实现总体系统的可靠性。这通常需要各个流程就计算中所需的某些数据值达成一致意见。这些过程被称为共识。

想象一下,如果某个参与者决定不遵守规则并篡改其账本状态之时会发生什么状况?或者,如果这些参与者构成网络中的一大部分且总数不过半之时会发生什么状况?

前一讲区块链诞生历史,我们知道在中本聪之前有很多的虚拟货币的尝试,其中一位叫戴伟(W Dai)密码学专家,他发明的匿名的、分布式的电子加密货币系统B-money,实现了点对点的交易和不可更改的交易记录。但B-money没有成功,那是因为在B-money体系中,每个节点分别记录自己的账本,这不可避免地会产生节点间的不一致。虽然戴伟为此设计了复杂的奖惩机制,但是并没有从根本上解决问题。

由此可见,一个设计精妙、实际操作起来简单的共识机制是一个分布式的体系能够顺利自运转下去的关键所在。因此,共识机制就是解决达成共识的依据,也是区块链的核心之一,它使得去中心化的体系能够公共维护同一个账本。

但要创建一种安全的共识协议,必须实现容错性。

什么是容错性,跟区块链有什么关系?这些都要从无法解决的“两军问题(Two Generals' Problem)”开始讲起,然后延伸至区块链需要拜占庭容错,即解决拜占庭将军问题的方案。

区块链采用的共识机制是选择一名领导者,以决定下一个区块内容。该领导者还负责将该区块在网络中广播出来,以便其他节点能够核实其内容的有效性。

目前比较知名的共识机制有工作量证明(PoW)和权益证明(PoS)。

工作量证明(PoW)  

对于比特币和以太坊等各有特点的虚拟货币来说,工作量证明(PoW)是目前最流行的算法,应用于各种加密货币如比特币和以太坊等,每个版本有各自的区别。

哈希函数:可以用来将任意长度的数据映射为固定长度的数据的函数;如果一个哈稀函数是安全的话,其输出值与随机数无异。

示例: keccak256("hello") =1c8aff950685c2ed4bc3174f3472287b56d9517b9c948127319a09a7a36deac8keccak256("hello1")=57c65f1718e8297f4048beff2419e134656b7a856872b27ad77846e395f13ffe

在工作量证明中,为了选出一位参与者成为领导者并选择下一个加入区块链的区块,参与者必须解决一个特定的数学问题。

这个数学问题可能是:已知数据X,找到一个数字 n,使得n附加到 X的结果的哈希值是一个小于 Y的数字。

示例——hash即一个假定的哈希函数,其输出值如下 Y = 10, X ='test'hash(X) = hash('test') = 0x0f = 15 > 10 hash(X+1) = hash('test1') =0xff =255 > 10 hash(X+2) = hash('test2') = 0x09 = 9 < 10  问题解决

上述示例使用的哈希函数具备加密安全性,要想解决该问题只能依靠蛮力(即尝试所有组合)。换言之,从概率上来说,在大多数时候率先解决上述问题的参与者是拥有最多算力的人,即矿工。

哈希函数之所以取得了广泛的成功主要是因为其具备以下特性:

对于给定问题很难找到解决方法

一旦找到问题的答案,很容易就能证实它是对的

在比特币等使用PoW的区块链网络中,每挖出一个新的区块,矿工就会得到一些代币奖励(包括区块新诞生的代币、交易费),以此激励他们继续挖矿。在工作量证明中,其它节点通过检验该区块数据的哈希值是否小于预设值来验证该区块的有效性。

由于算力的供给有限,抑制了矿工的作弊行为。攻击网络的成本很高,因为除了要投入高昂的硬件和电力成本,还会造成潜在挖矿利润的流失。

这个图很好地显示了比特币等代币是如何使用工作量证明来抵挡恶意攻击的。

顺带我们讲一下最长链机制。一般的区块链网络为了长久发展下去,都会要求所有节点遵守一个公式,就是所有保存到本地的区块链,都必须是被本地节点验证通过的最长链。由于区块链的每个区块必须引用它的上一个区块,所以最长链是最难推翻的。

如何保证最长链呢?

理论上,矿工可以在任意区块的基础上开始计算下一个区块的。但只有最长区块链上的区块才能获得系统的承认并得到挖矿奖励。打包区块获得的奖励只有在该区块上被增加之后才能获得使用。也就是说,如果你是矿工,你挖出来了新的区块,你获得了新生的比特币奖励,只有往后诞生了99个区块之后,你才能动用这个区块里的奖励。这是保证区块链不发生分裂的重要机制。

回到工作量证明,虽然工作量证明很公平,提供的安全性,迄今为止也是被证明很有效。然而对它大家也有一些批评。最常见指责就是需要消耗大量能源,因为节点进行算力竞赛是要消耗电力的。在之前讲挖矿的时候,耗电成本占总挖矿成本的60-70%。

权益证明(PoS) 

权益证明(PoS)是和工作量证明(PoW)相对应的另外一种共识机制。

权益:是参与者在一段时间内愿意锁定的代币量。

权益证明(PoS):根据你在这个网络里拥有币的数量来竞争记账的权力,简单的说,如果你持有的币越多,你的记账的权力的获取概率就越大。

这种证明机制在一定程度上缩短了共识的达成时间,替代了工作量证明在电力和算力方面的要求。

目前有几种代币使用纯权益证明,如Nxt和Blackcoin等。

但这个共识机制下,并不是买入大量的币,就能获得在这个网络里的话语权的。这里引入 “币龄”这一概念,也就是数字货币年龄。

我们之前讲过,比特币三大特性中不可复制性是依靠UTXO(Unspent Transaction Output)结构保证的,UTXO是躺在你的地址里还没有花出去的币。

在比特币世界里,UTXO所位于区块的高度与当前最长链高度之间的差值决定着该笔Unspent的币龄的大小,差值越大,币龄越大,差值越小,币龄越小。如果你花费了这个UTXO,也就代表着这个币龄被消耗了。

举个例子,你朋友之前转给了你的1枚比特币,这笔交易被矿工在42万个区块高度时打包。现在的区块高度是48万,到目前为止你还没有把这枚比特币花出去。那么你有的这枚比特币的币龄是6万,你的权益能力是6万*1枚=6万。假设全网的UTXO加起来的币乘以币龄是1000亿,那么你进行记账并获得奖励的概率是一千万分之六。

在PoS机制里,拥有币和币龄越高的节点拥有着越高产生新区块的权力。简单来说,就是你拥有越多的币,并且你拥有的币的币龄越久,就有可能获得记账权的概率越大。

而真正开始运用权益证明共识机制的区块链项目是2012年诞生的PeerCoin。以太坊的设计也是在后期会由工作量证明转换成为权益证明共识机制。目前有几种代币使用纯权益证明,如Nxt和Blackcoin等。

但权益证明也存在问题,就是“无利害关系(nothing at stake)”问题。该问题的本质是,在出现分叉的情况下,权益持有者有动机在由分叉形成的两条链上都下赌注,更有可能出现双重支付问题。

为了避免上述问题,混合共识算法出现了,例如Decred就使用了工作量证明和权益证明的结合算法等。

除了工作量证明和权益证明之外,其他的共识机制还有股份授权证明机制(DPoS),它类似于董事会投票,持币者投出一定数量票,代理他们进行验证和记账。另外还有燃烧证明( PoB,Proof of Burn)、沉淀证明(PoD,Proofof Deposit)、能力证明(PoC,Proof of Capacity)、消逝时间证明(PoET,Proof of Elapsed Time)等方案。但这些算法都尚未成熟。

本文为转载内容,授权事宜请联系原著作权人。

评论

暂无评论哦,快来评价一下吧!

下载界面新闻

微信公众号

微博

区块链共识机制

一个设计精妙、实际操作起来简单的共识机制是一个分布式的体系能够顺利自运转下去的关键所在。

■什么是区块链的共识机制

现实生活中,每个社会运作的环节几乎都是中心化运作的结果。在一个中心化的结构体系中,系统的共识是由中心决定的,各参与方只需要服从中心下达的命令就可以了。因此,中心化体系共识和运作效率极高。

比如,上一所大学,学费多少、如何缴纳、何时缴纳、报道时间地点等,基本都是学校规定的,你遵照执行就可以。如果你违反这些规定,不按时缴纳学费和报道,你有可能损失你上学的机会。因此你会按照要求进行报到。这种中心化的方式也会让入学报名工作井井有条,并且快速完成程序。

但区块链不一样,区块链本质上是分布式系统,其中包含不同的基于各自动机和可用信息行动的参与者。由于各个参与者的地位是平等的,当出现分歧的时候,听谁的、如何达成共识就成了问题。

区块链中,每当一笔新交易在网络中广播出来,节点有权选择将该交易纳入其持有的账本副本之中,或者将其忽略。当网络中的大部分参与者选定某一状态之时,就能达成共识。

分布式计算和多智能体系统的一个基本问题是如何在一些错误流程存在的情况下实现总体系统的可靠性。这通常需要各个流程就计算中所需的某些数据值达成一致意见。这些过程被称为共识。

想象一下,如果某个参与者决定不遵守规则并篡改其账本状态之时会发生什么状况?或者,如果这些参与者构成网络中的一大部分且总数不过半之时会发生什么状况?

前一讲区块链诞生历史,我们知道在中本聪之前有很多的虚拟货币的尝试,其中一位叫戴伟(W Dai)密码学专家,他发明的匿名的、分布式的电子加密货币系统B-money,实现了点对点的交易和不可更改的交易记录。但B-money没有成功,那是因为在B-money体系中,每个节点分别记录自己的账本,这不可避免地会产生节点间的不一致。虽然戴伟为此设计了复杂的奖惩机制,但是并没有从根本上解决问题。

由此可见,一个设计精妙、实际操作起来简单的共识机制是一个分布式的体系能够顺利自运转下去的关键所在。因此,共识机制就是解决达成共识的依据,也是区块链的核心之一,它使得去中心化的体系能够公共维护同一个账本。

但要创建一种安全的共识协议,必须实现容错性。

什么是容错性,跟区块链有什么关系?这些都要从无法解决的“两军问题(Two Generals' Problem)”开始讲起,然后延伸至区块链需要拜占庭容错,即解决拜占庭将军问题的方案。

区块链采用的共识机制是选择一名领导者,以决定下一个区块内容。该领导者还负责将该区块在网络中广播出来,以便其他节点能够核实其内容的有效性。

目前比较知名的共识机制有工作量证明(PoW)和权益证明(PoS)。

工作量证明(PoW)  

对于比特币和以太坊等各有特点的虚拟货币来说,工作量证明(PoW)是目前最流行的算法,应用于各种加密货币如比特币和以太坊等,每个版本有各自的区别。

哈希函数:可以用来将任意长度的数据映射为固定长度的数据的函数;如果一个哈稀函数是安全的话,其输出值与随机数无异。

示例: keccak256("hello") =1c8aff950685c2ed4bc3174f3472287b56d9517b9c948127319a09a7a36deac8keccak256("hello1")=57c65f1718e8297f4048beff2419e134656b7a856872b27ad77846e395f13ffe

在工作量证明中,为了选出一位参与者成为领导者并选择下一个加入区块链的区块,参与者必须解决一个特定的数学问题。

这个数学问题可能是:已知数据X,找到一个数字 n,使得n附加到 X的结果的哈希值是一个小于 Y的数字。

示例——hash即一个假定的哈希函数,其输出值如下 Y = 10, X ='test'hash(X) = hash('test') = 0x0f = 15 > 10 hash(X+1) = hash('test1') =0xff =255 > 10 hash(X+2) = hash('test2') = 0x09 = 9 < 10  问题解决

上述示例使用的哈希函数具备加密安全性,要想解决该问题只能依靠蛮力(即尝试所有组合)。换言之,从概率上来说,在大多数时候率先解决上述问题的参与者是拥有最多算力的人,即矿工。

哈希函数之所以取得了广泛的成功主要是因为其具备以下特性:

对于给定问题很难找到解决方法

一旦找到问题的答案,很容易就能证实它是对的

在比特币等使用PoW的区块链网络中,每挖出一个新的区块,矿工就会得到一些代币奖励(包括区块新诞生的代币、交易费),以此激励他们继续挖矿。在工作量证明中,其它节点通过检验该区块数据的哈希值是否小于预设值来验证该区块的有效性。

由于算力的供给有限,抑制了矿工的作弊行为。攻击网络的成本很高,因为除了要投入高昂的硬件和电力成本,还会造成潜在挖矿利润的流失。

这个图很好地显示了比特币等代币是如何使用工作量证明来抵挡恶意攻击的。

顺带我们讲一下最长链机制。一般的区块链网络为了长久发展下去,都会要求所有节点遵守一个公式,就是所有保存到本地的区块链,都必须是被本地节点验证通过的最长链。由于区块链的每个区块必须引用它的上一个区块,所以最长链是最难推翻的。

如何保证最长链呢?

理论上,矿工可以在任意区块的基础上开始计算下一个区块的。但只有最长区块链上的区块才能获得系统的承认并得到挖矿奖励。打包区块获得的奖励只有在该区块上被增加之后才能获得使用。也就是说,如果你是矿工,你挖出来了新的区块,你获得了新生的比特币奖励,只有往后诞生了99个区块之后,你才能动用这个区块里的奖励。这是保证区块链不发生分裂的重要机制。

回到工作量证明,虽然工作量证明很公平,提供的安全性,迄今为止也是被证明很有效。然而对它大家也有一些批评。最常见指责就是需要消耗大量能源,因为节点进行算力竞赛是要消耗电力的。在之前讲挖矿的时候,耗电成本占总挖矿成本的60-70%。

权益证明(PoS) 

权益证明(PoS)是和工作量证明(PoW)相对应的另外一种共识机制。

权益:是参与者在一段时间内愿意锁定的代币量。

权益证明(PoS):根据你在这个网络里拥有币的数量来竞争记账的权力,简单的说,如果你持有的币越多,你的记账的权力的获取概率就越大。

这种证明机制在一定程度上缩短了共识的达成时间,替代了工作量证明在电力和算力方面的要求。

目前有几种代币使用纯权益证明,如Nxt和Blackcoin等。

但这个共识机制下,并不是买入大量的币,就能获得在这个网络里的话语权的。这里引入 “币龄”这一概念,也就是数字货币年龄。

我们之前讲过,比特币三大特性中不可复制性是依靠UTXO(Unspent Transaction Output)结构保证的,UTXO是躺在你的地址里还没有花出去的币。

在比特币世界里,UTXO所位于区块的高度与当前最长链高度之间的差值决定着该笔Unspent的币龄的大小,差值越大,币龄越大,差值越小,币龄越小。如果你花费了这个UTXO,也就代表着这个币龄被消耗了。

举个例子,你朋友之前转给了你的1枚比特币,这笔交易被矿工在42万个区块高度时打包。现在的区块高度是48万,到目前为止你还没有把这枚比特币花出去。那么你有的这枚比特币的币龄是6万,你的权益能力是6万*1枚=6万。假设全网的UTXO加起来的币乘以币龄是1000亿,那么你进行记账并获得奖励的概率是一千万分之六。

在PoS机制里,拥有币和币龄越高的节点拥有着越高产生新区块的权力。简单来说,就是你拥有越多的币,并且你拥有的币的币龄越久,就有可能获得记账权的概率越大。

而真正开始运用权益证明共识机制的区块链项目是2012年诞生的PeerCoin。以太坊的设计也是在后期会由工作量证明转换成为权益证明共识机制。目前有几种代币使用纯权益证明,如Nxt和Blackcoin等。

但权益证明也存在问题,就是“无利害关系(nothing at stake)”问题。该问题的本质是,在出现分叉的情况下,权益持有者有动机在由分叉形成的两条链上都下赌注,更有可能出现双重支付问题。

为了避免上述问题,混合共识算法出现了,例如Decred就使用了工作量证明和权益证明的结合算法等。

除了工作量证明和权益证明之外,其他的共识机制还有股份授权证明机制(DPoS),它类似于董事会投票,持币者投出一定数量票,代理他们进行验证和记账。另外还有燃烧证明( PoB,Proof of Burn)、沉淀证明(PoD,Proofof Deposit)、能力证明(PoC,Proof of Capacity)、消逝时间证明(PoET,Proof of Elapsed Time)等方案。但这些算法都尚未成熟。

本文为转载内容,授权事宜请联系原著作权人。