跳转至

wallet-cli contract create2

计算使用 CREATE2 部署合约时生成的地址。

用法

wallet-cli contract create2 --deployer <address> (--code <hex> | --code-file <path>) --salt <n> [options]

说明

纯本地运算:不访问节点、不广播,也不涉及任何账户或密码。结果在所有 TRON 网络上都一致,因此 --network 对它没有影响。仅限 TRON——在 EVM 网络上本命令会以 family_mismatch 失败。

TRON 的推导方式与以太坊不同——不要拿 EVM 的计算器来算。地址为

sha3omit12( deployer (21 bytes, 0x41-prefixed) ‖ salt (32 bytes) ‖ keccak256(code) )

其中 sha3omit12keccak256 摘要的 [11:32] 字节,把首字节改写为 0x41,再对结果做 Base58Check 编码。这里没有 0xff 前缀:21 字节、带 0x41 前缀的 deployer 本身已经区隔了域。因此同样的 deployersaltcode,在 TRON 和以太坊上会得到不同的地址。

这里的 code 必须是已经追加构造函数参数的 creation bytecode,不能使用 runtime bytecode。 构造函数参数只要相差一个字节,计算出的地址就会不同。由于 creation bytecode 通常很长,建议使用 --code-file;无论采用哪种输入方式,CLI 都会自动移除 0x 前缀和空白字符。

--salt 是一个十进制整数(64 位有符号)。它会被放进 32 字节 salt 的低位,其余部分补零;不接受十六进制形式的 salt

真正用 CREATE2 部署要求链上已启用 TVM Constantinople,但本命令只做算术运算,不受该限制。

选项

选项 说明
--deployer <address> 必填。 执行 CREATE2 的地址——可以是工厂合约,也可以是普通账户
--code <hex> creation bytecode,含构造函数参数。--code / --code-file 二选一
--code-file <path> 从文件读取 creation bytecode——推荐用法,因为它通常非常长。--code / --code-file 二选一
--salt <n> 必填。 十进制整数形式的 salt,补零至 32 字节

此外还有全局选项

示例

wallet-cli contract create2 --deployer TQkXm4vN...5Zt7Uw --code-file ./MyToken.creation.hex --salt 1
Contract address (CREATE2)
  Deployer   TQkXm4vN...5Zt7Uw
  Salt       1  (0x000000…0001)
  Code hash  c8f4a1...b91b
  Address    TXm5RQ7d...9kPa

较短的 bytecode 也可以直接内联传入:

wallet-cli contract create2 --deployer TQkXm4vN...5Zt7Uw --code 6080604052... --salt 255 -o json
{"schema":"wallet-cli.result.v1","success":true,"command":"contract.create2","data":{"deployerAddress":"TQkXm4vN...","salt":255,"saltHex":"0x00000000000000000000000000000000000000000000000000000000000000ff","codeHash":"c8f4a1...b91b","address":"TWq8dK3n...2mHb"},"meta":{"durationMs":3,"warnings":[]},"chain":{"family":"tron","network":"tron:728126428","chainId":"728126428"}}

输出

字段 类型 含义
deployerAddress string 传入的 deployer,base58 格式
salt number | string 传入的 salt,十进制。当它超出安全整数范围时是字符串,这样完整的 int64 salt 才能在 JSON 中原样保留
saltHex string 真正参与哈希计算的、补零后的 32 字节
codeHash string creation bytecodekeccak256
address string 推导出的合约地址,base58 格式

本命令从不访问节点,但它仍然是一条 TRON 链上命令:响应中会照常带上所选网络的 chain 块。这里的 --network 是可选的,只决定这个块里写的是哪个网络。

退出码

0 成功 · 1 执行失败 · 2 用法错误(missing_option——缺少 --deployer--saltfile_not_found——--code-file 不存在;invalid_value——两个 code 来源都没给或都给了、code 文件读不了、deployer 地址格式非法、code 不是合法 hex,或 salt 超出 64 位有符号范围)。

另请参见

contract deploy · contract info · encoding convert