Alert Source Discuss
Standards Track: Core

EIP-7549: 将委员会索引移到证明之外

将委员会的 `index` 字段移到已签名的 Attestation 消息之外

Authors dapplion (@dapplion), Mikhail Kalinin (@mkalinin)
Created 2023-11-01

摘要

将委员会的 index 字段移到已签名的 Attestation 消息之外,以允许聚合相同的共识投票。

动机

本提案旨在通过减少验证共识规则所需的平均配对数量,来提高 Casper FFG 客户端的效率。虽然所有类型的客户端都可以从此 EIP 中受益,但证明 Casper FFG 共识的 ZK 电路可能会受到最大的影响。

在至少有 262144 个活跃索引的信标链网络上,至少需要验证 ceil(32*64 * 2/3) = 1366 个 attestation 才能达到 2/3 的阈值。参与者一次投两票:LMD GHOST 投票和 Casper-FFG 投票。但是,Attestation 消息包含三个元素:

  1. LMD GHOST 投票 (beacon_block_root, slot)。注意:如果采用(区块,slot)投票,则包括 slot。
  2. FFG 投票 (source, target)
  3. 委员会索引 (index)

对第 3 项进行签名会导致相同投票的元组产生不同的签名根。如果将委员会索引移到 Attestation 消息之外,则验证达到 2/3 阈值所需的最小 attestation 数量将减少到 ceil(32 * 2/3) = 22(系数为 62)。

现在可以将链上 attestation 更节省空间地打包到信标块中。 与今天的 2 个相比,该提案允许一个区块中最多包含 8 个 slot 值的投票。 换句话说,一个只有 1/8 在线提议者的链仍然有可能将所有投票都包含在链上。

规范

执行层

这不需要对执行层进行任何更改。

共识层

  • AttestationData 中的 index 字段设置为零的固定值
  • 将委员会索引数据移动到带有 committee_bits 的外部 Attestation 容器
  • 增加 aggregation_bits 的容量以覆盖一个 slot 中的所有委员会

拟议变更的完整规范可以在 /specs/electra/beacon-chain.md 中找到。

理由

弃用策略

可以通过以下方式弃用 AttestationData 中的 index 字段:

  1. 删除该字段
  2. 保留该字段并将其设置为零
  3. 将字段类型更改为 Optional(来自 EIP-7495 StableContainer)

此 EIP 选择第二个选项,以避免使包含 AttesterSlashing 对象变得复杂。 虽然 Attestation 容器发生了变化,但 AttesterSlashing 包含没有委员会数据的索引 attestation。

MAX_ATTESTATIONS

attestation 的最大大小增加,在具有最大委员会的网络上,其位域大小增加了 64 倍。 减少 MAX_ATTESTATIONS 值是为了限制信标块的大小,同时仍然增加投票的总容量。 值为 8 时,投票容量增加 4 倍,同时在具有 120 万个活跃索引的网络中具有相同的 attestation 空间大小。 在此处阅读详细信息 here

MAX_ATTESTER_SLASHINGS

链上 AttesterSlashing 包含参与者索引的列表。 使用此 EIP,最坏情况下的大小增加 64 倍,导致在 100 万验证者的网络中,每个 AttesterSlashing 的未压缩大小为 488 KB。 Snappy 压缩将其减少到 320 KB,这仍然很大。 为了限制块的最大大小,本提案将 MAX_ATTESTER_SLASHINGS 从 2 减少到 1,即最小值。 在此处阅读详细信息 here

使用 Bitvector 作为 committee_bits

committee_bits 序列的长度可变,最大大小为 MAX_COMMITTEES_PER_SLOT = 64Bitlist 的编码包括其实际长度,这使得 committee_bits 的大小是 Bitvector 类型的两倍。 当 slot 中的有效委员会数量小于其最大值时,信标链状态转换可确保 committee_bits 的正确性。

向后兼容性

此 EIP 向共识层上的块验证规则集引入了向后不兼容的更改,并且必须伴随硬分叉。

安全注意事项

分叉后的第一个块

由于链上 Attestation 容器发生了更改,因此无法将先前分叉的 attestation 包含在 Electra 之后的块中。 因此,分叉后的第一个块可能没有 attestation。 LMD 投票仍然可以通过 on_attestation 处理程序应用于分叉选择,因此 FFG 投票只会损失 1/32。 分配给分叉的最后一个 slot 的证明者将承担一个 epoch 值的离线处罚。 一种可能的缓解措施是更改 Electra 块体类型以允许包含来自两个分叉的 attestation。 然而,这种缓解措施增加了复杂性,但收益甚微,因此本提案选择不解决此问题。

Gossip 上的突变

index 字段移到已签名消息之外仅允许在 p2p gossip 主题 beacon_attestation_${subnet_id} 上进行恶意突变。 在其他任何地方,Attestation 消息都用外部签名包装,以防止突变。

beacon_attestation_${subnet_id} 主题的 Gossip 验证规则包括:

  • [REJECT] 证明者是委员会的成员 – 即 get_beacon_committee(state, attestation.data.slot, index) 中的 attestation.attester_index

如果攻击者改变了 index 字段,则上述规则验证将失败,并且消息将被丢弃。 如果实现在“首次见到”缓存中注册 attestation 之前运行上述检查,则不存在缓存污染的风险。

版权

版权和相关权利已通过 CC0 放弃。

Citation

Please cite this document as:

dapplion (@dapplion), Mikhail Kalinin (@mkalinin), "EIP-7549: 将委员会索引移到证明之外," Ethereum Improvement Proposals, no. 7549, November 2023. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-7549.