EIP-5065: 用于转移以太币的指令
用于仅转移以太币而不转移执行流程的指令
Authors | Mudit Gupta (@maxsam4) |
---|---|
Created | 2022-04-30 |
Discussion Link | https://ethereum-magicians.org/t/eip-5065-instruction-for-transferring-ether/9107 |
Requires | EIP-2929 |
摘要
添加一个新指令,将以太币转移到目标地址,而不会将执行流程交给它。它的工作方式应该类似于 SELFDESTRUCT (0xFF)
将以太币转移到目标地址,而不对其进行调用的方式。
动机
从架构的角度来看,执行流程永远不应该交给不受信任的合约。以太坊目前没有任何理想的方法来转移以太币而不转移执行流程。人们已经提出了重入保护和类似的解决方案来防止某些类型的攻击,但这不是一个理想的解决方案。从智能合约转移以太币而不触发调用的唯一方法是创建一个虚拟合约,将精确数量的以太币发送到该合约,然后从该合约调用 SELFDESTRUCT (0xFF)
。
规范
引入一个新指令 AIRDROP
(0xFG
),将以太币转移到目标地址,而不对其进行调用。
栈输入
address: 要向其发送以太币的帐户。 value: 要发送到帐户的 wei 值。
Gas
总 Gas 成本应为静态成本 + address_access_cost + value_to_empty_account_cost 的总和。
- 静态成本:6700
- 动态成本:
- address_access_cost:如果目标不在
accessed_addresses
中,则收取COLD_ACCOUNT_ACCESS_COST
gas,并将地址添加到accessed_addresses
。否则,收取WARM_STORAGE_READ_COST
gas。目前,COLD_ACCOUNT_ACCESS_COST
为 2600,而WARM_STORAGE_READ_COST
为 100。 - value_to_empty_account_cost:如果 value 不为 0 且给定的地址指向一个空帐户,则 value_to_empty_account_cost 是帐户创建 gas 成本,目前为 25000。如果一个帐户的余额为 0,nonce 为 0 且没有代码,则该帐户为空。
- address_access_cost:如果目标不在
理由
这种行为已经可以通过部署执行 SELFDESTRUCT (0xFF)
的新合约来实现,但是成本高得令人望而却步。在大多数情况下,合约作者只想转移以太币,而不是转移执行控制权。ERC20 可以用作一个案例研究,其中大多数用户在没有转账后钩子的情况下转移资金。
此指令允许合约安全地将以太币传递给不受信任的地址,而无需担心重入或不受信任的合约可能执行的其他恶意行为。
静态 gas 成本是通过从 CALL (0xF1)
操作码的 positive_value_cost 中减去 gas 津贴 (2300) 得出的,当前设置为 9000。
向后兼容性
没有已知的问题,因为这是一个不会影响任何旧指令且不会破坏任何有效假设的新指令,因为它使不可能的事情成为可能。
测试用例
待办事项
安全考虑
没有已知的安全风险。
版权
在 CC0 下放弃版权及相关权利。
Citation
Please cite this document as:
Mudit Gupta (@maxsam4), "EIP-5065: 用于转移以太币的指令 [DRAFT]," Ethereum Improvement Proposals, no. 5065, April 2022. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-5065.