Alert Source Discuss
🚧 Stagnant Standards Track: Core

EIP-3455: SUDO 操作码

引入一个新的操作码,允许从任意发送者地址进行调用。

Authors William Morriss (@wjmelements), Baptiste Vauthey (@thabaptiser)
Created 2021-04-01
Discussion Link https://ethereum-magicians.org/t/eip-3455-sudo-opcode/5860

摘要

引入一个新的操作码 SUDO,它具有与 CALL 相同的参数,外加一个用于指定发送者地址的参数。

动机

能够设置发送者地址有很多用例。

许多 token 无法挽回地被卡住,因为没有人拥有所有者地址的密钥。 特别是,根据 etherscan 的数据,在地址零处大约有 170 亿美元的 token 和以太币。 有了 SUDO,任何人都可以释放这些价值,从而带来一场结束贫困和世界饥饿的经济繁荣。 但它却像诺克斯堡的金子一样闲置在那里。 SUDO 解决了这个问题。

ERC-20 token 发送到 token 地址而不是预期接收者是一个常见的错误。 发生这种情况是因为用户将 token 地址粘贴到接收者字段中。 目前,没有办法恢复这些 token。 SUDO 解决了这个问题。

许多诈骗者通过信任交易欺诈性地收到了 token 和 ETH。 他们的受害者目前无法追回他们的资金。 SUDO 解决了这个问题。

大量用户因丢失私钥而意外锁定了 token 和以太币。 这是低效的,并提供了糟糕的用户体验。 为了适应新的和没有经验的用户,需要有一种在私钥丢失后恢复资金的方法。 SUDO 解决了这个问题。

最后,由于 bug,许多 token 和以太币被锁定在智能合约中。 我们终于可以关闭 EIP issue #156 了。 我们目前无法从被困账户中回收以太币。 SUDO 解决了这个问题。

规范

0xf8 添加一个新的操作码 (SUDO)。 SUDO 从堆栈中弹出 8 个参数。 除了发送者参数外,这些参数应与 CALL 匹配。

  1. Gas: 整数;消息调用的最大 gas 限制,如果在较低,安全地使用当前的 gas 计数器
  2. Sender: 地址,截断为低 40 字节;在调用帧内设置 CALLER
  3. To: 地址,截断为低 40 字节;设置 ADDRESS
  4. Value: 整数,如果指定的金额小于发送者账户中的值,则引发异常;随调用转移到接收者余额,设置 CALLVALUE
  5. InStart: 整数;用于 CALLDATA 的内存起始位置
  6. InSize: 整数;用于 CALLDATA 的内存长度
  7. OutStart: 整数;用于替换为 RETURNDATA 的内存起始位置
  8. OutSize: 整数;要放置在内存中的最大 RETURNDATA

执行完成后,SUDO 将一个结果值推送到堆栈,指示成功或失败。 如果调用以 STOPRETURNSELFDESTRUCT 结束,则推送 1。 如果调用以 REVERTINVALID 或 EVM 断言结束,则推送 0

理由

GAS 参数排在第一位,以便调用者可以繁琐地计算出在最后一刻发送剩余 gas 的多少。 其余从 CALL 继承的参数保持相同的顺序,发送者插入在中间。

安全考虑

没事的。

版权

CC0 下放弃版权及相关权利。

Citation

Please cite this document as:

William Morriss (@wjmelements), Baptiste Vauthey (@thabaptiser), "EIP-3455: SUDO 操作码 [DRAFT]," Ethereum Improvement Proposals, no. 3455, April 2021. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-3455.