区块链共识算法大汇聚

两阶段提交 & 三阶段提交

两段式提交(2PC 、Two-Phase Commit)

既然实际系统中很难保证强一致,便只能通过两段式提交分成两个阶段,先由Proposer(提议者)发起事物并收集Acceptor(接受者)的返回,再根据反馈决定提交或中止事务。

第一阶段:Proposer发起一个提议,询问所有Acceptor是否接受;
第二阶段:Proposer根据Acceptor的返回结果,提交或中止事务。如果Acceptor全部同意则提交,否则全部终止。

两阶段提交方案是实现分布式事务的关键;但是这个方案针对无反馈的情况,除了“死等”,缺乏合理的解决方案。 Proposer在发起提议后宕机,阶段二的Acceptor资源将锁定死等。如果部分参与者接受请求后异常,还可能存在数据不一致的脑裂问题。

三段式提交(3PC、Three-Phase Commit)

为了解决2PC的死等问题,3PC在提交前增加一次准备提交(prepare commit)的阶段,使得系统不会因为提议者宕机不知所措。接受者接到准备提交指令后可以锁资源,但要求相关操作必须可回滚。

但3PC并没有被用在我们的工程实现上,因为3PC无法避免脑裂,同时有其他协议可以做到更多的特性又解决了死等的问题。

这里写图片描述

共识算法

无许可拜占庭算法

PoW

PoS

Casper

DPOS

Algorand

ADA

许可拜占庭算法

PBFT

HoneyBadget

HashGraph

Ripple

小蚁共识算法

PoET (Proof of Elapsed Time)

Sumeragi (Iroha)

非拜占庭算法

Paxos

Raft

待整理

DPOS

简介:

Under normal operation block producers take turns producing a block every 3 seconds. Assuming no one misses their turn then this will produce the longest possible chain. It is invalid for a block producer to produce a block at any other time slot than the one they are scheduled for.
这里写图片描述

容错率:1/3

疑问:

  1. 3s出一个块,那么21个代表是怎么对3s这个间隔产生共识的,因为每个代表的时间戳不一定达到了共识。

对DPOS的各种攻击

  1. Minority Fork
  2. Double Production by Disconnected Minority
  3. Network Fragmentation
  4. Double Production by Connected Minority
  5. Last Irreversible Block
  6. Lack of Quorum of Producers
  7. Corruption of Majority of Producers

Transactions as Proof of Stake 股权证明的交易 (TaPoS)

需要每一个交易包含最近一个区块头的哈希值。这个哈希值有两个目的:

  1. 防止不包含区块引用的交易在分叉时重放发生;
  2. 通知网络对应的用户和他们的股份当前在某个具体的分叉上。

随着时间的推移,所有的用户直接确认区块链,在这一链条上难以伪造假的链条,因为假的链条根本无法从合法链条上迁移交易。