我签订了一份工厂合同,但不知道在createContract函数中使用什么方法是最好的:
function createContract(uint256 x, uint256 y) external returns (address contractAddress) {
MyContract contract = new MyContract(x, y);
contractAddress = address(contract);
}还是这种方法更好:
function createContract(uint256 x, uint256 y) external returns (address contractAddress) {
bytes memory bytecode = type(MyContract).creationCode;
bytecode = abi.encodePacked(bytecode, abi.encode(x, y));
bytes32 salt = keccak256(abi.encodePacked(x, y));
assembly {
contractAddress := create2(0, add(bytecode, 0x20), mload(bytecode), salt)
}
}哪一个会更高效,有更少的时间复杂度和更少的代码大小?
发布于 2022-08-04 09:57:15
第一种方法使用原始的create操作码,而第二种方法使用create2操作码。
因为你的目标是降低汽油价格,所以第一个片段对你的情况更有用。
具体来说,如果MyContract接受构造函数中的2个uint256参数,否则是空的,并且没有编译器优化,那么事务成本如下:
如果您的目标是基于MyContract和y值的确定性地址,那么第二种方法是合适的,因为第一种方法不允许它。
https://stackoverflow.com/questions/73232746
复制相似问题