区块链共识算法

区块链共识算法

简介

共识算法是用来解决对等节点网络系统(P2P)中节点间相互信任问题(拜占庭将军问题, BFT)而提出的一种算法。

在区块链中,PBFT和Raft是联盟链和私有链上常用的共识算法,而在公有链上,常用的是POW,POS,DPOS等共识算法。

PBFT

  • PBFT(Practical Byzantine Fault Tolerance,实用拜占庭容错算法)

由Miguel Castro和Barbara Liskov在1999年提出来的,解决了原始拜占庭容错算法效率不高的问题,将算法复杂度由指数级降低到多项式级,使得拜占庭容错算法在实际系统应用中变得可行。

PBFT算法是一种状态机副本复制算法,可以容忍小于1/3个无效或者恶意节点。

  • PBFT 算法的基本流程:
  1. 客户端发送请求给主节点
;
  2. 主节点广播请求给其它节点,节点执行 pbft 算法的三阶段共识流程;
  3. 节点处理完三阶段流程后,返回消息给客户端;
  4. 客户端收到来自 f+1 个节点的相同消息后,代表共识已经正确完成;

PoW(Proof of Work, 工作量证明)

pow是由中本聪在比特币中使用的基于算力的一种共识算法。

比特币PoW的过程,可以简单理解成就是将不同的nonce值作为输入,尝试进行SHA256哈希运算,找出满足给定数量前导0的哈希值的过程。而要求的前导0的个数越多,代表难度越大。比特币节点求解工作量证明问题的步骤大致归纳如下:

  1. 生成铸币交易,并与其他所有准备打包进区块的交易组成交易列表,通过Merkle树算法生成Merkle根哈希;

  2. 把Merkle根哈希及其他相关字段组装成区块头,将区块头的80字节数据作为工作量证明的输入;

  3. 不停地变更区块头中的随机数,即nonce的数值,并对每次变更后的区块头做双重SHA256运算(即SHA256(SHA256(Block_Header))),将结果值与当前网络的目标值做对比,如果小于目标值,则解题成功,工作量证明完成。

PoW的弊端

  1. PoW的前提是节点和算力是均匀分布的,因为通过CPU的计算能力来进行投票,拥有钱包(节点)数和算力值应该是大致匹配的,然而随着人们将CPU挖矿逐渐升级到GPU、FPGA,直至ASIC矿机挖矿,节点数和算力值也渐渐失配。

  2. PoW太浪费了。比特币网络每秒可完成数百万亿次SHA256计算,但这些计算除了使恶意攻击者不能轻易地伪装成几百万个节点和打垮比特币网络,并没有更多实际或科学价值。

PoS(Proof of Stake, 权益证明)

PoS类似于财产储存在银行,这种模式会根据你持有数字货币的量和时间,分配给你相应的利息。 
  简单来说,就是一个根据你持有货币的量和时间,给你发利息的一个制度,在股权证明PoS模式下,有一个名词叫币龄,每个币每天产生1币龄,比如你持有100个币,总共持有了30天,那么,此时你的币龄就为3000,这个时候,如果你发现了一个PoS区块,你的币龄就会被清空为0。你每被清空365币龄,你将会从区块中获得0.05个币的利息(假定利息可理解为年利率5%),那么在这个案例中,利息 = 3000 * 5% / 365 = 0.41个币,这下就很有意思了,持币有利息。

PoS机制虽然考虑到了PoW的不足,但依据权益结余来选择,会导致首富账户的权力更大,有可能支配记账权。股份授权证明机制(Delegated Proof of Stake,DPoS)的出现正是基于解决PoW机制和PoS机制的这类不足。

DPoS(Delegated Proof of Stake,委任权益证明)

DPoS通过使用证人(通常称为代表)减轻了中心化导致的潜在负面影响。 总共有N个证人(witness)签署了这些区块,这些证人由那些使用网络进行每次交易的节点进行投票选出。 通过使用一种去中心化的投票流程,DPOS在设计上比同类系统更民主。 DPOS并没有彻底消除对信任的需求,而是要确保那些代表整个网络的受信任的签名区块的人节点要正确无误和没有偏见。

PoC (Proof of Capacity, 基于容量的证明)

  • PoC是Chia币挖矿使用的证明算法,其基础是使用硬盘容量来代替CPU算力,相较于POW,可减少电力消耗;

参考

  1. 拜占庭容错(Byzantine Fault Tolerance) WIKI:  BFT - Wikipedia

  2. PBFT论文地址:http://pmg.csail.mit.edu/papers/osdi99.pdf

  3. https://zhuanlan.zhihu.com/p/35847127

updatedupdated2024-05-102024-05-10