Alert Source Discuss
🚧 Stagnant Standards Track: Core

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 交易,其 TransactionType0x5a。 此交易的 EIP-2718 TransactionPayloadrlp([chainId, nonce, revertNonce, budget, signatureYParity, signatureR, signatureS])。 此交易的 signatureYParity, signatureR, signatureS 元素表示对 keccak256(0x5a || rlp([chainId, nonce, revertNonce, budget])) 的 secp256k1 签名。 此交易的 EIP-2718 ReceiptPayloadrlp([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.