跳转至

/wallet/deploycontract

部署智能合约。返回未签名的部署交易。

  • 源码:framework/src/main/java/org/tron/core/services/http/DeployContractServlet.java
  • Method:POST
  • Contract:protocol.CreateSmartContractsmart_contract.proto

请求参数

字段 类型 必填 说明
owner_address string 部署者地址
name string 合约名
abi json string 合约 ABI(JSON 数组字符串)
bytecode string 合约字节码(hex)
parameter string 构造函数参数(hex,紧接 bytecode)
fee_limit int64 交易费用上限(sun)
call_value int64 调用合约带入的 TRX(sun)
consume_user_resource_percent int64 用户承担能量百分比 0–100
origin_energy_limit int64 部署者承担能量上限
token_id int64 调用合约带入的 TRC10 token id
call_token_value int64 调用合约带入的 TRC10 数量
permission_id int32 多签权限 ID
visible bool 地址格式

示例:

curl --request POST \
     --url https://nile.trongrid.io/wallet/deploycontract \
     --header 'accept: application/json' \
     --header 'content-type: application/json' \
     --data '
{
  "owner_address": "41dd791d6b49e190062d650e6a23c575510d35f2f9",
  "name": "MyContract",
  "abi":  "[]",
  "bytecode": "608060405234801561001057600080fd5b5060f78061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80636d4ce63c14602d575b600080fd5b60336047565b604051603e9190606b565b60405180910390f35b6000600190565b6000819050919050565b6065816052565b82525050565b6000602082019050607e6000830184605c565b9291505056fea264697066735822122000000000000000000000000000000000000000000000000000000000000000006c6578706572696d656e74616cf564736f6c63430008100033",
  "fee_limit": 1000000000,
  "consume_user_resource_percent": 100,
  "origin_energy_limit": 10000000
}
'

响应

返回未签名 protocol.Transaction(contract 类型 CreateSmartContract)。

特殊:Util.printTransactionToJSON 检测到 CreateSmartContract 时,会在 transaction 顶层额外注入预测的合约地址 contract_address(hex;由 owner_address + nonce 确定,不受 visible 影响)。签名广播后该地址即生效。

响应示例(Nile 实抓):

{
  "visible": false,
  "txID": "7fe721c3f85b6c1c9491df43778c98903b565bc4210592f449f41342041729b3",
  "contract_address": "41584587b353166787b37d1b05a4a91e59c5370bcf",
  "raw_data": {
    "contract": [
      {
        "parameter": {
          "value": {
            "owner_address": "41dd791d6b49e190062d650e6a23c575510d35f2f9",
            "new_contract": {
              "origin_address":                "41dd791d6b49e190062d650e6a23c575510d35f2f9",
              "consume_user_resource_percent": 100,
              "name":                          "MyContract",
              "bytecode":                      "608060405234801561001057600080fd5b5060f78061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80636d4ce63c14602d575b600080fd5b60336047565b604051603e9190606b565b60405180910390f35b6000600190565b6000819050919050565b6065816052565b82525050565b6000602082019050607e6000830184605c565b9291505056fea264697066735822122000000000000000000000000000000000000000000000000000000000000000006c6578706572696d656e74616cf564736f6c63430008100033",
              "abi":                           {},
              "origin_energy_limit":           10000000
            }
          },
          "type_url": "type.googleapis.com/protocol.CreateSmartContract"
        },
        "type": "CreateSmartContract"
      }
    ],
    "ref_block_bytes": "28c7",
    "ref_block_hash":  "b89ca57e9cbb96dd",
    "fee_limit":       1000000000,
    "expiration":      1777447239000,
    "timestamp":       1777447181980
  },
  "raw_data_hex": "0a0228c72208b89ca57e9cbb96dd40d8faf1c0dd335ae402081e12df020a30747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e437265617465536d617274436f6e747261637412aa020a1541dd791d6b49e190062d650e6a23c575510d35f2f91290020a1541dd791d6b49e190062d650e6a23c575510d35f2f91a0022e101608060405234801561001057600080fd5b5060f78061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80636d4ce63c14602d575b600080fd5b60336047565b604051603e9190606b565b60405180910390f35b6000600190565b6000819050919050565b6065816052565b82525050565b6000602082019050607e6000830184605c565b9291505056fea264697066735822122000000000000000000000000000000000000000000000000000000000000000006c6578706572696d656e74616cf564736f6c6343000810003330643a0a4d79436f6e74726163744080ade204709cbdeec0dd3390018094ebdc03"
}

txID / ref_block_* / expiration / timestamp / raw_data_hex / contract_address 因构造时机而异;其它 ephemeral 字段语义同 /wallet/createtransactioncontract_addressowner_address + nonce 在构造侧本地推导,不是上链结果:广播后该地址才生效。

异常响应

触发条件 响应
请求体超过 node.maxMessageSize {"Error": "class java.lang.Exception : body size is too big, the limit is <N>"}
owner_address 不是合法 base58check(visible=true 含非 base58 字符抛 {"Error": "class java.lang.IllegalArgumentException : <详情>"};仅校验位错误时 Util.getHexAddress 静默返回空串,CreateSmartContract 构造路径不校验 owner 非空,会返回 owner_address 字段缺失的合法交易(签名/广播阶段才会失败)
owner_address 不是合法 hex(visible=false {"Error": "class org.bouncycastle.util.encoders.DecoderException : <message>"}(直调 ByteArray.fromHexString
bytecode 不是合法 hex {"Error": "class org.bouncycastle.util.encoders.DecoderException : <message>"}(直调 ByteArray.fromHexString
abi 不是合法 JSON {"Error": "class com.alibaba.fastjson.JSONException : <解析器信息>"}
请求体不是合法 JSON / 字段类型不符 {"Error": "class com.alibaba.fastjson.JSONException : <解析器信息>"}{"Error": "class org.tron.core.services.http.JsonFormat$ParseException : <解码器信息>"}
consume_user_resource_percent 不在 [0, 100] {"Error": "class org.tron.core.exception.ContractValidateException : percent must be >= 0 and <= 100"}
其他异常 {"Error": "<exceptionClass> : <message>"}

部署逻辑(如 origin energy 不足、合约代码超长、构造函数 revert)在交易广播或上链阶段才会触发,不会在此接口直接返回。