ATTESTATIONS
验证者应在每个时期创建、签署和广播证明。
本页概述了这些证明的外观以及它们是如何在共识客户端之间进行处理和通信的。
什么是证明?
每个时期(6.4 分钟),验证者都会向网络提出证明。证明适用于时代中的特定时隙。
证明的目的是投票支持验证者对链的看法,特别是最近的合理区块和当前时期的第一个区块(称为源和目标检查点)。
为所有参与的验证者组合此信息,使网络能够就区块链的状态达成共识。
该证明包含以下组件:
aggregation_bits:验证器的位列表,其中位置映射到其委员会中的验证器索引;值 (0/1) 表示验证者是否对数据进行了签名(即它们是否处于活动状态并与区块提议者达成一致)
数据:与证明有关的详细信息,定义如下
签名:聚合各个验证者签名的 BLS 签名
证明验证者的首要任务是构建数据。
数据包含以下信息:
slot:证明引用的槽号
index:一个数字,用于标识验证者在给定插槽中属于哪个委员会
beacon_block_root:验证者在链头看到的块的根哈希(应用分叉选择算法的结果)
source 来源:确定性投票的一部分,表明验证者认为最近的合理区块
target 目标:确定性投票的一部分,表明验证者将什么视为当前 epoch 中的第一个块
一旦数据构建完成,验证者可以将aggregation_bits中与自己的验证者索引对应的位从0翻转为1,以表明他们参与了。
最后,验证者签署证明并将其广播到网络。
聚合证明(Aggregated attestation)
为每个验证者在网络上传递这些数据会产生大量开销。
因此,来自各个验证者的证明会在子网内聚合,然后再更广泛地传播。
这包括将签名聚合在一起,以便广播的证明包括共识数据和通过组合所有同意该数据的验证者的签名形成的单个签名。
这可以使用 aggregation_bits 进行检查,因为它提供了委员会中每个验证者的索引(其 ID 在数据中提供),可用于查询个人签名。
在每个 epoch 中,每个子网中的一个验证器被选为聚合器。聚合器收集它通过八卦网络听到的所有证明,这些证明具有与其自己的等效数据。
每个匹配证明的发送者都记录在aggregation_bits 中。然后聚合器将证明聚合广播到更广泛的网络。
当验证者被选为区块提议者时,他们会将来自子网的聚合证明打包到新区块中的最新插槽。
证明包含生命周期
-
Generation
-
Propagation
-
Aggregation
-
Propagation
-
Inclusion
下图概述了证明生命周期:
奖励
验证者因提交证明而获得奖励。
证明奖励取决于两个变量,基本奖励和包含延迟。
包含延迟的最佳情况是等于 1。
attestation reward = 7/8 x base reward x (1/inclusion delay)
基础奖励
基础奖励是根据证明验证者的数量及其有效质押的以太币余额计算的:
base reward = validator effective balance x 2^6 / SQRT(Effective balance of all active validators)
包含延迟
在验证者对链头(区块 n)进行投票时,区块 n+1 尚未提出。
因此,证明自然会在一个区块后被包含在内,因此所有投票决定区块 n 为链头的证明都被包含在区块 n+1 中,并且包含延迟为 1。
如果包含延迟加倍到两个插槽,则证明奖励减半,因为 为了计算证明奖励,基本奖励乘以包含延迟的倒数。
证明场景
缺少投票验证人
验证者最多有 1 个 epoch 提交他们的证明。
如果在 epoch 0 中错过了证明,他们可以在 epoch 1 中提交包含延迟的证明。
缺少聚合器
每个 epoch 总共有 16 个聚合器。
此外,随机验证者订阅两个子网 256 个 epoch 并作为备份,以防聚合器丢失。
缺少区块提议者
请注意,在某些情况下,幸运的聚合器也可能成为区块提议者。
如果由于区块提议者丢失而未包含证明,则下一个块提议者将选择聚合的证明并将其包含到下一个块中。
但是,包含延迟将增加一。
参考资料
https://ethereum.org/zh/developers/docs/consensus-mechanisms/pos/attestations/