EIP-689: 合约地址冲突导致异常停止
Authors | Yoichi Hirai <i@yoichihirai.com> |
---|---|
Created | 2017-08-15 |
简单总结
本 EIP 提议使合约创建在代码不为空或 nonce 不为零的帐户上失败。
摘要
共识测试套件中的一些测试用例尝试在已有非空代码的地址上部署合约。尽管在君士坦丁堡 (Constantinople) 分叉区块之前,这种情况实际上在主网上永远不会发生,但这些测试用例检测到客户端行为的差异。目前,黄皮书指出,即使在地址冲突的情况下,合约创建也以空代码和初始 nonce 开始。为了简化语义,本 EIP 提议地址冲突导致合约创建失败。
动机
本 EIP 与主网历史记录没有实际关联,但简化了测试和推理。
本 EIP 在君士坦丁堡 (Constantinople) 分叉后无效,因为 EIP-86 包含了本 EIP 中提出的更改。即使在君士坦丁堡 (Constantinople) 分叉之前,本 EIP 也没有实际关联,因为该更改仅在 keccak256 的哈希冲突的情况下可见。
关于测试,本 EIP 减轻了客户端支持代码覆盖回滚的负担。
关于推理,本 EIP 建立了一个不变性,即非空代码永远不会被修改。
规范
如果 block.number >= 0
,当合约创建位于 nonce 非零或代码非空的帐户上时,创建将失败,就像 init 代码执行导致异常停止一样。这适用于由合约创建交易和 CREATE 指令触发的合约创建。
理由
仅仅为了通过测试而实现从未使用的功能似乎是不切实际的。有了这个 EIP,客户端实现将会更简单。
向后兼容性
此 EIP 在主网上向后兼容。
测试用例
至少名为 createJS\_ExampleContract\_d0g0v0\_EIP158
的 BlockchainTest 将区分实现此 EIP 的客户端。
实现
版权
在 CC0 下放弃版权和相关权利。
Citation
Please cite this document as:
Yoichi Hirai <i@yoichihirai.com>, "EIP-689: 合约地址冲突导致异常停止 [DRAFT]," Ethereum Improvement Proposals, no. 689, August 2017. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-689.