EIP-7549: 将委员会索引移到证明之外
将委员会的 `index` 字段移到已签名的 Attestation 消息之外
Authors | dapplion (@dapplion), Mikhail Kalinin (@mkalinin) |
---|---|
Created | 2023-11-01 |
Table of Contents
摘要
将委员会的 index
字段移到已签名的 Attestation 消息之外,以允许聚合相同的共识投票。
动机
本提案旨在通过减少验证共识规则所需的平均配对数量,来提高 Casper FFG 客户端的效率。虽然所有类型的客户端都可以从此 EIP 中受益,但证明 Casper FFG 共识的 ZK 电路可能会受到最大的影响。
在至少有 262144 个活跃索引的信标链网络上,至少需要验证 ceil(32*64 * 2/3) = 1366
个 attestation 才能达到 2/3 的阈值。参与者一次投两票:LMD GHOST 投票和 Casper-FFG 投票。但是,Attestation 消息包含三个元素:
- LMD GHOST 投票
(beacon_block_root, slot)
。注意:如果采用(区块,slot)投票,则包括 slot。 - FFG 投票
(source, target)
- 委员会索引
(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
字段:
- 删除该字段
- 保留该字段并将其设置为零
- 将字段类型更改为 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 = 64
。 Bitlist
的编码包括其实际长度,这使得 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.