API 签名和广播示例

介绍

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

冻结VS交易示例

  1. 创建交易
    创建冻结VS交易使用的API是/wallet/freezebalance 。这个交易的功能是将用户地址中一定数量的VS冻结起来,来获取资源(光量子和熵)和投票权, 调用此API将创建一个冻结VS类型的交易,通过冻结用户指定钱包地址内的VS余额,并向钱包所有者提供光量子或熵和 Vision Power(投票权)。此API有4个参数,分别是:
  • owner_address 是Hex string格式的钱包地址。
  • frozen_balance 是整数格式的冻结VS数量。
  • frozen_duration 是整数格式的冻结时间(以天为单位),最少为3天。
  • resource 是冻结VS以期望获取资源的类型,可以是字符串格式的 "ENTROPY"或"PHOTON",但只能选择其中一种。

通过调用 API 来获取 JSON 数据来冻结余额:

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

{  
   "transaction":{  
      "txID":"454f156bf1256587ff6ccdbc56e64ad0c51e4f8efea5490dcbc720ee606bc7b8",
      "raw_data":{  
         "contract":[  
            {  
               "parameter":{  
                  "value":{  
                     "amount":1000,
                     "owner_address":"46e552f6487585c2b58bc2c9bb4492bc1f17132cd0",
                     "to_address":"46d1e7a6bc354106cb410e65ff8b181c600ff14292"
                  },
                  "type_url":"type.googleapis.com/protocol.TransferContract"
               },
               "type":"TransferContract"
            }
         ],
         "ref_block_bytes":"267e",
         "ref_block_hash":"9a447d222e8de9f2",
         "expiration":1530893064000,
         "timestamp":1530893006233
      }
   },
   "privateKey":"your private key"
}
  1. 交易签名
    交易签名的API是/wallet/gettransactionsign,创建交易需要根据不同交易类型来选择不同的API,但交易签名的API只有这一个。它需要两个参数,分别是:
    transaction 参数:它是上一步的 JSON 输出。
    privateKey 参数:它是发起冻结余额交易的地址私钥。
    提示:不推荐采用这种方式进行签名,尤其是在公共的网络环境中。本例仅仅是为了说明一笔交易从创建到上链的过程。

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

{  
   "signature":[  
      "8e6582cead9ef92d7731e356b0131dca2dfe18d701bdaecb5591781af5493391127d10b4864cf45a0f56b10ed97af102864cff8205e14c8bf29b0e50d85f681801"
   ],
   "txID":"ddcbaf061eaa2454975ae8faefbeb0b410329ef9e5bb43b64d4065a7d66720c7",
   "raw_data":{  
      "contract":[  
         {  
            "parameter":{  
               "value":{  
                  "resource":"ENTROPY",
                  "frozen_duration":3,
                  "frozen_balance":1000000,
                  "owner_address":"46928c9af0651632157ef27a2cf17ca72c575a4d21"
               },
               "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}