EIP-5478: CREATE2COPY 操作码
降低具有现有代码的合约创建的 gas 成本
Authors | Qi Zhou (@qizhou) |
---|---|
Created | 2022-08-17 |
Discussion Link | https://ethereum-magicians.org/t/eip-5478-reducing-the-gas-cost-of-contract-creation-with-existing-code/10419 |
Requires | EIP-1014, EIP-2929 |
摘要
添加一个新的操作码 CREATE2COPY
,它与 CREATE2
相同,但通过接受一个额外的参数 existing_contract_address
(它已经存储了新合约的代码),可以潜在地大幅降低 gas 成本。
动机
此 EIP 旨在降低具有相同代码的账户抽象(AA)合约的智能合约创建成本。
创建 AA 合约的主要成本是合约创建成本,尤其是数据 gas。例如,创建一个包含 10,000 字节的 AA 合约将消耗 2,000,000 的数据 gas。考虑到每个用户的 AA 合约的代码是相同的,如果合约代码已经存在于本地存储中,CREATE2COPY
可以将数据 gas 成本降低到 2600(冷账户)甚至 100(热账户)。
规范
参数
Constant | Value |
---|---|
FORK_BLKNUM |
TBD |
CREATE_DATA_GAS_PER_BYTE |
200 |
COLD_ACCOUNT_ACCESS_COST |
2600 |
WARM_ACCOUNT_ACCESS_COST |
100 |
如果 block.number >= FORK_BLKNUM
,则在 0xf6
添加一个新的操作码(CREATE2COPY
),它接受 5 个堆栈参数:endowment
、memory_start
、memory_length
、salt
、existing_contract_address
。CREATE2COPY
的行为与 CREATE2
(EIP-1014 中定义的 0xf5
)相同,唯一的区别是创建合约的代码哈希必须与 existing_contract_address
的代码哈希相同。
CREATE2COPY
具有与 CREATE2
相同的 gas
模式,但将数据 gas 从 CREATE_DATA_GAS_PER_BYTE * CONTRACT_BYTES
替换为 EXTCODEHASH
操作码的 gas 成本,如果 existing_contract_address
是首次在事务中被访问,则为 COLD_ACCOUNT_ACCESS_COST
,如果 existing_contract_address
已经根据 EIP-2929 在访问列表中,则为 WARM_ACCOUNT_ACCESS_COST
。
如果从初始化代码返回的合约代码与 existing_contract_address
的代码不同,则创建失败,并显示错误“mismatched contract creation code with existing code”(与现有代码不匹配的合约创建代码),并将消耗所有用于合约创建的 gas。
理由
TBD
安全考虑
需要讨论。
版权
在 CC0 下放弃版权及相关权利。
Citation
Please cite this document as:
Qi Zhou (@qizhou), "EIP-5478: CREATE2COPY 操作码 [DRAFT]," Ethereum Improvement Proposals, no. 5478, August 2022. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-5478.