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交易示例
- 创建交易
创建冻结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"
}
- 交易签名
交易签名的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
}
}
- 广播交易:
/wallet/broadcasttransaction
API 调用接受一个参数,即交易签名的 JSON 输出数据。
下面是调用广播交易后的JSON输出示例,确认交易已经广播成功。
{"result": true}
Updated almost 3 years ago