EIP-1014: Skinny CREATE2
新增以太坊虚拟机 (EVM) 指令 CREATE2
, 操作码为0xF5
。其行为与 CREATE
指令相同,用来创建智能合约。接受 4 个堆栈参数
endowment
: 发送到创建的合约账户的ETH
数量memory_start
: 内存的起始位置memory_length
: 内存长度salt
: 部署合约的salt
值,长度为 32 字节
function deploy(bytes memory _bytecode, uint _salt) external {
address addr;
assembly {
addr := create2(0, add(_bytecode, 0x20), mload(_bytecode), _salt)
if iszero(extcodesize(addr)) {
revert(0, 0)
}
}
emit Deployed(addr, _salt);
}
地址的计算根据下面的公式:
0xff
:一个固定的前缀,计算哈希值时添加,以确保生成的地址与通过其他方法生成的地址不同sender
:创建新合约的交易的发送者的地址salt
:是一个 256 位的随机数,每次合约创建时必须是唯一的,以确保生成的合约地址也是唯一的init_code
:待部署合约的字节码