API 签名和广播示例

介绍

TRON 网络具有各种 API 调用,允许用户与区块链进行交互。可以在 API 参考页中找到这些API 调用,其中分别列出了调用FullNode节点的API、调用SolidityNode节点的API和通过TronWeb代码库进行调用的方式。有些API调用是用于查询链上数据,并不会创建交易,但有些API调用是可以创建交易并广播上链的,从而引发链上数据的状态修改。 本篇指南主要讲解的是后面的这一类交易,通过引导用户完成TRX Balance Freeze 的例子,来展示通过API完成交易创建、交易签名和交易广播的三步流程。

质押TRX交易示例

  1. 创建交易
    创建质押TRX交易使用的API是/wallet/freezebalancev2 。这个交易的功能是将用户地址中一定数量的TRX质押起来,以获取带宽或能量,以及投票权, 调用此API将创建一个质押TRX类型的交易。此API有3个参数,分别是:
  • owner_address 是Hex string格式的钱包地址。
  • frozen_balance 是整数格式的质押的TRX数量。
  • resource 是质押TRX以期望获取资源的类型,可以是字符串格式的 "ENERGY"或"BANDWIDTH",但只能选择其中一种。

通过调用 API 来获取 JSON 数据来质押余额:

下面是执行该API后得到的JSON输出示例。此 JSON 输出将用于下一步的交易签名。

{
    "visible": false,
    "txID": "f947f1283f7b43c111eba662ab5d27b31dc906b77fdb0b3e52ee626335b21108",
    "raw_data": {
        "contract": [
            {
                "parameter": {
                    "value": {
                        "resource": "ENERGY",
                        "frozen_balance": 1000000,
                        "owner_address": "41e552f6487585c2b58bc2c9bb4492bc1f17132cd0"
                    },
                    "type_url": "type.googleapis.com/protocol.FreezeBalanceV2Contract"
                },
                "type": "FreezeBalanceV2Contract"
            }
        ],
        "ref_block_bytes": "a59c",
        "ref_block_hash": "aef359052c4aa176",
        "expiration": 1681117668000,
        "timestamp": 1681117610802
    },
    "raw_data_hex": "0a02a59c2208aef359052c4aa17640a0c5afd3f6305a59083612550a34747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e467265657a6542616c616e63655632436f6e7472616374121d0a1541e552f6487585c2b58bc2c9bb4492bc1f17132cd010c0843d180170b286acd3f630"
}
  1. 交易签名
    交易签名的API是/wallet/gettransactionsign,创建交易需要根据不同交易类型来选择不同的API,但交易签名的API只有这一个。它需要两个参数,分别是:
    transaction 参数:它是上一步的 JSON 输出。
    privateKey 参数:它是发起质押余额交易的地址私钥。
    提示:不推荐采用这种方式进行签名,尤其是在公共的网络环境中。本例仅仅是为了说明一笔交易从创建到上链的过程。

下面是执行签名后的JSON输出示例,可以看到已经带有了签名(signature)字段:

{  
   "signature":[  
      "8e6582cead9ef92d7731e356b0131dca2dfe18d701bdaecb5591781af5493391127d10b4864cf45a0f56b10ed97af102864cff8205e14c8bf29b0e50d85f681801"
   ],
   "txID":"ddcbaf061eaa2454975ae8faefbeb0b410329ef9e5bb43b64d4065a7d66720c7",
   "raw_data":{  
      "contract":[  
         {  
            "parameter":{  
               "value":{  
                  "resource":"ENERGY",
                  "frozen_duration":3,
                  "frozen_balance":1000000,
                  "owner_address":"41928c9af0651632157ef27a2cf17ca72c575a4d21"
               },
               "type_url":"type.googleapis.com/protocol.FreezeBalanceContract"
            },
            "type":"FreezeBalanceContract"
         }
      ],
      "ref_block_bytes":"ee08",
      "ref_block_hash":"7b2480cc92edd8a2",
      "expiration":1540253364000,
      "timestamp":1540253304828
   }
}
  1. 广播交易/wallet/broadcasttransaction API 调用接受一个参数,即交易签名的 JSON 输出数据。

下面是调用广播交易后的JSON输出示例,确认交易已经广播成功。

{"result": true}