常见共识算法(PBFT、PoW、PoS、DPoS、Ripple)

  共识机制是区块链的核心技术,比如PBFT(Practical Byzantine Fault Tolerance,实用拜占庭容错算法)、PoW(Proof of Work,工作量证明)、PoS(Proof of Stake,权益证明)、DPoS(Delegate Proof of Stake,委托权益证明)、Ripple(瑞波)

PBFT

  在分布式系统中,节点可能因为某些原因出现故障,这些故障节点称为拜占庭节点,非故障节点称为非拜占庭节点。
  PBFT是一种状态机副本复制算法,即服务作为状态机进行建模,状态机在分布式系统的不同节点进行副本复制。每个状态机的副本都保存了服务的状态,同时也实现了服务的操作。假设网络中存在R个副本,拜占庭容错为m个节点,R和m存在以下关系:R=3m+1
  PBFT要求共同维护一个状态,所有节点采取的行动一致。为此,需要运行三类基本协议,包括一致性协议、检查点协议和视图更换协议。一致性协议至少包含若干个阶段:请求(request)、序号分配(pre-prepare)和响应(reply)。根据协议设计的不同,可能包含相互交互(prepare),序号确认(commit)等阶段。
常见共识算法(PBFT、PoW、PoS、DPoS、Ripple)_第1张图片
  上图为PBFT协议通信模式,每一个客户端的请求需要经过5个阶段,通过采用两次两两交互的方式在服务器达成一致之后再执行客户端的请求。由于客户端不能从服务器端获得任何服务器运行状态的信息,PBFT中主节点是否发生错误只能由服务器监测。如果服务器在一段时间内都不能完成客户端的请求,则会触发视图更换协议。其中C为客户端,N0~N3表示服务节点,特别的,N0为主节点,N3为故障节点。整个协议的基本过程如下:
1)客户端发送请求,激活主节点的服务操作。

2)当主节点接收请求后,启动三阶段的协议以向各从节点广播请求。

[2.1]序号分配阶段,主节点给请求赋值一个序列号n,广播序号分配消息和客户端的请求消息m,并将构造PRE-PREPARE消息给各从节点;

[2.2]交互阶段,从节点接收PRE-PREPARE消息,向其他服务节点广播PREPARE消息;

[2.3]序号确认阶段,各节点对视图内的请求和次序进行验证后,广播COMMIT消息,执行收到的客户端的请求并给客户端以响应。

3)客户端等待来自不同节点的响应,若有m+1个响应相同,则该响应即为运算的结果。

POW工作量证明

  POW(Proof of Work)又称工作量证明,是比特币和当前以太坊的核心共识算法。POW可以简化为一个数学与经济模型;所有矿工公平竞争一个区块的挖矿权,每个矿工遵循一个规则,对候选的区块进行Hash运算,当运算的Hash值小于当前难度系数时,就认为该矿工提供的候选区块满足条件,可以广播到全网验证并确认,区块链以最长的确定的区块链主链作为链的基础,分叉会被抛弃,因此谁最先计算出这个块的Hash,谁就成为这个块的矿工,矿工享受这个出块周期的收益,获得特定数量的价值奖励。

  哈希运算是最常用的一种工作量证明机制,它通过计算碰撞出的符合条件的散列来确定系统已经完成了一定的工作量,此外,还可以利用卷积导数,大质数等复杂运算来实现工作量证明。

  例如比特币网络中任何一个节点,如果想生成一个新的区块并写入区块链,必须解出比特币网络出的PoW问题。这道题关键的3个要素是工作量证明函数、区块及难度值。工作量证明函数是这道题的计算方法,区块决定了这道题的输入数据,难度值决定了这道题所需要的计算量。

  PoW机制存在明显的弊端。一方面,PoW的前提是,节点和算力是均匀分布的,因为通过CPU的计算能力来进行投票,拥有钱包(节点)数和算力值应该是大致匹配的,然而随着人们将CPU挖矿逐渐升级到GPU、FPGA,直至ASIC矿机挖矿,节点数和算力值也渐渐失配。另一方面,PoW太浪费了。比特币网络每秒可完成数百万亿次SHA256计算,但这些计算除了使恶意攻击者不能轻易地伪装成几百万个节点和打垮比特币网络,并没有更多实际或科学价值。

