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
匹配。
- Gas: 整数;消息调用的最大 gas 限制,如果在较低,安全地使用当前的 gas 计数器
- Sender: 地址,截断为低 40 字节;在调用帧内设置
CALLER
- To: 地址,截断为低 40 字节;设置
ADDRESS
- Value: 整数,如果指定的金额小于发送者账户中的值,则引发异常;随调用转移到接收者余额,设置
CALLVALUE
- InStart: 整数;用于
CALLDATA
的内存起始位置 - InSize: 整数;用于
CALLDATA
的内存长度 - OutStart: 整数;用于替换为
RETURNDATA
的内存起始位置 - OutSize: 整数;要放置在内存中的最大
RETURNDATA
执行完成后,SUDO
将一个结果值推送到堆栈,指示成功或失败。
如果调用以 STOP
、RETURN
或 SELFDESTRUCT
结束,则推送 1
。
如果调用以 REVERT
、INVALID
或 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.