区块链知识系列 - 共识 - PoW PoS DPoS

共识 101

分布式系统与共识

  • 高可用方案 (主备切换)
  • 唯一订单号|id方案 (redis原子递增与guid)
  • Memcached集群与一致性哈希 (根据key的哈希值确定数据在环上的位置)

可信的,可以借助观察者和组件解决容错与一致性

区块链网络

  • 不可信
  • 需要用去中心化的链内治理方法
  • 激励与惩罚机制

从矿工|节点角度看共识的作用域

  • 组装新区块(区块头与交易列表)
  • 利用共识算法获得出块权
  • 填补区块剩余成员(签名)
  • 广播
  • 区块验证
  • 出块成本与收益
  • 激励机制与利害关系

讲述以太坊上一笔交易从广播到被确认的过程

  1. 一笔交易构造和签名好后,广播到各节点
  2. 节点组装新区块,并且按照自己的规则选取能打进下一个块中的交易(按时间先后;按油费高低)
  3. 获得出块权(Pow解题,Pos按权重随机选中,DPos超级节点按固定顺序),签名
  4. 广播给其它peer节点
  5. 区块验证有效插入到区块链
    挖矿UML_1
    挖矿UML_2

讲述EOS的激励机制

EOS奖励分配机制

利害关系

Pow: 对于在多个链上进行挖矿的矿工“惩罚”是他们必须分散他们的算力
Pos: 分叉成本低,但引入了slasher机制

共识算法

1. Pow (BTC)

难度值控制运算出的hash值得在某一目标值范围内

						非常大的常数
hash(block,Nonce) < _________________
						难度值

交易包含在区块的body里面,计算sha256 hash值的时候只用到Merkle root,并不直接计算交易的hash。因此一个区块包含1笔交易和1000笔交易并无区别。当前目标值会被压缩成3个字节,Bits第一个字节表示的是指数值,Bits值是所有节点都一样。每个节点时间戳可能会有一些区别,Nonce肯定是不一样的,但是所有的节点都是从0开始线性增长。另外,所有节点的Merkle root都是不一样的,因为所有节点区块的第一笔交易coinbase都不一样,因为coinbase的收款地址都不一样。所有每个节点计算出小于目标值的概率是一样的。

  • 2009年01月 块哈希 ox000000002c05cc2e78923c34df87fd108b22221ac6076c18f3ade378a4d915e9
  • 2017年08月 块哈希 0x000000000000000001024c5d7a766b173fc9dbb1be1a4dc7e039e631fd96a8b1
  • 2017年12月 块哈希 0x00000000000000000024fb37364cbf81fd49cc2d51c09c75c35433c3a1945d04
  • 2018年11月 块哈希 0x000000000000000000223b7a2298fb1c6c75fb0efc28a4c56853ff4112ec6bc9
  • 2019年05月 块哈希 0x0000000000000000001796e978aeea0ccf0b95e3f7581fafdc9eef44b7bbbcf7

2. Pos

举例三种经典形态

  • Chain based 基于链的PoS
  • BFT like 基于拜占庭容错的PoS
  • DPos

无论 PoS 的共识协议如何演变和优化,它归根接地是在出块的三个流程中使用了不同的算法而已。

  1. 成为候选节点的条件 (Validator Candidates)
  2. 在每轮出块过程中,从候选节点中选择谁来做出块节点 ( Block Creation Validator)
  3. 如何确认该块的正确性而上链(Validate Blocks -> reach finality)
1 Chain based: ETH2.0 的Casper共识

成为候选节点的流程: 质押至少32个ETH可以拥有出块权。出块过程一般依赖币量或币龄,即质押的币量越高, 或者「币量」和 「币龄」的乘积越大。被随机选中出块的概率越大。

1.pow与pos阶段
一个区块的最终化是按照下面的步骤的:
区块1的2/3投票→审判区块1→2/3投票区块2→最终化区块1
最终化:超过20分钟最终化。每隔50块(一个周期)就最终化一次区块,

2.pos阶段
每16秒定期产生一个区块,提议者收集验证者的投票,纳入区块中

有slasher

没有委托者与委托机制,只能为自己质押至少32个ETH,成为验证人

#####2 BFT like: Cosmos - Tendermint

两轮2/3确认
即时的最终确定性 弱同步协议

伪随机的安排一个验证者在多轮投票的过程中提出一个区块.提交和最终化区块取决于大多数——所有验证者中2/3的验证者在提交的区块中签名。在区块最终化之前可能需要进行几轮签名

3个处理步骤:验证者提出一个块、发送提交意图、签名后提交一个新区块

有slasher

有委托者与委托机制,stakiing(相当于稳健型理财产品)

3 EOS的DPos

EOS的特殊BFT (采用的是基于流水线的拜占庭容错机制)

常规的BFT都是生产一个区块,等待共识,然后再生产一个区块,比如Tendermint和Cosmos里的PBFT的实现。由于PBFT共识需要比较长的时间(至少1s以上),因而采用传统的PBFT是没法满足0.5s出块需求的。因而EOS 的BFT采取了不同的实现方式,出块和共识是流水并行工作的,区块生产完成后,不等待PBFT共识,继续生产同时参与并处理上一个区块的PBFT共识,当PBFT共识完成后即修改为不可逆状态。

EOS中,21个生产节点轮流出块。一个区块是通过后续节点基于该区块的生产行为来间接确认的,为了实现BFT级别的不可逆,自然需要得到2/3+1的节点确认。由于每个节点生产12个区块,所以需要12*(2/321+1)=1215=180个区块确认。因而大家第一感觉是1个区块只需要后续180个区块即可变成不可逆状态。然而,如果大家在EOS区块链上查询区块的实时信息,就会发现一个区块都是在300多区块的时候才会被标识为不可逆状态。这是因为区块的确认分为两个阶段,第一个阶段是pre-commit阶段,该阶段需要接受2/3+1个节点的确认表明,超过2/3节点认可该区块。但是此时并不意味着超过2/3的节点已经了解到这个2/3确认信息。因而再次需要2/3的commit签名确认过程。

共需要 180 * 2 * 0.5 = 180秒


比较Pow和Pos

共识 Pow(工作量证明) Pos(权益证明) DPos(委托权益证明)
代表链 BTC Cosmos Eos
节点数量 更少
出块节点 大矿池 top100有效验证者 超级节点
出块效率 10分钟 6~8秒 0.5秒
出块时间调整 14天调整一次难度值 参数自动调整 固定
出块概率 按算力 按股权权重 出块顺序是固定的
不可逆确认数 6个块约1小时 6秒 360个块180秒
没有获得记账权的节点的收益 小算力收益几乎为0 候选者收益为0 候选节点收益为按得票权重分配的得票奖励
散户参与形式 0 委托与投票 投票
链上治理 投票 投票
增发率 固定数量 浮动7%-20% 固定5%

共识越分散(节点多,参与度高),效率越低,但是安全性越高,就越稳定;相反共识越集中(节点垄断),效率越高,容易出现独裁和腐败,安全性越低。

发布了58 篇原创文章 · 获赞 66 · 访问量 8182

猜你喜欢

转载自blog.csdn.net/wcc19840827/article/details/90716300