跳到主要内容

zkVerify Mainchain Consensus

zkVerify 采用带确定性终结性的委托权益证明共识,使用 BABE 出块、GRANDPA 完成终结。最高质押者会被选为出块与终结的节点。

出块

我们使用 BABE(Blind Assignment for Blockchain Extension)作为出块算法。BABE 基于 slot 出块,已知的验证人集合在每个 slot 至少产出一个区块。slot 分配基于可验证随机函数(VRF)的评估。每个验证人在一个 epoch 被分配权重,epoch 被划分为多个 slot,验证人在每个 slot 计算 VRF;当 VRF 输出低于该验证人的相对权重时,可作为主作者出块。我们也启用 secondary slots,确保每个 slot 至少产出一个区块,从而维持固定出块时间。

区块终结

GRANDPA(GHOST-based Recursive ANcestor Deriving Prefix Agreement)是与 BABE 等出块机制配合的终结算法。

高层流程如下:

  • 出块: 通过 BABE 等机制产出并广播,直到 GRANDPA 终结前都视为暂定。

  • 区块投票: 验证人参与多轮投票,决定应被终结的区块。每个验证人投票给其认为可终结的区块,同时隐含支持该区块的所有祖先。

  • GHOST 规则: GRANDPA 使用 Greedy Heaviest Observed Sub-Tree(GHOST)的变体来选择获得多数票的区块。GHOST 用于挑选最“重”的链(权重最高),即获得最多验证人累计支持的链,此处权重为验证人的质押量。

  • 两阶段投票: GRANDPA 包含 “prevote” 与 “precommit” 两阶段:

    • Prevote: 验证人根据已见到的区块与当前链视图,投票给认为应终结的区块。

    • Precommit: 如果某区块是 prevote 阶段最高“已被证明”区块的后代,验证人会对其预提交。若超过 2/3 验证人直接或对其后代 prevote,则该区块被视为 justified。

  • Finalization: 一旦超过 2/3 验证人对某区块(直接或其祖先)完成 precommit,该区块即被终结,意味着它及其所有祖先不会被回滚。

参数

我们采用以下配置:出块时间 6 秒,epoch 为 1 小时,era 为 6 小时。

ParameterValueDescription
Slot Duration6 seconds出块时间窗口;仅在 session 切换时可加入/退出验证人集合。
Epoch Duration600 slots (1h)每个 epoch 的 slot 数量,期间出块者集合固定。
Era Duration6 epochs (6h)每个 era 的 epoch 数量;era 结束时进行下一轮验证人选举并结算奖励。