跳到主要内容

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);
}

地址的计算根据下面的公式:

addr=keccak256(0xff+sender+salt+keccak256(init_code)) \mathrm{addr = keccak256(0xff + sender + salt + keccak256(init\_code))}
  • 0xff:一个固定的前缀,计算哈希值时添加,以确保生成的地址与通过其他方法生成的地址不同
  • sender:创建新合约的交易的发送者的地址
  • salt:是一个 256 位的随机数,每次合约创建时必须是唯一的,以确保生成的合约地址也是唯一的
  • init_code:待部署合约的字节码