EIP-6810: 事后级联回滚
允许在确认后撤销交易
Authors | William Morriss (@wjmelements) |
---|---|
Created | 2023-04-01 |
Discussion Link | https://ethereum-magicians.org/t/eip-6810-ex-post-facto-cascading-revert/13630 |
Requires | EIP-2718, EIP-2929 |
摘要
一种新的交易类型,可以递归地回滚发送者之前的交易,以及依赖该状态的其他交易。
动机
虽然以太坊具有通过智能合约实现可逆交易的能力,但默认设置为即时结算。 但有时用户会犯错误。 大多数错误很快就会被发现。 然而,一旦交易被确认,它就被结算了。 回滚已结算的交易有很多用例。 下面列出了一些最常见的错误。
- 错误的接收者
- 意想不到的后果
- 被骗了
此功能解决了这些问题以及更多问题,结束了所有遗憾。
规范
参数
引入了一个新的 EIP-2718 交易,其 TransactionType
为 0x5a
。
此交易的 EIP-2718 TransactionPayload
是 rlp([chainId, nonce, revertNonce, budget, signatureYParity, signatureR, signatureS])
。
此交易的 signatureYParity, signatureR, signatureS
元素表示对 keccak256(0x5a || rlp([chainId, nonce, revertNonce, budget]))
的 secp256k1 签名。
此交易的 EIP-2718 ReceiptPayload
是 rlp([status, budgetUsed, removedLogsBloom, [newReceiptPayloads]])
,其中 newReceiptPayloads
是所有已回滚交易的更新收据的顺序数组。
区块 gas 限制
类型为 0x5a
的交易应是其区块中唯一的交易。
级联回滚操作
交易费用预算初始化为 budget
指定的值,以以太币计价。
该预算是这种交易类型的交易费用。
已回滚的交易费用将从此预算中退还。
如果预算不足,则事后级联回滚交易失败,并且整个预算将支付给区块头中指定的 COINBASE
。
否则,在所有交易回滚后,预算的剩余部分将支付给 COINBASE
帐户。
状态将回滚到 revertNonce
指定的交易开始时。
访问列表初始化为空。
先前由已回滚的交易修改的任何状态都将添加到访问列表中。
任何后续读取或使用访问列表中包含的状态的交易也必须被回滚。
此操作会向前级联,直到当前区块。
状态包括:
- 以太币余额
- 合约代码
- 帐户 nonce
- 存储密钥
快照同步
由于这种交易可能会修改大量状态,因此速度较慢的客户端应使用快照同步来加载新状态。
理由
交易必须填满整个区块,以防止 MEV 攻击。
虽然一些级联回滚具有高度的意义,但另一些则相当简单。 预算确保支付了操作的全部网络成本。 例如,将代币转移给错误的接收者将相对便宜。 另一方面,回滚所有存入托管交易所的存款将会非常昂贵。
交易费用必须从此预算中退还,而不是从先前的区块奖励中退还,以保护共识协议的安全性。
快照同步应该是安全的,因为如果状态根无效,则区块生成者可能会被削减。
向后兼容性
如果我们发现任何向后兼容性问题,我们可以回滚这些交易。 如果这不起作用,我不知道是否可能需要另一次硬分叉。
测试用例
- 回滚曾经资助帐户的交易会回滚该帐户的所有后续交易。
- 回滚部署合约的交易会回滚与该合约交互的所有交易。
- 回滚到新帐户的转账不会回滚其他交易。
参考实现
看起来很简单。
稍后 TODO
;最多只需要几个小时。
安全注意事项
本规范已由伊利诺伊州参议员罗伯特·彼得斯审计。 未发现任何漏洞。
版权
在 CC0 下放弃版权及相关权利。
Citation
Please cite this document as:
William Morriss (@wjmelements), "EIP-6810: 事后级联回滚 [DRAFT]," Ethereum Improvement Proposals, no. 6810, April 2023. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-6810.