Alert Source Discuss
🚧 Stagnant Standards Track: Core

EIP-7684: 返回不同凭证的存款

自动提取现有验证者记录的存款,但该存款包含不同的执行提款凭证

Authors Lion (@dapplion)
Created 2024-04-12
Discussion Link https://ethereum-magicians.org/t/eip-7684-return-deposits-for-distinct-credentials/19632

摘要

自动提取现有验证者记录的存款,但该存款包含不同的执行提款凭证。

动机

一些 staking 操作包含两个不同的实体,一个操作验证密钥,另一个提供存款资金。资金提供实体委托 stake 操作的控制权,但必须保留对资金的最终控制权。如果资金提供实体天真地提交一个包含全部 stake 金额和另一个实体验证密钥的单一存款,则会受到抢跑攻击。验证实体可以使用自己的一组提款凭证通过第二次存款抢跑更大的存款。全部 stake 金额的存款变成充值,由验证实体控制。

存在针对抢跑攻击的变通方法。在资金提供实体和验证实体之间使用某种分布式密钥生成协议,这样必须经过双方同意才能进行存款。首先提交 1 ETH 存款,等待其被包含,然后发送全部 stake 金额作为充值,以将攻击下的最大损失限制为 1 ETH。虽然这些变通方法有效,但它们使无信任自主 staking 协议的运行变得困难。

该规范将天真的存款提交造成的总损失从全部存款金额降低到 RETURN_DEPOSIT_PENALTY

规范

共识层

该规范的配置值和机制可以在共识层规范中找到。

下面包括对共识层产生的更改的草图。

  • 修改 apply_deposit 以将具有不同执行提款凭证的存款排队等待提款
  • 修改 get_expected_withdrawals 以首先返回待处理的提款
  • 修改 process_withdrawals 以清除待处理的提款队列

执行层

此规范不需要对执行层进行任何更改。

原理

持久化待处理的提款

由于循环依赖关系,无法在区块 N 中提取区块 N 中拒绝的存款。执行客户端必须在构建区块 N 的 payload 之前知道完整的提款列表。在 EIP-6110 之后,共识客户端必须在构建区块 N 的信标区块之前知道完整的执行 payload。因此,必须在未来的某个区块中提取被拒绝的存款。为简单起见,所有待处理的提款都在下一个区块中立即处理,但如果存在 DOS 问题,可以排队并逐步处理。

向后兼容性

这是对以太坊共识层的向后不兼容更改,必须通过硬分叉进行计划。

执行层不存在向前/向后兼容性问题

测试用例

测试用例正在标准共识层测试中进行中。

安全考虑事项

在当前 gas 规则和 30M gas 区块下,最坏情况下的提款数量从固定的 16 个增加到 1,271 个。引用 EIP-6110,未来的 gas 效率可能会将 30M gas 区块中的提款数量增加到 1,916 个。每次提款都会导致单个地址余额更改。对于此类操作没有明确的定价,但在最坏的情况下,它会导致区块 gas 总量显着增加(假设每次提款 6,900 gas 并且当前 gas 规则,则增加 30%)。

RETURN_DEPOSIT_PENALTY 抑制了被拒绝的存款,并施加了 144,927 Gwei / gas 的 gas 成本,假设每次提款 6,900 gas。

版权

版权及相关权利通过 CC0 放弃。

Citation

Please cite this document as:

Lion (@dapplion), "EIP-7684: 返回不同凭证的存款 [DRAFT]," Ethereum Improvement Proposals, no. 7684, April 2024. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-7684.