我编写了一个非常简单的程序来测试create2()。该程序有两个契约,一个空firstContract和一个通过create2部署firstContract的测试契约。密码在下面。然后我调用deployContract()两次。第一次花费10^5气体。第二次费用为10^9气体。我知道这是地址冲突,因为create2()在第一次和第二次返回相同的地址。但是它没有报告错误,它第二次比第一次要花费更多的汽油。
contract firstContract {}
contract test{
address addr;
function deployContract() external returns(address temp){
bytes32 salt = keccak256(abi.encodePacked(addr));
bytes memory bytecode = type(firstContract).creationCode;
assembly {
temp := create2(0, add(bytecode, 32), mload(bytecode), salt)
}
}
}发布于 2022-05-06 09:23:37
CREATE2的基本气体成本与CREATE (32000)相同,但也需要额外的哈希初始化代码。它在EIP-1014中定义:
hashcost = GSHA3WORD * ceil(len(init_code) / 32)
然而,你的问题似乎是,你的第二次尝试失败了,因此消耗了所有提供的天然气,在这里:显然10亿。(我不知道你会在哪里指定10^9的汽油限制。)
https://ethereum.stackexchange.com/questions/127217
复制相似问题