POS

  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

  DPOS(Delegated Proof of Stake ,代理权益证明)这是一种基于投票选举的共识算法,有点像民主大会,持币人选出几个代表节点来运营网络,用专业运行的网络服务器来保证区块链网络的安全和性能。DPOS机制中,不需要算力解决数学难题,而是由持币者选出生产者,如果生产者不称职,就有随时有可能被投票出局,这也就解决了POS的性能问题。
  在DPOS机制下,算法要求系统做三件事:第一,随机指定生产者出场顺序;第二,不按顺序生产的区块无效;第三,每过一个周期洗牌一次,打乱原有顺序;而且,DPOS允许所有矿池每三秒钟轮换一次,并且其他人已被安排在后续进程中,于是,没有人可以在预设位置外生产区块。如果一个块生产者这么做了,就可能被投票出局。这意味着,生产者之间没有争夺,也不会遗漏区块,每三秒会有一个区块。相对于POW和POS,DPOS机制最大的优点之一是共识达成的周期要短很多。

  基于POW的比特币每秒处理7笔交易;基于POW和POS的以太坊每秒处理15笔交易;而基于DPOS的比特股(BTS)每秒能处理超10万的交易量。EOS将通过并行链的方式,预计最高可达到每秒数百万币的确认速度。

  DPOS也会将一部分奖励分给网络维护节点和投票者,作为社区维护的奖励。比如,LBTC就是采用DPOS机制出块,LBTC的持币者投票选出101个节点,这101个节点负责出块,并获得一定的奖励,而这其中每一个节点的投票者本身也会从中获得一定的回报。

  简单的来说,你只需要去给你认为能被选中并承诺分红的节点投票,这些节点被选中后便可挖矿,你就可以获得节点承诺的相应分红。而此收益不需要你真实的操作挖矿,而仅仅只需要你动动小手指去投个票。有一些钱包已经支持LBTC的投票。

Ripple

  Ripple(瑞波)是一种基于互联网的开源支付协议,可以实现去中心化的货币兑换、支付与清算功能。在Ripple的网络中,交易由客户端(应用)发起,经过追踪节点(tracking node)或验证节点(validating node)把交易广播到整个网络中。追踪节点的主要功能是分发交易信息以及响应客户端的账本请求。验证节点除包含追踪节点的所有功能外,还能够通过共识协议,在账本中增加新的账本实例数据。

  Ripple的共识达成发生在验证节点之间,每个验证节点都预先配置了一份可信任节点名单,称为UNL(Unique Node List)。在名单上的节点可对交易达成进行投票。每隔几秒,Ripple网络将进行如下共识过程:

1)每个验证节点会不断收到从网络发送过来的交易,通过与本地账本数据验证后,不合法的交易直接丢弃,合法的交易将汇总成交易候选集(candidate set)。交易候选集里面还包括之前共识过程无法确认而遗留下来的交易。

2)每个验证节点把自己的交易候选集作为提案发送给其他验证节点。

3)验证节点在收到其他节点发来的提案后,如果不是来自UNL上的节点,则忽略该提案;如果是来自UNL上的节点,就会对比提案中的交易和本地的交易候选集,如果有相同的交易,该交易就获得一票。在一定时间内,当交易获得超过50%的票数时,则该交易进入下一轮。没有超过50%的交易,将留待下一次共识过程去确认。

4)验证节点把超过50%票数的交易作为提案发给其他节点,同时提高所需票数的阈值到60%,重复步骤3)、步骤4),直到阈值达到80%。

5)验证节点把经过80%UNL节点确认的交易正式写入本地的账本数据中,称为最后关闭账本(Last Closed Ledger),即账本最后(最新)的状态

你可能感兴趣的:(Fabric,Hyperledger,共识算法,区块链,算法)