3.如何解析交易结构
根据提交交易数据接口得到的hash
,调用查询交易接口获取交易回执。交易回执结构如下:
{
"error_code": 0,//交易查询成功
"result": {
"total_count": 1,
"transactions": [
{
"actual_fee": 776000, //交易实际花费的费用
"close_time": 1664352470872350, //交易执行完成的时间
"error_code": 0, //交易的错误码,0表示交易执行成功,非0表示交易执行失败
"error_desc": "", //交易的错误描述
"hash": "0f3477d3a6708168ce7f694a7eaf87129f7373548be0b085d3422809c03ea8d1", //交易hash值
"ledger_seq": 932290, //交易所在的区块高度
"signatures": [ //签名列表
{
"public_key": "b0656670063fd619ae607e39187477eabb70f45a657879af8c7dfe1c0dbb105dbccf23", //公钥
"sign_data": "2c212c987688c176e8b444b0e7f977d8c290ccf88a29305aadac2b693ce983827b46842e403703fd0456e23b6121cb242b1610f1926421577ee6714950dd4900" //签名数据
}
],
"transaction": { //交易内容,交易类型包括:创建账号/合约、合约调用、星火令转移、设置metadata、设置权限、记录日志
.....
},
"tx_size": 776 //交易字节数
}
]
}
}
3.1 创建账号
{
"source_address":"did:bid:efEB8Lvnzw8pzDCWUmqe1XJfNZMAYRvR",//交易源账号,即交易的发起方
"nonce":2, //交易源账户的nonce值
"fee_limit" : 1000000, //愿为交易花费的手续费
"gas_price": 1000,//gas价格(不小于配置的最低值)
"ceil_ledger_seq": 100, //可选,区块高度限制, 如果大于0,则交易只有在该区块高度之前(包括该高度)才有效
"metadata":"0123456789abcdef", //可选,用户自定义给交易的备注,16进制格式
"operations":[
{
"type": 1, // 创建账户操作类型
"source_address": "did:bid:efEB8Lvnzw8pzDCWUmqe1XJfNZMAYRvR",//可选,操作源账户,即操作的执行方
"metadata": "0123456789abcdef",//可选,用户自定义给交易的备注,16进制格式
"create_account": {
"dest_address": "did:bid:ef9nCb6Ge1Pj2wv7XW3hnzka6G2MkPZs",//待创建的目标账户地址
"init_balance": 100000,//目标账户的初始化余额
"priv": {
"master_weight": 1,//目标账户拥有的权力值
"thresholds": {
"tx_threshold": 1//发起交易需要的权力值
}
}
}
}
]
}
3.2 创建合约
{
"source_address":"did:bid:efEB8Lvnzw8pzDCWUmqe1XJfNZMAYRvR",//交易源账号,即交易的发起方
"nonce":2, //交易源账户的nonce值
"fee_limit" : 1000000, //愿为交易花费的手续费
"gas_price": 1000,//gas价格(不小于配置的最低值)
"ceil_ledger_seq": 100, //可选,区块高度限制, 如果大于0,则交易只有在该区块高度之前(包括该高度)才有效
"metadata":"0123456789abcdef", //可选,用户自定义给交易的备注,16进制格式
"operations":[
{
"type": 1, // 创建账户操作类型
"source_address": "did:bid:efEB8Lvnzw8pzDCWUmqe1XJfNZMAYRvR",//可选,操作源账户,即操作的执行方
"metadata": "0123456789abcdef",//可选,用户自定义给交易的备注,16进制格式
"create_account": {
"contract": { //合约
"payload": "
'use strict';
function init(bar)
{
return;
}
function main(input)
{
return;
}
function query()
{
return;
}
"//合约代码
},
"init_balance": 100000, //合约账户初始化资产
"init_input" : "{\"method\":\"toWen\",\"params\":{\"feeType\":0}}",//可选,合约代码init函数的入参
"priv": {
"master_weight": 0,//待创建的合约账户拥有的权力值
"thresholds": {
"tx_threshold": 1 //发起交易需要的权力值
}
}
}
}
]
}
3.3合约调用
{
"source_address": "did:bid:ef27dchGWy9WY5xVznyPScZ6MP5CATsJF",//交易源账号,即交易的发起方
"fee_limit": 200000000,//愿为交易花费的手续费
"gas_price": 200,//gas价格(不小于配置的最低值)
"nonce": 111028, //交易源账户的nonce值
"operations": [
{
"type": 7,//合约调用类型
"pay_coin": {
"dest_address": "did:bid:efMTBwMHE7audr53KyZK5cjw3ysZUXPF", //合约地址
"input": "{\"function\":\"safeTransferFrom(address,address,string)\",\"args\":\"did:bid:ef27dchGWy9WY5xVznyPScZ6MP5CATsJF,did:bid:efdcPDsvv2RnMwAt5D1PYxMtbGvW8JjT,\u0027did:bid:efdudDHcUc4EXUyW2hTCP9JtRxfiRsDB\u0027\"}" //合约调用方法
}
}
]
}
3.4 星火令转移
{
"fee_limit": 10253000,//愿为交易花费的手续费
"gas_price": 1000,//gas价格(不小于配置的最低值)
"nonce": 110, //交易源账户的nonce值
"operations": [
{
"pay_coin": {
"amount": 1000000000, //转账金额
"dest_address": "did:bid:ef3LqNzb4ssNf2vqwNwBfqngrA3Sx8yD" //目的地址
},
"type": 7// 交易操作类型
}
],
"source_address": "did:bid:ef249EXxmYEuvazPM5Qr77H5xN18Zba3f"//交易源账号,即交易的发起方
}
3.5 设置metadata
{
"source_address":"did:bid:efEB8Lvnzw8pzDCWUmqe1XJfNZMAYRvR",//交易源账号,即交易的发起方
"nonce":2, //交易源账户的nonce值
"fee_limit" : 1000000, //愿为交易花费的手续费
"gas_price": 1000,//gas价格(不小于配置的最低值)
"ceil_ledger_seq": 100,//可选,区块高度限制, 如果大于0,则交易只有在该区块高度之前(包括该高度)才有效
"metadata":"0123456789abcdef",//可选,用户自定义给交易的备注,16进制格式
"operations":[
{
"type": 4,//设置 metadata 操作类型
"source_address": "did:bid:efEB8Lvnzw8pzDCWUmqe1XJfNZMAYRvR",//可选,操作源账户,即操作的执行方
"metadata": "0123456789abcdef",//可选,用户自定义给交易的备注,16进制格式
"set_metadata": {
"key": "abc",//metadata关键字
"value": "hello abc!",//metadata内容
"version": 0 //可选,metadata版本号
}
}
]
}
3.6 设置权限
{
"source_address":"did:bid:efEB8Lvnzw8pzDCWUmqe1XJfNZMAYRvR",//交易源账号,即交易的发起方
"nonce":2, //交易源账户的nonce值
"fee_limit" : 1000000, //愿为交易花费的手续费
"gas_price": 1000,//gas价格(不小于配置的最低值)
"ceil_ledger_seq": 100,//可选,区块高度限制, 如果大于0,则交易只有在该区块高度之前(包括该高度)才有效
"metadata":"0123456789abcdef",//可选,用户自定义给交易的备注,16进制格式
"operations":[
{
"type": 9,//设置权限操作类型
"source_address": "did:bid:efEB8Lvnzw8pzDCWUmqe1XJfNZMAYRvR",//可选,操作源账户,即操作的执行方
"metadata": "0123456789abcdef",//可选,用户自定义给交易的备注,16进制格式
"set_privilege": {
"master_weight": "10",//可选,当前账户的自身权力值
"signers"://可选,需要操作的签名者列表
[
{
"address": "did:bid:ef9nCb6Ge1Pj2wv7XW3hnzka6G2MkPZs",//需要操作的签名者地址
"weight": 8 //可选,签名者的权力值
}
],
"tx_threshold": "2",//可选,发起交易需要权力值
"type_thresholds"://可选,不同操作需要的权力值
[
{
"type": 1,//创建账户操作类型
"threshold": 8 //可选,该操作需要的权力值
},
{
"type": 7,//调用合约需要权限值
"threshold": 9 //可选该操作需要的权力值
}
]
}
}
]
}
3.7 记录日志
{
"transaction": {
"nonce": 511546,
"operations": [
{
"log": {
"datas": [
"{\"data\":\"\",\"topics\":[\"ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\",\"00000000000000006566ee21773c3a96a1440a669dee46e40ca3b1d28caa5e70\",\"0000000000000000656686e34bc4e3a92a07cf162c463518a9491f0c4ad56aca\",\"0000000000000000000000000000000000000000000000000000000000061131\"]}"
],//日志内容
"topic": "evmLog_dced48d56925087f9883d7d9b66e71f8ea93681adc4b0d8a64771928202f74a0"// 日志主题
},
"type": 8 //记录日志操作类型
}
],
"source_address": "did:bid:efMTBwMHE7audr53KyZK5cjw3ysZUXPF"
}
}