Alert Source Discuss
🚧 Stagnant Standards Track: Core

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 个堆栈参数:endowmentmemory_startmemory_lengthsaltexisting_contract_addressCREATE2COPY 的行为与 CREATE2EIP-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.