科技圈里那些事Y|| 波卡(Polkadot)的共识是什么?,科普( 二 )


BABE
BABE(BlindAssignmentforBlockchainExtension)是在验证节点之间运行并确定新块生产者的区块生成机制 。 BABE作为一种算法可以与OuroborosPraos相比较 , 在链选择规则和slot(验证人插槽)时间调整方面有一些关键的区别 。 BABE根据stake和使用Polkadot随机循环机制将区块生产的slot分配给验证人 。
Polkadot中的验证人将参与每个slot的抽签 , 通过这个抽签告诉验证人是否是该slot的区块生成候选人 。 Slot是不连续的时间单位 , 通常为6秒 。 由于这种随机机制 , 多个验证人可能是同一个slot的候选者 。 其他时候 , 一个slot可能是空的 , 从而导致区块时间不一致 。
一个slot有多个验证人
当在一个给定slot中有多个验证人是区块生成候选者时 , 所有验证人都要生成一个区块并将其广播到网络中 。 此时这是一场比赛 。 区块最先到达大部分网络的验证人会获胜 。 根据网络拓扑和延迟 , 这两个链将继续生产区块 , 直到最终确定启动并切断分叉 。 请参阅下面的“分叉选择”了解其工作原理 。
Slot中没有验证人
当随机抽签滚到足够低的位置 , 没有验证人获得区块生产的资格时 , 一个slot可能没有区块 。 我们通过在后台运行二级循环式验证人选择算法来避免这种情况 。 通过该算法选择生成块的验证人总是可以生成区块 , 但如果同一slot也从VRF选择的验证人生成主区块 , 则忽略这些副区块 。 因此 , 一个slot可以有一个主区块或一个副区块 , 并且不会跳过任何slot 。
VRF:https://wiki.polkadot.network/docs/en/learn-randomness
有关BABE的更多细节 , 请参阅研究草案文档 。
https://research.web3.foundation/en/latest/polkadot/BABE/Babe.html
GRANDPA:最终性工具GRANDPA(GHOST-basedRecursiveANcestorDerivingPrefixAgreement)是为Polkadot中继链实现的最终性小工具 。
它在一个部分同步的网络模型中工作 , 只要2/3的节点是诚实的 , 并且能够在异步设置中处理1/5的拜占庭节点 。
一个显著的区别是 , GRANDPA在链上而不是区块上达成协议 , 大大加快了最终确定过程 , 即使在长期的网络分区或其他网络故障之后也是如此 。
换句话说 , 只要超过2/3的验证人证明一个包含某个块的链 , 所有指向该块的块都将立即完成 。
协议
有关协议的完整说明 , 请参阅论文的标题3部分 。
https://github.com/w3f/consensus/blob/master/pdf/grandpa.pdf
实施
Rust是Substrate框架的一部分 。
https://github.com/paritytech/substrate/blob/master/frame/grandpa/ src/lib.rs
有关更多详细信息 , 请参阅W3F研究页上的GRANDPA 。
https://research.web3.foundation/en/latest/polkadot/GRANDPA.html
分叉选择
带着BABE和GRANDPA混合机制 , 波卡的分叉选择变得清晰起来 。 BABE一定要建立在GRANDPA最终确定的链上 。 当在最终确定之后有分叉时 , BABE通过构建具有最主要区块的链来提供概率最终性 。
科技圈里那些事Y|| 波卡(Polkadot)的共识是什么?,科普
文章图片
在上面的图像中 , 黑色块是已终结的 。 一个是主区块 , 两个是副区块 。 即使最上面的链是最新终结块上最长的链 , 但它不合格 , 因为它在评估时获得首选的次数比下面那条少 。
对比
中本聪共识
中本聪共识由最长链规则组成 , 使用工作量证明作为其防止女巫攻击和领导人选举的机制 。
中本聪共识只给了我们概率最终性 。 概率最终性表明 , 过去的某个区块的安全程度 , 仅取决于它拥有的确认数量 , 或在该区块上构建的区块数量 。 随着工作量证明链中构建在某特定区块上的区块越来越多 , 这条链也会花费更多计算资源 。 然而 , 包含了该区块的链不一定总是被认可的链 , 因为某位具有无限资源的参与者可能构建竞争链 , 并花费足够的计算资源来创建不包含特定块的链 。 在这种情况下 , 比特币和其他PoW链使用的最长链规则将转移到这条新的链 , 让新链成为主链 。


推荐阅读