共识算法(BABE+GRANDPA)
![未命名文件](https://gitee.com/lzw657434763/pictures/raw/master/Blog/20210628141642.png)
传统的分布式系统采用的较常用的共识算法包括raft, paxos, PBFT等。
- PBFT(practical byzantine fault tolerance)
- 是相对比较简单且实用的算法。
- 必须要指定一个委员会,只有委员会里的节点拥有投票权,不是开放式的。
而自从比特币后,出现了新的共识算法
- 工作量证明 (Proof of Work) 的共识机制
- 第一个去中心化的金融交易系统。
- 工作量证明的去中心化程度很高,允许任何节点加入网络,
- 主要问题是对算力和电力的消耗很高。
- 权益证明(Proof of Stake)的共识机制
- 是通过抵押代币来作为投票权,总的来说抵押的代币越多,投票权越大。
- 权益证明只是允许任何节点的加入,保证了网络的开放性
- 还需要搭配共识算法才能成为一个整体的去中心化共识。
- 一般最常用的有两个类型: BFT(Byzantine Fault Tolerance)共识算法和链式(Chain based)共识算法。
BFT(Byzantine Fault Tolerance)共识算法是通过领导者提出下一个区块,其他节点通过投票来决定是否接受或者拒绝这个区块。比如PBFT, Tendermint, Hotstuff。它们的主要难点在于当领导节点作恶或者下线的时候,如何在委员会里选择下一个领导者。
链式(Chain based)共识算法分为两个步骤: 出块(block proposal)和终结性(finality)。比如ouroboros, BABE(出块), Casper CBC(终结性), GRANDPA(终结性)。在substrate中,BABE和GRANDPA合在一起决定了如何出块以及如何选出最佳分支的过程。接下来主要讲解一下BABE和GRANDPA。
1.BABE算法
BABE是Blind Assignment for Blockchain Extension的缩写。简单来说,BABE把时间分为一个个epoch。每一个epoch又分为一个个的时间间隔(slot)。每一个slot里都会通过VRF(verifiable random function)从众多的节点中选出一部分有资格出块的节点(slot leader)。这里我们暂且称之为出块节点。每一个时间间隔 (slot) 选出的出块节点都可能不同,有可能多个,也可能一个都没有被选上。总体来说一个节点被选上的概率正比与它抵押的代币数量。在Substrate中,一个时间间隔大概是6秒钟。