跳到主要内容

http

1. 介绍

本文档的第3至5章详细介绍了BubiChain如何使用API进行常用操作,包括Gas转移、合约部署和合约调用等。通过阅读快速使用指南,您将能够快速熟悉HTTP接口的操作流程。

第6至10章为开发人员和用户提供了详细的HTTP接口说明。通过这些接口,您可以执行各种操作,包括数据查询和发送交易等。

2. 环境准备

  • 准备一个运行的节点,如果尚未部署节点,请参考部署节点以了解详细的区块链节点部署方法。

    本文的接口说明提供了HTTP请求示例,您需要将示例中的{url}替换为具体的网站域名或IP地址。

    • 如果您选择使用布比的体验链,请将 {url} 替换为 https://seed1-node.bubi.cn

    • 或者,您也自行搭建节点,然后将 {url} 替换为所部署节点的IP地址。在节点的配置文件中配置端口号:

    config/bubi.json

    {
    "webserver": {
    "listen_addresses": "0.0.0.0:19333"
    }
    }
  • 准备一个激活的账号,如果您还没有账号,请参考激活账号了解账号创建和激活的方法。

3. 快速使用-转移gas

示例中账户adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd,向账户adxSg5szfwh7bLaF9MF2KiUD2XNGVdB8ybLz9转移1000gas。要求两个账户都被激活,且账户adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd有充足的gas用来发起交易。

3.1. 查询账户nonce

通过API getAccountBase查询源账号adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd的nonce值。

HTTP请求示例:

curl https://seed1-node.bubi.cn/getAccountBase?address=adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd

请求参数说明:

字段名类型描述
addressString必填,账号地址。

成功的返回JSON数据:

{
"error_code" : 0,
"result" : {
"address" : "adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd",
"assets_hash" : "ad67d57ae19de8068dbcd47282146bd553fe9f684c57c8c114453863ee41abc3",
"balance" : 98997306901984998,
"metadatas_hash" : "ad67d57ae19de8068dbcd47282146bd553fe9f684c57c8c114453863ee41abc3",
"nonce" : 31,
"priv" : {
"master_weight" : 1,
"thresholds" : {
"tx_threshold" : 1
}
}
}
}

响应参数说明:

字段名类型描述
error_codeInt0表示查询成功,4表示账户未激活。
addressString查询的账户地址。
assets_hashString资产哈希。
balanceInt账户gas余额。
metadatas_hashStringmetadata哈希。
nonceInt账号当前作为交易源执行过的交易数量。若查询结果没有显示nonce值,说明账号的当前nonce是0。
privJson账户权限。

3.2. 序列化交易

组装交易结构,并通过API getTransactionBlob将交易结构序列化为。

HTTP请求示例:

curl -d '{
"source_address":"adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd",
"nonce":32,
"fee_limit":10000000000,
"gas_price":1000,
"operations":[
{
"type":7,
"pay_coin":{
"dest_address":"adxSg5szfwh7bLaF9MF2KiUD2XNGVdB8ybLz9",
"amount":1000
}
}
]
}' https://seed1-node.bubi.cn/getTransactionBlob

请求参数说明:

字段名类型描述
source_addressString必填,源账户地址,即发起交易转出gas的账户。
nonceInt必填,必须为源账户当前的nonce值加1。账户当前nonce值在3.1中获得,根据实际查询的结果填写。
fee_limitInt必填,愿意支付的最大费用。
gas_priceInt必填,gas价格。
typeInt必填,操作码。
dest_addressString必填,目标账户地址,即接收gas的账户。
amountInt必填,转移gas的数量。

成功的返回JSON数据:

{
"error_code" : 0,
"error_desc" : "",
"result" : {
"hash" : "cfec20771e871b97d4f49737e7c8c021d155c9d8720bf1d29be77f75ef99f6a9",
"transaction_blob" : "0a25616478537031583456376858444452424b484c3655323143706250686b693759716a7555641020222e0807622a0a25616478536735737a66776837624c6146394d46324b69554432584e475664423879624c7a3910e80730c0843d38e807"
}
}

响应参数:

字段名类型描述
error_codeInt0表示成功序列化,2表示交易结构参数错误。
hashString序列化结果的哈希值。
transaction_blobString交易序列化之后的16进制表示。

3.3. 签名交易

通过API getSignaturetransaction_blob进行签名。

注意:这种签名方式不安全,会暴露账号私钥,仅在测试时使用。推荐使用离线交易签名工具,在计算机本地进行签名。

HTTP请求示例:

curl -d '{
"private_key":"privbtBp152KnunKvCBgFQX96zuASSH6FBY9KVTX1bifPCLUWarq9EaN",
"transaction_blob": "0a25616478537031583456376858444452424b484c3655323143706250686b693759716a7555641020222e0807622a0a25616478536735737a66776837624c6146394d46324b69554432584e475664423879624c7a3910e80730c0843d38e807"
}' https://seed1-node.bubi.cn/getSignature

请求参数说明:

字段名类型描述
private_keyString必填,源账户的私钥。
transaction_blobString必填,交易序列化的16进制表示,3.2节序列化的结果。

成功的返回JSON数据:

{
"error_code" : 0,
"result" : {
"data" : "0a25616478537031583456376858444452424b484c3655323143706250686b693759716a7555641020222e0807622a0a25616478536735737a66776837624c6146394d46324b69554432584e475664423879624c7a3910e80730c0843d38e807",
"public_key" : "b001ac76f97b0fda145c68e2edf6665c247a292260694b5dfcacac8acb658bd3746e7d8a3032",
"sign_data" : "c1315794b0bc6d2263da841ce86eafae89b88277b22557de3a2272201ab941d64832a4bd6dcf1c3732d11d2fe108ad1c93a9be229e83e8b61bbeaa36f8388a0f"
}
}
字段名类型描述
dataString交易序列化的16进制表示,即transaction_blob。
public_keyString源账户的公钥。
sign_dataString签名数据。

3.4. 提交交易

通过API submitTransaction将交易提交到链上。

HTTP请求示例:

curl -d '{
"items" : [
{
"transaction_blob" : "0a25616478537031583456376858444452424b484c3655323143706250686b693759716a7555641020222e0807622a0a25616478536735737a66776837624c6146394d46324b69554432584e475664423879624c7a3910e80730c0843d38e807",
"signatures" : [
{
"sign_data" : "c1315794b0bc6d2263da841ce86eafae89b88277b22557de3a2272201ab941d64832a4bd6dcf1c3732d11d2fe108ad1c93a9be229e83e8b61bbeaa36f8388a0f",
"public_key" : "b001ac76f97b0fda145c68e2edf6665c247a292260694b5dfcacac8acb658bd3746e7d8a3032"
}
]
}
]
}' https://seed1-node.bubi.cn/submitTransaction

请求参数说明:

字段名类型描述
transaction_blobString必填,交易序列化的16进制表示。
sign_dataString必填,交易签名。
public_keyString必填,源账户公钥。

成功的返回JSON数据:

{
"results" : [
{
"error_code" : 0,
"error_desc" : "",
"hash" : "cfec20771e871b97d4f49737e7c8c021d155c9d8720bf1d29be77f75ef99f6a9"
}
],
"success_count" : 1
}

响应参数说明:

字段名类型描述
error_codeInt错误码,交易成功时为0。
error_descString错误信息,交易成功时为空。
hashString交易哈希,可通过哈希值查询交易的内容。

3.5. 查询交易

通过API getTransactionHistory查询交易哈希为cfec20771e871b97d4f49737e7c8c021d155c9d8720bf1d29be77f75ef99f6a9的交易内容。

HTTP请求示例:

curl https://seed1-node.bubi.cn/getTransactionHistory?hash=cfec20771e871b97d4f49737e7c8c021d155c9d8720bf1d29be77f75ef99f6a9

请求参数说明:

字段名类型描述
hashString必填,交易哈希。参数来自3.4提交交易的响应结果。

成功的返回JSON数据:

{
"error_code":0,
"result":{
"total_count":1,
"transactions":[
{
"actual_fee":245000,
"close_time":1710559768631168,
"error_code":0,
"error_desc":"",
"hash":
"cfec20771e871b97d4f49737e7c8c021d155c9d8720bf1d29be77f75ef99f6a9",
"ledger_seq":32600,
"signatures":[
{
"public_key": "b001ac76f97b0fda145c68e2edf6665c247a292260694b5dfcacac8acb658bd3746e7d8a3032",
"sign_data": "c1315794b0bc6d2263da841ce86eafae89b88277b22557de3a2272201ab941d64832a4bd6dcf1c3732d11d2fe108ad1c93a9be229e83e8b61bbeaa36f8388a0f"
}
],
"transaction":{
"fee_limit":1000000,
"gas_price":1000,
"nonce":32,
"operations":[
{
"pay_coin":{
"amount":1000,
"dest_address":"adxSg5szfwh7bLaF9MF2KiUD2XNGVdB8ybLz9"
},
"type":7
}
],
"source_address":"adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd"
},
"tx_size":245
}
]
}
}

4. 快速体验-合约操作

示例中账户adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd发起交易创建一个合约账户,并调用合约接口。要求账户已激活,且有充足的gas余额发起交易。

4.1. 创建合约账户

  • 查询账户nonce

通过API getAccountBase查询源账号adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd的nonce值。

HTTP请求示例:

curl https://seed1-node.bubi.cn/getAccountBase?address=adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd

请求参数说明:

字段名类型描述
addressString必填,账号地址。

成功的返回JSON数据:

{
"error_code" : 0,
"result" : {
"address" : "adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd",
"assets_hash" : "ad67d57ae19de8068dbcd47282146bd553fe9f684c57c8c114453863ee41abc3",
"balance" : 98997296901738998,
"metadatas_hash" : "ad67d57ae19de8068dbcd47282146bd553fe9f684c57c8c114453863ee41abc3",
"nonce" : 33,
"priv" : {
"master_weight" : 1,
"thresholds" : {
"tx_threshold" : 1
}
}
}
}

响应参数说明:

字段名类型描述
error_codeInt0表示查询成功,4表示账户未激活。
addressString查询的账户地址。
assets_hashString资产哈希。
balanceInt账户gas余额。
metadatas_hashStringmetadata哈希。
nonceInt账号当前作为交易源执行过的交易数量。若查询结果没有显示nonce值,说明账号的当前nonce是0。
privJson账户权限。
  • 序列化交易

组装交易结构,并通过API getTransactionBlob将交易结构序列化为。

HTTP请求示例:

curl -d '{
"source_address":"adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd",
"nonce":34,
"fee_limit":10000000000,
"gas_price":1000,
"operations":[
{
"type":1,
"create_account":{
"contract":{
"payload":"
\"use strict\";
function init(bar){
return;
}
function main(input){
let para = JSON.parse(input);
if (para.do_foo){
let x = {
\"hello\":\"world\"
};
}
}
function query(input){
return input;
}",
"owner": "adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd"
},
"init_balance":10000000,
"init_input":"",
"priv":{
"master_weight": 0,
"thresholds":{
"tx_threshold":1
}
}
}
}
]
}' https://seed1-node.bubi.cn/getTransactionBlob

请求参数说明:

字段名类型描述
source_addressString必填,源账户地址,即发起交易转出gas的账户。
nonceInt必填,必须为源账户当前的nonce值加1。账户当前nonce值在3.1中获得,根据实际查询的结果填写。
fee_limitInt必填,愿意支付的最大费用。
gas_priceInt必填,gas价格。
typeInt必填,操作码。
payloadString必填,合约代码。
ownerString选填,合约的拥有者,不填合约无法升级。
init_balanceString选填,合约账号的初始余额,默认为0。
init_inputString选填,合约init函数入参,若无参数可为空。
privJson必填,合约账号权限,参数固定。

成功的返回JSON数据:

{
"error_code" : 0,
"error_desc" : "",
"result" : {
"hash" : "df2bd0be1ccd9a5a06288a6729e128ac76f0f5a42c0d35187708516c4bea6ad5",
"transaction_blob" : "0a25616478537031583456376858444452424b484c3655323143706250686b693759716a755564102222900508012a8b0512fd0412d3040a2020202020202020202020202020202020202020202020202275736520737472696374223b0a20202020202020202020202020202020202020202020202066756e6374696f6e20696e697428626172297b0a2020202020202020202020202020202020202020202020202020202072657475726e3b0a2020202020202020202020202020202020202020202020207d0a20202020202020202020202020202020202020202020202066756e6374696f6e206d61696e28696e707574297b0a202020202020202020202020202020202020202020202020202020206c65742070617261203d204a534f4e2e706172736528696e707574293b0a2020202020202020202020202020202020202020202020202020202069662028706172612e646f5f666f6f297b0a20202020202020202020202020202020202020202020202020202020202020206c65742078203d207b0a2020202020202020202020202020202020202020202020202020202020202020202020202268656c6c6f223a22776f726c64220a20202020202020202020202020202020202020202020202020202020202020207d3b0a202020202020202020202020202020202020202020202020202020207d0a2020202020202020202020202020202020202020202020207d0a20202020202020202020202020202020202020202020202066756e6374696f6e20717565727928696e707574297b200a2020202020202020202020202020202020202020202020202020202072657475726e20696e7075743b0a2020202020202020202020202020202020202020202020207d2225616478537031583456376858444452424b484c3655323143706250686b693759716a7555641a041a0208012880ade2043080c8afa02538e807"
}
}

响应参数说明:

字段名类型描述
hashString序列化结果的哈希值。
transaction_blobString交易序列化之后的16进制表示。
  • 签名交易

通过API getSignaturetransaction_blob进行签名。

**注意:**这种签名方式不安全,会暴露账号私钥,仅在测试时使用。推荐使用离线交易签名工具,在计算机本地进行签名。

HTTP请求示例:

curl -d '{
"private_key":"privbtBp152KnunKvCBgFQX96zuASSH6FBY9KVTX1bifPCLUWarq9EaN",
"transaction_blob": "0a25616478537031583456376858444452424b484c3655323143706250686b693759716a755564102222900508012a8b0512fd0412d3040a2020202020202020202020202020202020202020202020202275736520737472696374223b0a20202020202020202020202020202020202020202020202066756e6374696f6e20696e697428626172297b0a2020202020202020202020202020202020202020202020202020202072657475726e3b0a2020202020202020202020202020202020202020202020207d0a20202020202020202020202020202020202020202020202066756e6374696f6e206d61696e28696e707574297b0a202020202020202020202020202020202020202020202020202020206c65742070617261203d204a534f4e2e706172736528696e707574293b0a2020202020202020202020202020202020202020202020202020202069662028706172612e646f5f666f6f297b0a20202020202020202020202020202020202020202020202020202020202020206c65742078203d207b0a2020202020202020202020202020202020202020202020202020202020202020202020202268656c6c6f223a22776f726c64220a20202020202020202020202020202020202020202020202020202020202020207d3b0a202020202020202020202020202020202020202020202020202020207d0a2020202020202020202020202020202020202020202020207d0a20202020202020202020202020202020202020202020202066756e6374696f6e20717565727928696e707574297b200a2020202020202020202020202020202020202020202020202020202072657475726e20696e7075743b0a2020202020202020202020202020202020202020202020207d2225616478537031583456376858444452424b484c3655323143706250686b693759716a7555641a041a0208012880ade2043080c8afa02538e807"
}' https://seed1-node.bubi.cn/getSignature

请求参数说明:

字段名类型描述
private_keyString必填,源账户的私钥。
transaction_blobString必填,交易序列化的16进制表示,4.1.2节序列化的结果。

成功的返回JSON数据:

{
"error_code" : 0,
"result" : {
"data" : "0a25616478537031583456376858444452424b484c3655323143706250686b693759716a755564102222900508012a8b0512fd0412d3040a2020202020202020202020202020202020202020202020202275736520737472696374223b0a20202020202020202020202020202020202020202020202066756e6374696f6e20696e697428626172297b0a2020202020202020202020202020202020202020202020202020202072657475726e3b0a2020202020202020202020202020202020202020202020207d0a20202020202020202020202020202020202020202020202066756e6374696f6e206d61696e28696e707574297b0a202020202020202020202020202020202020202020202020202020206c65742070617261203d204a534f4e2e706172736528696e707574293b0a2020202020202020202020202020202020202020202020202020202069662028706172612e646f5f666f6f297b0a20202020202020202020202020202020202020202020202020202020202020206c65742078203d207b0a2020202020202020202020202020202020202020202020202020202020202020202020202268656c6c6f223a22776f726c64220a20202020202020202020202020202020202020202020202020202020202020207d3b0a202020202020202020202020202020202020202020202020202020207d0a2020202020202020202020202020202020202020202020207d0a20202020202020202020202020202020202020202020202066756e6374696f6e20717565727928696e707574297b200a2020202020202020202020202020202020202020202020202020202072657475726e20696e7075743b0a2020202020202020202020202020202020202020202020207d2225616478537031583456376858444452424b484c3655323143706250686b693759716a7555641a041a0208012880ade2043080c8afa02538e807",
"public_key" : "b001ac76f97b0fda145c68e2edf6665c247a292260694b5dfcacac8acb658bd3746e7d8a3032",
"sign_data" : "cdad0b4b0f35427978a9669312a653891f27967db834791b0a1b401b2749aea5cca8e2c753f7712285cd086d79e7c1ec3b861fb8a1227a93e3d2cb61901ce202"
}
}

响应参数说明:

字段名类型描述
hashString交易哈希,可通过哈希值查询交易的内容。
  • 提交交易

通过API submitTransaction将交易提交到链上。

HTTP请求示例:

curl -d '{
"items" : [
{
"transaction_blob" : "0a25616478537031583456376858444452424b484c3655323143706250686b693759716a755564102222900508012a8b0512fd0412d3040a2020202020202020202020202020202020202020202020202275736520737472696374223b0a20202020202020202020202020202020202020202020202066756e6374696f6e20696e697428626172297b0a2020202020202020202020202020202020202020202020202020202072657475726e3b0a2020202020202020202020202020202020202020202020207d0a20202020202020202020202020202020202020202020202066756e6374696f6e206d61696e28696e707574297b0a202020202020202020202020202020202020202020202020202020206c65742070617261203d204a534f4e2e706172736528696e707574293b0a2020202020202020202020202020202020202020202020202020202069662028706172612e646f5f666f6f297b0a20202020202020202020202020202020202020202020202020202020202020206c65742078203d207b0a2020202020202020202020202020202020202020202020202020202020202020202020202268656c6c6f223a22776f726c64220a20202020202020202020202020202020202020202020202020202020202020207d3b0a202020202020202020202020202020202020202020202020202020207d0a2020202020202020202020202020202020202020202020207d0a20202020202020202020202020202020202020202020202066756e6374696f6e20717565727928696e707574297b200a2020202020202020202020202020202020202020202020202020202072657475726e20696e7075743b0a2020202020202020202020202020202020202020202020207d2225616478537031583456376858444452424b484c3655323143706250686b693759716a7555641a041a0208012880ade2043080c8afa02538e807",
"signatures" : [
{
"sign_data" : "cdad0b4b0f35427978a9669312a653891f27967db834791b0a1b401b2749aea5cca8e2c753f7712285cd086d79e7c1ec3b861fb8a1227a93e3d2cb61901ce202",
"public_key" : "b001ac76f97b0fda145c68e2edf6665c247a292260694b5dfcacac8acb658bd3746e7d8a3032"
}
]
}
]
}' https://seed1-node.bubi.cn/submitTransaction

请求参数说明:

字段名类型描述
transaction_blobString必填,交易序列化的16进制表示。
sign_dataString必填,交易签名。
public_keyString必填,源账户公钥。

成功的返回JSON数据:

{
"results" : [
{
"error_code" : 0,
"error_desc" : "",
"hash" : "df2bd0be1ccd9a5a06288a6729e128ac76f0f5a42c0d35187708516c4bea6ad5"
}
],
"success_count" : 1
}

响应参数说明:

字段名类型描述
hashString交易哈希,可通过哈希值查询交易的内容。
  • 查询交易

通过API getTransactionHistory查询交易哈希为df2bd0be1ccd9a5a06288a6729e128ac76f0f5a42c0d35187708516c4bea6ad5的交易内容。

HTTP请求示例:

curl https://seed1-node.bubi.cn/getTransactionHistory?hash=df2bd0be1ccd9a5a06288a6729e128ac76f0f5a42c0d35187708516c4bea6ad5

请求参数说明:

字段名类型描述
hashString必填,交易哈希。参数来自4.1.4提交交易的响应结果。

成功的返回JSON数据:

{
"error_code":0,
"result":{
"total_count":1,
"transactions":[
{
"actual_fee":1000859000,
"close_time":1710569550202650,
"error_code":0,
"error_desc":"[{\"contract_address\":\"adxSTAHGv4DJEGmrD7uuZzG3XCQDWSbksJ9hf\",\"contract_evm_address\":\"0x01541dea72376f28c999da6d59de3111dcd2e6fb\",\"operation_index\":0}]",
"hash":
"df2bd0be1ccd9a5a06288a6729e128ac76f0f5a42c0d35187708516c4bea6ad5",
"ledger_seq":32764,
"signatures":[
{
"public_key": "b001ac76f97b0fda145c68e2edf6665c247a292260694b5dfcacac8acb658bd3746e7d8a3032",
"sign_data": "cdad0b4b0f35427978a9669312a653891f27967db834791b0a1b401b2749aea5cca8e2c753f7712285cd086d79e7c1ec3b861fb8a1227a93e3d2cb61901ce202"
}
],
"transaction":{
"fee_limit":10000000000,
"gas_price":1000,
"nonce":34,"operations":[
{
"create_account":{
"contract":{
"owner":"adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd",
"payload":"\n \"use strict\";\n function init(bar){\n return;\n }\n function main(input){\n let para = JSON.parse(input);\n if (para.do_foo){\n let x = {\n \"hello\":\"world\"\n };\n }\n }\n function query(input){ \n return input;\n }"
},
"init_balance":10000000,
"priv":{
"thresholds":{
"tx_threshold":1
}
}
},
"type":1
}
],
"source_address":"adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd"
},
"tx_size":859
}
]
}
}

4.2. 调用合约main接口

  • 查询账户nonce

通过API getAccountBase查询源账号adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd的nonce值。

HTTP请求示例:

curl https://seed1-node.bubi.cn/getAccountBase?address=adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd

请求参数说明:

字段名类型描述
addressString必填,账号地址。

成功的返回JSON数据:

{
"error_code" : 0,
"result" : {
"address" : "adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd",
"assets_hash" : "ad67d57ae19de8068dbcd47282146bd553fe9f684c57c8c114453863ee41abc3",
"balance" : 98997285890879998,
"metadatas_hash" : "ad67d57ae19de8068dbcd47282146bd553fe9f684c57c8c114453863ee41abc3",
"nonce" : 35,
"priv" : {
"master_weight" : 1,
"thresholds" : {
"tx_threshold" : 1
}
}
}
}

响应参数说明:

字段名类型描述
addressString查询的账户地址。
assets_hashString资产哈希。
balanceInt账户gas余额。
metadatas_hashStringmetadata哈希。
nonceInt账号当前作为交易源执行过的交易数量。若查询结果没有显示nonce值,说明账号的当前nonce是0。
privJson账户权限。
  • 序列化交易

组装交易结构,并通过API getTransactionBlob将交易结构序列化为。

HTTP请求示例:

curl -d '{
"source_address":"adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd",
"nonce":36,
"fee_limit":10000000000,
"gas_price":1000,
"operations":[
{
"type": 7,
"pay_coin": {
"dest_address": "adxSTAHGv4DJEGmrD7uuZzG3XCQDWSbksJ9hf",
"amount": 0,
"input":"{\"do_foo\":true}"
}
}
]
}' https://seed1-node.bubi.cn/getTransactionBlob

请求参数说明:

字段名类型描述
source_addressString必填,源账户地址,即发起交易转出gas的账户。
nonceInt必填,必须为源账户当前的nonce值加1。账户当前nonce值在3.1中获得,根据实际查询的结果填写。
fee_limitInt必填,愿意支付的最大费用。
gas_priceInt必填,gas价格。
typeInt必填,操作码。
dest_addressString必填,合约账户地址。
amountString选填,转移gas的数量,默认为0。
inputString选填,合约接口的参数。

成功的返回JSON数据:

{
"error_code" : 0,
"error_desc" : "",
"result" : {
"hash" : "0ed4cd265ca5601387f054da3d2621facb314a5149462484d419c3b6c6d76150",
"transaction_blob" : "0a25616478537031583456376858444452424b484c3655323143706250686b693759716a7555641024223c080762380a2561647853544148477634444a45476d72443775755a7a4733584351445753626b734a3968661a0f7b22646f5f666f6f223a747275657d3080c8afa02538e807"
}
}

响应参数说明:

字段名类型描述
hashString序列化结果的哈希值。
transaction_blobString交易序列化之后的16进制表示。
  • 签名交易

通过API getSignaturetransaction_blob进行签名。

注意:这种签名方式不安全,会暴露账号私钥,仅在测试时使用。推荐使用离线交易签名工具,在计算机本地进行签名。

HTTP请求示例:

curl -d '{
"private_key":"privbtBp152KnunKvCBgFQX96zuASSH6FBY9KVTX1bifPCLUWarq9EaN",
"transaction_blob": "0a25616478537031583456376858444452424b484c3655323143706250686b693759716a7555641024223c080762380a2561647853544148477634444a45476d72443775755a7a4733584351445753626b734a3968661a0f7b22646f5f666f6f223a747275657d3080c8afa02538e807"
}' https://seed1-node.bubi.cn/getSignature

请求参数说明:

字段名类型描述
private_keyString必填,源账户的私钥。
transaction_blobString必填,交易序列化的16进制表示,4.1.2节序列化的结果。

成功的返回JSON数据:

{
"error_code" : 0,
"result" : {
"data" : "0a25616478537031583456376858444452424b484c3655323143706250686b693759716a7555641024223c080762380a2561647853544148477634444a45476d72443775755a7a4733584351445753626b734a3968661a0f7b22646f5f666f6f223a747275657d3080c8afa02538e807",
"public_key" : "b001ac76f97b0fda145c68e2edf6665c247a292260694b5dfcacac8acb658bd3746e7d8a3032",
"sign_data" : "d42680b701e02fcaacb17fc10f340381db6d9455f3817f0a667cf572a6a6009fdc11d367635f66f0e21555bab78e42c56550731a2239b25023573e3e6a3a1b08"
}
}

响应参数说明:

字段名类型描述
hashString交易哈希,可通过哈希值查询交易的内容。
  • 提交交易

通过API submitTransaction将交易提交到链上。

HTTP请求示例:

curl -d '{
"items" : [
{
"transaction_blob" : "0a25616478537031583456376858444452424b484c3655323143706250686b693759716a7555641024223c080762380a2561647853544148477634444a45476d72443775755a7a4733584351445753626b734a3968661a0f7b22646f5f666f6f223a747275657d3080c8afa02538e807",
"signatures" : [
{
"sign_data" : "d42680b701e02fcaacb17fc10f340381db6d9455f3817f0a667cf572a6a6009fdc11d367635f66f0e21555bab78e42c56550731a2239b25023573e3e6a3a1b08",
"public_key" : "b001ac76f97b0fda145c68e2edf6665c247a292260694b5dfcacac8acb658bd3746e7d8a3032"
}
]
}
]
}' https://seed1-node.bubi.cn/submitTransaction

请求参数说明:

字段名类型描述
transaction_blobString必填,交易序列化的16进制表示。
sign_dataString必填,交易签名。
public_keyString必填,源账户公钥。

成功的返回JSON数据:

{
"results" : [
{
"error_code" : 0,
"error_desc" : "",
"hash" : "0ed4cd265ca5601387f054da3d2621facb314a5149462484d419c3b6c6d76150"
}
],
"success_count" : 1
}

响应参数说明:

字段名类型描述
hashString交易哈希,可通过哈希值查询交易的内容。
  • 查询交易

通过API getTransactionHistory查询交易哈希为0ed4cd265ca5601387f054da3d2621facb314a5149462484d419c3b6c6d76150的交易内容。

HTTP请求示例:

curl https://seed1-node.bubi.cn/getTransactionHistory?hash=0ed4cd265ca5601387f054da3d2621facb314a5149462484d419c3b6c6d76150

请求参数说明:

字段名类型描述
hashString必填,交易哈希。参数来自4.2.4提交交易的响应结果。

成功的返回JSON数据:

{
"error_code":0,
"result":{
"total_count":1,"transactions":[
{
"actual_fee":261000,
"close_time":1710572321382820,
"error_code":0,
"error_desc":"",
"hash":
"0ed4cd265ca5601387f054da3d2621facb314a5149462484d419c3b6c6d76150",
"ledger_seq":32811,
"signatures":[
{
"public_key": "b001ac76f97b0fda145c68e2edf6665c247a292260694b5dfcacac8acb658bd3746e7d8a3032",
"sign_data": "d42680b701e02fcaacb17fc10f340381db6d9455f3817f0a667cf572a6a6009fdc11d367635f66f0e21555bab78e42c56550731a2239b25023573e3e6a3a1b08"
}
],"transaction":{
"fee_limit":10000000000,
"gas_price":1000,
"nonce":36,
"operations":[
{
"pay_coin":{
"dest_address":
"adxSTAHGv4DJEGmrD7uuZzG3XCQDWSbksJ9hf",
"input":"{\"do_foo\":true}"
},
"type":7
}
],
"source_address":"adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd"
},
"tx_size":261
}
]
}
}

4.3. 调用合约query接口

HTTP请求示例:

curl -d '{
"contract_address":"adxSTAHGv4DJEGmrD7uuZzG3XCQDWSbksJ9hf",
"code":"",
"input":"{\"key\":\"value\"}",
"contract_balance" : "100009000000",
"fee_limit" : 100000000000000000,
"gas_price": 1000,
"opt_type" : 2,
"source_address":""
}' https://seed1-node.bubi.cn/callContract

成功的返回JSON数据:

{
"error_code" : 0,
"error_desc" : "",
"result" : {
"logs" : {
"0-adxSTAHGv4DJEGmrD7uuZzG3XCQDWSbksJ9hf" : null
},
"query_rets" : [
{
"result" : {
"type" : "string",
"value" : "{\"key\":\"value\"}"
}
}
],
"stat" : {
"apply_time" : 3218,
"memory_usage" : 1828528,
"stack_usage" : 0,
"step" : 5
},
"txs" : null
}
}

5. 快速体验-联名账户

5.1. 创建联名账户

准备一个激活的账户,激活账户密钥如下:

{
"address" : "adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd",
"private_key" : "privbtBp152KnunKvCBgFQX96zuASSH6FBY9KVTX1bifPCLUWarq9EaN",
"public_key" : "b001ac76f97b0fda145c68e2edf6665c247a292260694b5dfcacac8acb658bd3746e7d8a3032"
}

准备一对账户密钥无需激活,用来联名上述激活账户,密钥如下:

{
"address" : "adxSBY9TzPGyuL5xujLPKi9qAFEm3jkBEdr8t",
"private_key" : "privbvGb7pFdHP24zQQxDaPd4wyQycQtqVrMyfUardVKF5Riky9eskYW",
"public_key" : "b00111d1b39ba7062b2ce58e22106654fe5b3b02ae4e0db257ea2890979c93582462cbc97152",
}
  • 查询账户nonce

通过API getAccountBase查询激活账号adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd的nonce值。

HTTP请求示例:

curl https://seed1-node.bubi.cn/getAccountBase?address=adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd

请求参数说明:

字段名类型描述
addressString必填,账号地址。

成功的返回JSON数据:

{
"error_code" : 0,
"result" : {
"address" : "adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd",
"assets_hash" : "ad67d57ae19de8068dbcd47282146bd553fe9f684c57c8c114453863ee41abc3",
"balance" : 99999966379446914,
"metadatas_hash" : "ad67d57ae19de8068dbcd47282146bd553fe9f684c57c8c114453863ee41abc3",
"nonce" : 135088,
"priv" : {
"master_weight" : 1,
"thresholds" : {
"tx_threshold" : 1
}
}
}
}

响应参数说明:

字段名类型描述
error_codeInt0表示查询成功,4表示账户未激活。
addressString查询的账户地址。
assets_hashString资产哈希。
balanceInt账户gas余额。
metadatas_hashStringmetadata哈希。
nonceInt账号当前作为交易源执行过的交易数量。若查询结果没有显示nonce值,说明账号的当前nonce是0。
privJson账户权限。
  • 序列化交易

组转交易结构,并通过API getTransactionBlob将交易结构序列化为。

HTTP请求示例:

curl -d '{
"source_address":"adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd",
"nonce":135089,
"fee_limit":10000000000,
"gas_price":1000,
"operations":[
{
"set_privilege":{
"master_weight": "1",
"signers":[
{
"address":"adxSBY9TzPGyuL5xujLPKi9qAFEm3jkBEdr8t",
"weight": 1
}
],
"tx_threshold": "2"
},
"type": 9
}
]
}' https://seed1-node.bubi.cn/getTransactionBlob

请求参数说明:

字段名类型描述
source_addressString必填,源账户地址,即发起交易转出gas的账户。
nonceInt必填,必须为源账户当前的nonce值加1。账户当前nonce值在3.1中获得,根据实际查询的结果填写。
fee_limitInt必填,愿意支付的最大费用。
gas_priceInt必填,gas价格。
typeInt必填,操作码。
dest_addressString必填,目标账户地址,即接收gas的账户。
master_weightInt必填,该账户自身的权限值。
signers.addressString选填,其他权限账户地址。
signers.weightString选填,signers.address 账户对源账户的权限值。
tx_thresholdInt选填,发送交易(所有交易类型)所需要的权限值,默认为0。交易签名的权限之和不能小于这个值。

成功的返回JSON数据:

{
"error_code" : 0,
"error_desc" : "",
"result" : {
"hash" : "e55346c38873cfb3959c10224ca89aea0288ffc2f036d8d81304007d3d5a57e1",
"transaction_blob" : "0a25616478537031583456376858444452424b484c3655323143706250686b693759716a75556410b19f08223b080972370a013112290a25616478536b724576506d316473733448564e7536774b3373355543534a69386d747474633710011a01322204080110013080c8afa02538e807"
}
}

响应参数:

字段名类型描述
error_codeInt0表示成功序列化,2表示交易结构参数错误。
hashString序列化结果的哈希值。
transaction_blobString交易序列化之后的16进制表示。
  • 签名交易

通过API getSignaturetransaction_blob进行签名。

注意:这种签名方式不安全,会暴露账号私钥,仅在测试时使用。推荐使用离线交易签名工具,在计算机本地进行签名。

HTTP请求示例:

curl -d '{
"private_key":"privbtBp152KnunKvCBgFQX96zuASSH6FBY9KVTX1bifPCLUWarq9EaN",
"transaction_blob": "0a25616478537031583456376858444452424b484c3655323143706250686b693759716a75556410b19f08223b080972370a013112290a25616478536b724576506d316473733448564e7536774b3373355543534a69386d747474633710011a01322204080110013080c8afa02538e807"
}' https://seed1-node.bubi.cn/getSignature

请求参数说明:

字段名类型描述
private_keyString必填,源账户的私钥。
transaction_blobString必填,交易序列化的16进制表示,3.2节序列化的结果。

成功的返回JSON数据:

{
"error_code" : 0,
"result" : {
"data" : "0a25616478537031583456376858444452424b484c3655323143706250686b693759716a75556410b19f08223b080972370a013112290a25616478536b724576506d316473733448564e7536774b3373355543534a69386d747474633710011a01322204080110013080c8afa02538e807",
"public_key" : "b001ac76f97b0fda145c68e2edf6665c247a292260694b5dfcacac8acb658bd3746e7d8a3032",
"sign_data" : "11461fe9903d25017507828e296e9d593e91e8b8f994604c909340123337b89e6788545d78025c818cb016352b75290fd6acfdad94bb46e6289e1de182676a07"
}
}
字段名类型描述
dataString交易序列化的16进制表示,即transaction_blob。
public_keyString源账户的公钥。
sign_dataString签名数据。
  • 提交交易

通过API submitTransaction将交易提交到链上。

HTTP请求示例:

curl -d '{
"items" : [
{
"transaction_blob" : "0a25616478537031583456376858444452424b484c3655323143706250686b693759716a75556410b19f08223b080972370a013112290a25616478536b724576506d316473733448564e7536774b3373355543534a69386d747474633710011a01322204080110013080c8afa02538e807",
"signatures" : [
{
"sign_data" : "11461fe9903d25017507828e296e9d593e91e8b8f994604c909340123337b89e6788545d78025c818cb016352b75290fd6acfdad94bb46e6289e1de182676a07",
"public_key" : "b001ac76f97b0fda145c68e2edf6665c247a292260694b5dfcacac8acb658bd3746e7d8a3032"
}
]
}
]
}' https://seed1-node.bubi.cn/submitTransaction

请求参数说明:

字段名类型描述
transaction_blobString必填,交易序列化的16进制表示。
sign_dataString必填,交易签名。
public_keyString必填,源账户公钥。

成功的返回JSON数据:

{
"results" : [
{
"error_code" : 0,
"error_desc" : "",
"hash" : "e55346c38873cfb3959c10224ca89aea0288ffc2f036d8d81304007d3d5a57e1"
}
],
"success_count" : 1
}

响应参数说明:

字段名类型描述
error_codeInt错误码,交易成功时为0。
error_descString错误信息,交易成功时为空。
hashString交易哈希,可通过哈希值查询交易的内容。

5.2. 使用联名账户发送交易

用账户adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd转移gas,由于该账户被设置为联名账户,会因为权限不足而导致交易失败,提交交易返回内容如下:

{
"results" : [
{
"error_code" : 93,
"error_desc" : "Transaction(c5c681118fd47425b547fa0dd9d7ea7493dd220c398252ed222c0fd815c7cff2) signature weight is not enough",
"hash" : "c5c681118fd47425b547fa0dd9d7ea7493dd220c398252ed222c0fd815c7cff2"
}
],
"success_count" : 0
}
  • 查询账户nonce

通过API getAccountBase查询源账号adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd的nonce值。

HTTP请求示例:

curl https://seed1-node.bubi.cn/getAccountBase?address=adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd

请求参数说明:

字段名类型描述
addressString必填,账号地址。

成功的返回JSON数据:

{
"error_code" : 0,
"result" : {
"address" : "adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd",
"assets_hash" : "ad67d57ae19de8068dbcd47282146bd553fe9f684c57c8c114453863ee41abc3",
"balance" : 99999966379184914,
"metadatas_hash" : "ad67d57ae19de8068dbcd47282146bd553fe9f684c57c8c114453863ee41abc3",
"nonce" : 135089,
"priv" : {
"master_weight" : 1,
"signers" : [
{
"address" : "adxSkrEvPm1dss4HVNu6wK3s5UCSJi8mtttc7",
"weight" : 1
}
],
"thresholds" : {
"tx_threshold" : 2,
"type_thresholds" : [
{
"threshold" : 1,
"type" : 1
}
]
}
}
}
}

响应参数说明:

字段名类型描述
error_codeInt0表示查询成功,4表示账户未激活。
addressString查询的账户地址。
assets_hashString资产哈希。
balanceInt账户gas余额。
metadatas_hashStringmetadata哈希。
nonceInt账号当前作为交易源执行过的交易数量。若查询结果没有显示nonce值,说明账号的当前nonce是0。
privJson账户权限。
  • 序列化交易

组转交易结构,并通过API getTransactionBlob将交易结构序列化为。

HTTP请求示例:

curl -d '{
"source_address":"adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd",
"nonce":135090,
"fee_limit":10000000000,
"gas_price":1000,
"operations":[
{
"type":7,
"pay_coin":{
"dest_address":"adxSg5szfwh7bLaF9MF2KiUD2XNGVdB8ybLz9",
"amount":1000
}
}
]
}' https://seed1-node.bubi.cn/getTransactionBlob

请求参数说明:

字段名类型描述
source_addressString必填,源账户地址,即发起交易转出gas的账户。
nonceInt必填,必须为源账户当前的nonce值加1。账户当前nonce值在3.1中获得,根据实际查询的结果填写。
fee_limitInt必填,愿意支付的最大费用。
gas_priceInt必填,gas价格。
typeInt必填,操作码。
dest_addressString必填,目标账户地址,即接收gas的账户。
amountInt必填,转移gas的数量。

成功的返回JSON数据:

{
"error_code" : 0,
"error_desc" : "",
"result" : {
"hash" : "c5c681118fd47425b547fa0dd9d7ea7493dd220c398252ed222c0fd815c7cff2",
"transaction_blob" : "0a25616478537031583456376858444452424b484c3655323143706250686b693759716a75556410b29f08222e0807622a0a25616478536735737a66776837624c6146394d46324b69554432584e475664423879624c7a3910e8073080c8afa02538e807"
}
}

响应参数:

字段名类型描述
error_codeInt0表示成功序列化,2表示交易结构参数错误。
hashString序列化结果的哈希值。
transaction_blobString交易序列化之后的16进制表示。
  • 签名交易

通过API getSignaturetransaction_blob进行签名。

签名的权限之和不能小于交易权限。对于联名账户adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd,主权限为1(自身的权限),账户adxSBY9TzPGyuL5xujLPKi9qAFEm3jkBEdr8t的权限为1,转移gas交易权限为2。

两个账户签名的权限之和为2,不小于转移gas交易的权限2。

注意:这种签名方式不安全,会暴露账号私钥,仅在测试时使用。推荐使用离线交易签名工具,在计算机本地进行签名。

HTTP请求示例1:

curl -d '{
"private_key":"privbtBp152KnunKvCBgFQX96zuASSH6FBY9KVTX1bifPCLUWarq9EaN",
"transaction_blob": "0a25616478537031583456376858444452424b484c3655323143706250686b693759716a75556410b29f08222e0807622a0a25616478536735737a66776837624c6146394d46324b69554432584e475664423879624c7a3910e8073080c8afa02538e807"
}' https://seed1-node.bubi.cn/getSignature

请求参数说明:

字段名类型描述
private_keyString必填,源账户的私钥。
transaction_blobString必填,交易序列化的16进制表示,3.2节序列化的结果。

成功的返回JSON数据1:

{
"error_code" : 0,
"result" : {
"data" : "0a25616478537031583456376858444452424b484c3655323143706250686b693759716a75556410b29f08222e0807622a0a25616478536735737a66776837624c6146394d46324b69554432584e475664423879624c7a3910e8073080c8afa02538e807",
"public_key" : "b001ac76f97b0fda145c68e2edf6665c247a292260694b5dfcacac8acb658bd3746e7d8a3032",
"sign_data" : "b2f4700838196d26fb3347f53156d9880e1c882862bbfe9151c82a4b19574d1f000bd4144ce8f2b8382a0de2523c7a95da206d1b863dc0e608e853a882091104"
}
}
字段名类型描述
dataString交易序列化的16进制表示,即transaction_blob。
public_keyString源账户的公钥。
sign_dataString签名数据。

HTTP请求示例2:

curl -d '{
"private_key":"privbvGb7pFdHP24zQQxDaPd4wyQycQtqVrMyfUardVKF5Riky9eskYW",
"transaction_blob": "0a25616478537031583456376858444452424b484c3655323143706250686b693759716a75556410b29f08222e0807622a0a25616478536735737a66776837624c6146394d46324b69554432584e475664423879624c7a3910e8073080c8afa02538e807"
}' https://seed1-node.bubi.cn/getSignature

请求参数说明:

字段名类型描述
private_keyString必填,源账户的私钥。
transaction_blobString必填,交易序列化的16进制表示,3.2节序列化的结果。

成功的返回JSON数据2:

{
"error_code" : 0,
"result" : {
"data" : "0a25616478537031583456376858444452424b484c3655323143706250686b693759716a75556410b29f08222e0807622a0a25616478536735737a66776837624c6146394d46324b69554432584e475664423879624c7a3910e8073080c8afa02538e807",
"public_key" : "b00111d1b39ba7062b2ce58e22106654fe5b3b02ae4e0db257ea2890979c93582462cbc97152",
"sign_data" : "40095b1301acef27c4e2a8371ff9fb5bf2f71ba8628ee0d1982c7071727664959c00022df31fb01cfa4fc17067cf3a8f45ec6fe244045a3972dcb119093b0605"
}
}
字段名类型描述
dataString交易序列化的16进制表示,即transaction_blob。
public_keyString源账户的公钥。
sign_dataString签名数据。
  • 提交交易

通过API submitTransaction将交易提交到链上。

HTTP请求示例:

curl -d '{
"items" : [
{
"transaction_blob" : "0a25616478537031583456376858444452424b484c3655323143706250686b693759716a75556410b29f08222e0807622a0a25616478536735737a66776837624c6146394d46324b69554432584e475664423879624c7a3910e8073080c8afa02538e807",
"signatures" : [
{
"sign_data" : "b2f4700838196d26fb3347f53156d9880e1c882862bbfe9151c82a4b19574d1f000bd4144ce8f2b8382a0de2523c7a95da206d1b863dc0e608e853a882091104",
"public_key" : "b001ac76f97b0fda145c68e2edf6665c247a292260694b5dfcacac8acb658bd3746e7d8a3032"
},
{
"sign_data" : "40095b1301acef27c4e2a8371ff9fb5bf2f71ba8628ee0d1982c7071727664959c00022df31fb01cfa4fc17067cf3a8f45ec6fe244045a3972dcb119093b0605",
"public_key" : "b00111d1b39ba7062b2ce58e22106654fe5b3b02ae4e0db257ea2890979c93582462cbc97152"
}
]
}
]
}' https://seed1-node.bubi.cn/submitTransaction

请求参数说明:

字段名类型描述
transaction_blobString必填,交易序列化的16进制表示。
sign_dataString必填,交易签名。
public_keyString必填,源账户公钥。

成功的返回JSON数据:

{
"results" : [
{
"error_code" : 0,
"error_desc" : "",
"hash" : "f4914b017e427c9a93bf2d40ae1362277449a9c60be13851aadac4bf84871d56"
}
],
"success_count" : 1
}

响应参数说明:

字段名类型描述
error_codeInt错误码,交易成功时为0。
error_descString错误信息,交易成功时为空。
hashString交易哈希,可通过哈希值查询交易的内容。

6. 基础接口

6.1. Hello

返回节点版本信息,用于测试HTTP接口是否能正常工作。

HTTP请求:

GET https://{url}/hello    

成功的返回json数据:

{
"bubi_version":"4.0.24",
"current_time":"2024-03-08 15:32:06.109623",
"hash_type":0,
"ledger_version":"4003",
"license_version":"1.0.0",
"monitor_version":"4000",
"network_id":8108773,
"overlay_version":"2000",
"websocket_address":7053
}

响应参数说明:

字段名类型描述
bubi_versionStringbubi链版本。
current_timeString执行命令的时间。
hash_typeInt哈希函数类型。0表示sha256,1表示sm3。
ledger_versionString账本版本。
license_versionString证书版本。
monitor_versionStringmonitor模块版本。
network_idIntp2p网络id。
overlay_versionStringoverlay模块版本。
websocket_addressIntwebsocket监听端口

6.2. 查询模块状态

查询区块链数据库、账本管理、共识管理等模块的状态。

HTTP请求:

GET https://{url}/getModulesStatus

成功的返回json数据:

{
"account_db" : {
"disk_usage" : 2321701,
"rocksdb.cur-size-all-mem-tables" : "2523954",
"rocksdb.estimate-table-readers-mem" : "96",
"rocksdb.stats" : "\n** Compaction Stats [default] **\nLevel Files Size(MB) Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) Comp(cnt) Avg(sec) Stall(cnt) KeyIn KeyDrop\n---------------------------------------------------------------------------------------------------------------------------------------------------------------------\n L0 2/0 0 0.5 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.8 0 1 0.002 0 0 0\n L1 1/0 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.000 0 0 0\n Sum 3/0 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.8 0 1 0.002 0 0 0\n Int 0/0 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.000 0 0 0\nFlush(GB): cumulative 0.000, interval 0.000\nStalls(count): 0 level0_slowdown, 0 level0_numfiles, 0 memtable_compaction, 0 leveln_slowdown_soft, 0 leveln_slowdown_hard\n\n** DB Stats **\nUptime(secs): 102544.1 total, 872.5 interval\nCumulative writes: 1710 writes, 17K keys, 1710 batches, 1.0 writes per batch, ingest: 0.00 GB, 0.00 MB/s\nCumulative WAL: 1710 writes, 1710 syncs, 1.00 writes per sync, written: 0.00 GB, 0.00 MB/s\nCumulative stall: 00:00:0.000 H:M:S, 0.0 percent\nInterval writes: 15 writes, 150 keys, 15 batches, 0.9 writes per batch, ingest: 0.02 MB, 0.00 MB/s\nInterval WAL: 15 writes, 15 syncs, 0.94 writes per sync, written: 0.00 MB, 0.00 MB/s\nInterval stall: 00:00:0.000 H:M:S, 0.0 percent\n"
},
"consensus manager" : {
"consensus" : {
"abnormal_records" : null,
"ckp_interval" : 10,
"fault_number" : 0,
"instances" : [
{
"commits" : [
"type:Commit | vn:19631 seq:19633 replica:0 | value:51e15ce0ccd00500f86c27f8acd01c2edd86641b0a03a761b43f6fd774f8f4a7"
],
"cons_value" : "value hash(51e15ce0ccd00500f86c27f8acd01c2edd86641b0a03a761b43f6fd774f8f4a7) | close time(1709704776504508) | lcl hash(2a502e21) | ledger seq(19633) ",
"end_time" : "2024-03-06 13:59:36.517421",
"have_send_viewchange" : false,
"last_propose_time" : "2024-03-06 13:59:36.514910",
"phase" : "PHASE_COMMITED",
"phase_item" : 0,
"pre_prepare" : "type:Pre-Prepare | vn:19631 seq:19633 replica:0 | value: 51e15ce0ccd00500f86c27f8acd01c2edd86641b0a03a761b43f6fd774f8f4a7 ",
"pre_prepare_round" : 1,
"prepares" : [
"type:Prepare | vn:19631 seq:19633 replica:0 | value:51e15ce0ccd00500f86c27f8acd01c2edd86641b0a03a761b43f6fd774f8f4a7"
],
"seq" : 19633,
"start_time" : "2024-03-06 13:59:36.514910",
"vn" : 19631
},
{
"commits" : [
"type:Commit | vn:19632 seq:19634 replica:0 | value:27d09c549a09c1d4b68cfa348d0cb1111f367f10ef8fbfef0d00a80c9b200974"
],
"cons_value" : "value hash(27d09c549a09c1d4b68cfa348d0cb1111f367f10ef8fbfef0d00a80c9b200974) | close time(1709704836497384) | lcl hash(f142ac8d) | ledger seq(19634) ",
"end_time" : "2024-03-06 14:00:36.509719",
"have_send_viewchange" : false,
"last_propose_time" : "2024-03-06 14:00:36.507710",
"phase" : "PHASE_COMMITED",
"phase_item" : 0,
"pre_prepare" : "type:Pre-Prepare | vn:19632 seq:19634 replica:0 | value: 27d09c549a09c1d4b68cfa348d0cb1111f367f10ef8fbfef0d00a80c9b200974 ",
"pre_prepare_round" : 1,
"prepares" : [
"type:Prepare | vn:19632 seq:19634 replica:0 | value:27d09c549a09c1d4b68cfa348d0cb1111f367f10ef8fbfef0d00a80c9b200974"
],
"seq" : 19634,
"start_time" : "2024-03-06 14:00:36.507710",
"vn" : 19632
},
{
"commits" : [
"type:Commit | vn:19633 seq:19635 replica:0 | value:c1437e8dbc2754f65c8a9920b111b487dcc4fedc84ced34fbf3369e8fec5859f"
],
"cons_value" : "value hash(c1437e8dbc2754f65c8a9920b111b487dcc4fedc84ced34fbf3369e8fec5859f) | close time(1709704896491386) | lcl hash(e08f844d) | ledger seq(19635) ",
"end_time" : "2024-03-06 14:01:36.503374",
"have_send_viewchange" : false,
"last_propose_time" : "2024-03-06 14:01:36.501712",
"phase" : "PHASE_COMMITED",
"phase_item" : 0,
"pre_prepare" : "type:Pre-Prepare | vn:19633 seq:19635 replica:0 | value: c1437e8dbc2754f65c8a9920b111b487dcc4fedc84ced34fbf3369e8fec5859f ",
"pre_prepare_round" : 1,
"prepares" : [
"type:Prepare | vn:19633 seq:19635 replica:0 | value:c1437e8dbc2754f65c8a9920b111b487dcc4fedc84ced34fbf3369e8fec5859f"
],
"seq" : 19635,
"start_time" : "2024-03-06 14:01:36.501712",
"vn" : 19633
},
{
"commits" : [
"type:Commit | vn:19634 seq:19636 replica:0 | value:e21f4983348328abc414924fc3cfef12abbbbb444aeb7491639bc105628d5858"
],
"cons_value" : "value hash(e21f4983348328abc414924fc3cfef12abbbbb444aeb7491639bc105628d5858) | close time(1709704956483537) | lcl hash(376d8236) | ledger seq(19636) ",
"end_time" : "2024-03-06 14:02:36.495853",
"have_send_viewchange" : false,
"last_propose_time" : "2024-03-06 14:02:36.493884",
"phase" : "PHASE_COMMITED",
"phase_item" : 0,
"pre_prepare" : "type:Pre-Prepare | vn:19634 seq:19636 replica:0 | value: e21f4983348328abc414924fc3cfef12abbbbb444aeb7491639bc105628d5858 ",
"pre_prepare_round" : 1,
"prepares" : [
"type:Prepare | vn:19634 seq:19636 replica:0 | value:e21f4983348328abc414924fc3cfef12abbbbb444aeb7491639bc105628d5858"
],
"seq" : 19636,
"start_time" : "2024-03-06 14:02:36.493884",
"vn" : 19634
},
{
"commits" : [
"type:Commit | vn:19635 seq:19637 replica:0 | value:a2fa1263b4cba9de6ddf390d9b13f6beb606b79bada7ba774374466966d850d0"
],
"cons_value" : "value hash(a2fa1263b4cba9de6ddf390d9b13f6beb606b79bada7ba774374466966d850d0) | close time(1709705016475043) | lcl hash(5d3e5a05) | ledger seq(19637) ",
"end_time" : "2024-03-06 14:03:36.486893",
"have_send_viewchange" : false,
"last_propose_time" : "2024-03-06 14:03:36.485323",
"phase" : "PHASE_COMMITED",
"phase_item" : 0,
"pre_prepare" : "type:Pre-Prepare | vn:19635 seq:19637 replica:0 | value: a2fa1263b4cba9de6ddf390d9b13f6beb606b79bada7ba774374466966d850d0 ",
"pre_prepare_round" : 1,
"prepares" : [
"type:Prepare | vn:19635 seq:19637 replica:0 | value:a2fa1263b4cba9de6ddf390d9b13f6beb606b79bada7ba774374466966d850d0"
],
"seq" : 19637,
"start_time" : "2024-03-06 14:03:36.485323",
"vn" : 19635
}
],
"is_leader" : true,
"last_exe_seq" : 19637,
"leader" : "adxSBC9QWrTfZjxjnPjKEF5LHGHYCpZ9BDdDF",
"quorum_size" : 0,
"replica_id" : 0,
"type" : "pbft",
"validator_address" : "adxSBC9QWrTfZjxjnPjKEF5LHGHYCpZ9BDdDF",
"validator_address_random" : false,
"validators" : [ "adxSBC9QWrTfZjxjnPjKEF5LHGHYCpZ9BDdDF" ],
"view_active" : true,
"view_number" : 19636,
"viewchanges" : null
},
"time" : "0 ms"
},
"glue_manager" : {
"del_tx_count" : 44264,
"ledger_upgrade" : {
"current_states" : null,
"local_state" : null
},
"new_tx_count" : 44264,
"system" : {
"current_time" : "2024-03-06 14:04:02",
"process_uptime" : "2024-03-05 09:35:00",
"uptime" : "2024-03-04 10:31:32"
},
"time" : "0 ms",
"transaction_pool" : {
"account_nonce_size" : 0,
"queue_by_address_and_nonce_size" : 0,
"queue_size" : 0,
"time_queue_size" : 0
}
},
"keyvalue_db" : {
"disk_usage" : 334625,
"rocksdb.cur-size-all-mem-tables" : "195912",
"rocksdb.estimate-table-readers-mem" : "92",
"rocksdb.stats" : "\n** Compaction Stats [default] **\nLevel Files Size(MB) Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) Comp(cnt) Avg(sec) Stall(cnt) KeyIn KeyDrop\n---------------------------------------------------------------------------------------------------------------------------------------------------------------------\n L0 3/0 0 0.8 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.2 0 1 0.005 0 0 0\n L1 1/0 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.000 0 0 0\n Sum 4/0 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.2 0 1 0.005 0 0 0\n Int 0/0 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.000 0 0 0\nFlush(GB): cumulative 0.000, interval 0.000\nStalls(count): 0 level0_slowdown, 0 level0_numfiles, 0 memtable_compaction, 0 leveln_slowdown_soft, 0 leveln_slowdown_hard\n\n** DB Stats **\nUptime(secs): 102544.2 total, 872.5 interval\nCumulative writes: 1712 writes, 3425 keys, 1712 batches, 1.0 writes per batch, ingest: 0.00 GB, 0.00 MB/s\nCumulative WAL: 1712 writes, 1712 syncs, 1.00 writes per sync, written: 0.00 GB, 0.00 MB/s\nCumulative stall: 00:00:0.000 H:M:S, 0.0 percent\nInterval writes: 15 writes, 30 keys, 15 batches, 0.9 writes per batch, ingest: 0.00 MB, 0.00 MB/s\nInterval WAL: 15 writes, 15 syncs, 0.94 writes per sync, written: 0.00 MB, 0.00 MB/s\nInterval stall: 00:00:0.000 H:M:S, 0.0 percent\n"
},
"ledger_db" : {
"disk_usage" : 10859087,
"rocksdb.cur-size-all-mem-tables" : "1080229",
"rocksdb.estimate-table-readers-mem" : "37874",
"rocksdb.stats" : "\n** Compaction Stats [default] **\nLevel Files Size(MB) Score Read(GB) Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) Comp(cnt) Avg(sec) Stall(cnt) KeyIn KeyDrop\n---------------------------------------------------------------------------------------------------------------------------------------------------------------------\n L0 1/0 1 0.2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 134.5 0 1 0.004 0 0 0\n L1 5/0 9 0.9 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.000 0 0 0\n Sum 6/0 9 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 134.5 0 1 0.004 0 0 0\n Int 0/0 0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0 0.000 0 0 0\nFlush(GB): cumulative 0.001, interval 0.000\nStalls(count): 0 level0_slowdown, 0 level0_numfiles, 0 memtable_compaction, 0 leveln_slowdown_soft, 0 leveln_slowdown_hard\n\n** DB Stats **\nUptime(secs): 102544.2 total, 872.5 interval\nCumulative writes: 1710 writes, 6842 keys, 1710 batches, 1.0 writes per batch, ingest: 0.00 GB, 0.00 MB/s\nCumulative WAL: 1710 writes, 1710 syncs, 1.00 writes per sync, written: 0.00 GB, 0.00 MB/s\nCumulative stall: 00:00:0.000 H:M:S, 0.0 percent\nInterval writes: 15 writes, 60 keys, 15 batches, 0.9 writes per batch, ingest: 0.01 MB, 0.00 MB/s\nInterval WAL: 15 writes, 15 syncs, 0.94 writes per sync, written: 0.00 MB, 0.00 MB/s\nInterval stall: 00:00:0.000 H:M:S, 0.0 percent\n"
},
"ledger_manager" : {
"account_count" : 10,
"chain_max_ledger_seq" : 19637,
"hash_type" : "sha256",
"lcl_header_space_used" : 368,
"ledger_context" : {
"completed_size" : 0,
"running_size" : 0
},
"ledger_sequence" : 19637,
"sync" : {
"peers" : null,
"update_time" : 1709705016486914
},
"time" : "0 ms",
"tx_count" : 46,
"validation_address" : "adxSBC9QWrTfZjxjnPjKEF5LHGHYCpZ9BDdDF"
},
"peer_manager" : {
"consensus_network" : {
"broad_bigdata_queue_size" : 0,
"broad_record_couple_size" : 60,
"broad_record_size" : 60,
"broad_sendbuffer_size" : 0,
"node_rand" : "node-rand-1709602500375617-2034038740",
"peer_active_size" : 0,
"peer_cache_size" : 0,
"peer_cache_space_used" : 56,
"peer_list_size" : 0,
"peer_listdel_size" : 0,
"peers" : null,
"recv_peerlist_size" : 0,
"tx_task_size" : 0
},
"peer_node_address" : "adxSggi9WECzaaJNGtN1m6BAVP3P64DdCLCjs",
"time" : "0 ms"
},
"web server" : {
"context" : false,
"end_request_count" : 11224,
"expire_request_count" : 0,
"start_request_count" : 11224,
"thread_count" : 8,
"time" : "0 ms"
},
"websocket_server" : {
"clients" : null,
"listen_port" : 0,
"time" : "0 ms"
}
}

6.3. 查询共识模块

返回共识模块的状态。

HTTP请求:

GET http://{url}/getConsensusInfo

成功的返回JSON数据:

{
"abnormal_records" : null,
"ckp_interval" : 10,
"fault_number" : 0,
"instances" : [
{
"commits" : [
"type:Commit | vn:19637 seq:19639 replica:0 | value:874e1614f1356dcaaefe9fde0ee158e74deee8dfdd81809e560f6ff6fe8db446"
],
"cons_value" : "value hash(874e1614f1356dcaaefe9fde0ee158e74deee8dfdd81809e560f6ff6fe8db446) | close time(1709705136466944) | lcl hash(a5f274b0) | ledger seq(19639) ",
"end_time" : "2024-03-06 14:05:36.479348",
"have_send_viewchange" : false,
"last_propose_time" : "2024-03-06 14:05:36.477464",
"phase" : "PHASE_COMMITED",
"phase_item" : 0,
"pre_prepare" : "type:Pre-Prepare | vn:19637 seq:19639 replica:0 | value: 874e1614f1356dcaaefe9fde0ee158e74deee8dfdd81809e560f6ff6fe8db446 ",
"pre_prepare_round" : 1,
"prepares" : [
"type:Prepare | vn:19637 seq:19639 replica:0 | value:874e1614f1356dcaaefe9fde0ee158e74deee8dfdd81809e560f6ff6fe8db446"
],
"seq" : 19639,
"start_time" : "2024-03-06 14:05:36.477464",
"vn" : 19637
},
{
"commits" : [
"type:Commit | vn:19638 seq:19640 replica:0 | value:e1112d1a68ea7fb77764129dc31d87d2d2b875a5b899dce4469d08014eef40bb"
],
"cons_value" : "value hash(e1112d1a68ea7fb77764129dc31d87d2d2b875a5b899dce4469d08014eef40bb) | close time(1709705196467776) | lcl hash(4d0e8c95) | ledger seq(19640) ",
"end_time" : "2024-03-06 14:06:36.480028",
"have_send_viewchange" : false,
"last_propose_time" : "2024-03-06 14:06:36.478090",
"phase" : "PHASE_COMMITED",
"phase_item" : 0,
"pre_prepare" : "type:Pre-Prepare | vn:19638 seq:19640 replica:0 | value: e1112d1a68ea7fb77764129dc31d87d2d2b875a5b899dce4469d08014eef40bb ",
"pre_prepare_round" : 1,
"prepares" : [
"type:Prepare | vn:19638 seq:19640 replica:0 | value:e1112d1a68ea7fb77764129dc31d87d2d2b875a5b899dce4469d08014eef40bb"
],
"seq" : 19640,
"start_time" : "2024-03-06 14:06:36.478090",
"vn" : 19638
},
{
"commits" : [
"type:Commit | vn:19639 seq:19641 replica:0 | value:b843efcbf17eaf3262152298417433b2d89c5b819467c17c54786ec4d37f6ba3"
],
"cons_value" : "value hash(b843efcbf17eaf3262152298417433b2d89c5b819467c17c54786ec4d37f6ba3) | close time(1709705256466312) | lcl hash(2c1a34c1) | ledger seq(19641) ",
"end_time" : "2024-03-06 14:07:36.478147",
"have_send_viewchange" : false,
"last_propose_time" : "2024-03-06 14:07:36.476525",
"phase" : "PHASE_COMMITED",
"phase_item" : 0,
"pre_prepare" : "type:Pre-Prepare | vn:19639 seq:19641 replica:0 | value: b843efcbf17eaf3262152298417433b2d89c5b819467c17c54786ec4d37f6ba3 ",
"pre_prepare_round" : 1,
"prepares" : [
"type:Prepare | vn:19639 seq:19641 replica:0 | value:b843efcbf17eaf3262152298417433b2d89c5b819467c17c54786ec4d37f6ba3"
],
"seq" : 19641,
"start_time" : "2024-03-06 14:07:36.476525",
"vn" : 19639
},
{
"commits" : [
"type:Commit | vn:19640 seq:19642 replica:0 | value:18ca43b3f09c4261dec9e81b7163fd86f9b0b3424dd11d6822fa0acace5e3557"
],
"cons_value" : "value hash(18ca43b3f09c4261dec9e81b7163fd86f9b0b3424dd11d6822fa0acace5e3557) | close time(1709705316459598) | lcl hash(7c96b682) | ledger seq(19642) ",
"end_time" : "2024-03-06 14:08:36.471488",
"have_send_viewchange" : false,
"last_propose_time" : "2024-03-06 14:08:36.469922",
"phase" : "PHASE_COMMITED",
"phase_item" : 0,
"pre_prepare" : "type:Pre-Prepare | vn:19640 seq:19642 replica:0 | value: 18ca43b3f09c4261dec9e81b7163fd86f9b0b3424dd11d6822fa0acace5e3557 ",
"pre_prepare_round" : 1,
"prepares" : [
"type:Prepare | vn:19640 seq:19642 replica:0 | value:18ca43b3f09c4261dec9e81b7163fd86f9b0b3424dd11d6822fa0acace5e3557"
],
"seq" : 19642,
"start_time" : "2024-03-06 14:08:36.469922",
"vn" : 19640
},
{
"commits" : [
"type:Commit | vn:19641 seq:19643 replica:0 | value:acfe33a1e5e8156d1938a23abeb136c6a568956e3368121e8fa074440d7e82ac"
],
"cons_value" : "value hash(acfe33a1e5e8156d1938a23abeb136c6a568956e3368121e8fa074440d7e82ac) | close time(1709705376454587) | lcl hash(a4852e5b) | ledger seq(19643) ",
"end_time" : "2024-03-06 14:09:36.466934",
"have_send_viewchange" : false,
"last_propose_time" : "2024-03-06 14:09:36.464900",
"phase" : "PHASE_COMMITED",
"phase_item" : 0,
"pre_prepare" : "type:Pre-Prepare | vn:19641 seq:19643 replica:0 | value: acfe33a1e5e8156d1938a23abeb136c6a568956e3368121e8fa074440d7e82ac ",
"pre_prepare_round" : 1,
"prepares" : [
"type:Prepare | vn:19641 seq:19643 replica:0 | value:acfe33a1e5e8156d1938a23abeb136c6a568956e3368121e8fa074440d7e82ac"
],
"seq" : 19643,
"start_time" : "2024-03-06 14:09:36.464900",
"vn" : 19641
}
],
"is_leader" : true,
"last_exe_seq" : 19643,
"leader" : "adxSBC9QWrTfZjxjnPjKEF5LHGHYCpZ9BDdDF",
"quorum_size" : 0,
"replica_id" : 0,
"type" : "pbft",
"validator_address" : "adxSBC9QWrTfZjxjnPjKEF5LHGHYCpZ9BDdDF",
"validator_address_random" : false,
"validators" : [ "adxSBC9QWrTfZjxjnPjKEF5LHGHYCpZ9BDdDF" ],
"view_active" : true,
"view_number" : 19642,
"viewchanges" : null
}

6.4. 查询状态

返回链上的账户数量和交易数量。

HTTP请求:

GET http://{url}/getStatus

成功的返回JSON数据:

{
"error_code" : 0,
"result" : {
"account_count" : 10,
"transaction_count" : 46
}
}

响应参数说明:

字段名类型描述
account_countInt激活账户总数。
transaction_countInt交易总数。

6.5. 查询节点账号

返回节点账号的地址。

HTTP请求:

GET http://{url}/getPeerNodeAddress

请求示例:

http://{url}/getPeerNodeAddress?token=bubi

请求参数说明:

字段名类型描述
tokenString必填,查询节点账户地址的密钥。

成功的返回节点账号地址:

adxSggi9WECzaaJNGtN1m6BAVP3P64DdCLCjs

6.6. 查询验证地址

返回指定区块的验证节点地址。

HTTP请求:

GET http://{url}/getLedgerValidators

请求示例:

http://{url}/getLedgerValidators?seq=10

请求参数说明:

字段名类型描述
seqInt选填,查询指定高度的区块的验证账户地址,字段为空时查询最新区块。

成功的返回JSON数据:

{
"error_code" : 0,
"result" : {
"validators" : [
{
"address" : "adxSBC9QWrTfZjxjnPjKEF5LHGHYCpZ9BDdDF"
}
]
}
}

响应参数说明:

字段名类型描述
validators[].addressString区块的验证账号地址。

6.7. 查询节点列表

查询区块链节点地址列表。

HTTP请求:

GET http://{URL}/getPeerAddresses

成功的返回JSON数据:

{
"error_code":0,
"result":{
"peers":[
{
"ip":"127.0.0.1",
"next_attempt_time":1709775922935448,
"num_failures":1,
"port":19334
},{
"ip":"127.0.0.1",
"next_attempt_time":1709775922937761,
"num_failures":1,
"port":19335
}
]
}
}

7. 账号密钥接口

7.1. 创建账号

创建公私钥对、账号地址、编码公私钥等。仅生成密钥,如果想要在区块链上创建账户,请参考激活账户。

HTTP请求:

GET http://{url}/createAccount

请求示例:

http://{url}/createAccount?sign_type=sm2

请求参数说明:

字段名类型描述
sign_typeString选填,签名类型。支持ed25519和sm2。参数为空时根据 6.1hello 接口返回的hash_type字段,哈希算法sha256对应签名类型ed25519,哈希算法sm3对应签名类型sm2。

成功的返回JSON数据:

{
"error_code" : 0,
"result" : {
"address" : "adxT6C64ZAVGbyJX97pWioBMbmcMkcZ2KFwYo",
"address_raw" : "96883e17dd7f815571ab9729df5b8c7aa67639e5",
"private_key" : "privC4zY353xppJdRuRSMGeBRBRazv3g8Ppr7o9uu6r6sg2mv5EPorZ2",
"private_key_aes" : "525dc97c24a83ca13ab08245bfed441d3fbbe5afa55bf24c062b5cb5fd2d28770ff215ce0e8b67afe35fa775dc2a9f473d33d2a60f8ab9914f12e46259193363",
"private_key_raw" : "6fbaab05e710a82afe093027104fb379bcf9c50fc83f1dcda1f27102b96f0f88",
"public_key" : "b002049eb11528c11e4cec4d416af18124ef71f421ae437e5f68f57ca47ac7483cdc5b8d0b98a7155051aa7ee1dc6804aebdce0ae9f676bd2ac8072cbe986a5f6f87f98c6ad22e",
"public_key_raw" : "049eb11528c11e4cec4d416af18124ef71f421ae437e5f68f57ca47ac7483cdc5b8d0b98a7155051aa7ee1dc6804aebdce0ae9f676bd2ac8072cbe986a5f6f87f9",
"sign_type" : "sm2"
}
}

响应参数说明:

字段名类型描述
addressString账号地址。
address_rawString账号原始地址。
private_keyString账号私钥。
private_key_aesStringAES加密账号私钥之后的数据。
private_key_rawString账号原始私钥。
public_keyString账号公钥。
public_key_rawString账号原始公钥。
sign_typeString签名类型。

7.2. 解析账号

通过公私钥解析出账号地址等数据。

HTTP请求:

GET http://{url}/getAddress

请求示例:

http://{url}/getAddress?private_key=privbzvuySqtCbtyKUxuifKgrmkjC8cyWZDHYPSiWWzMPG88eEBFsQ8t

请求参数说明:

字段名类型描述
private_keyString选填,账号私钥。
public_keyString选填,账号公钥,当private_key为空时,通过该参数解析账号地址。

成功的返回JSON数据:

{
"error_code" : 0,
"result" : {
"address" : "adxSg5szfwh7bLaF9MF2KiUD2XNGVdB8ybLz9",
"private_key" : "privbzvuySqtCbtyKUxuifKgrmkjC8cyWZDHYPSiWWzMPG88eEBFsQ8t",
"private_key_raw" : "f64b6f9156c0294bf305ce06e7f817e50351d36b70f61fc961f84043094610b2",
"public_key" : "b0015b657a5fab5f9bc9051d5560470ad57d1187d75207561c33404bdfda0a2fcb863a60eef5",
"public_key_raw" : "5b657a5fab5f9bc9051d5560470ad57d1187d75207561c33404bdfda0a2fcb86",
"sign_type" : "ed25519"
}
}

响应参数说明:

字段名类型描述
addressString账号地址。
private_keyString账号私钥。
private_key_rawString账号原始私钥。
public_keyString账号公钥。
public_key_rawString账号原始公钥。
sign_typeString签名类型。

7.3. 创建账号v2

创建公私钥对、账号地址(新的编码格式)、以太坊地址、编码公私钥等。仅生成密钥,如果想要在区块链上创建账户,请参考激活账户。

HTTP请求:

GET http://{url}/createAccountV2

请求示例:

http://{url}/createAccountV2?sign_type=ed25519

请求参数说明:

字段名类型描述
sign_typeString选填,签名类型。支持ed25519和sm2。参数为空时根据 6.1hello 接口返回的hash_type字段,哈希算法sha256对应签名类型ed25519,哈希算法sm3对应签名类型sm2。

成功的返回JSON数据:

{
"error_code" : 0,
"result" : {
"address" : "adxSTAWxZRTfpXzooSuNL9dwTeekST9SaKBuR",
"address_eth" : "0x015f8a0eb8c8a4fad1e3b4cff5d22b2110f26212",
"address_raw" : "4d5f8a0eb8c8a4fad1e3b4cff5d22b2110f26212",
"private_key" : "privbzMv7D5DCmsRkjSn1r6dGaLgP99L3iDQtU7egFJjJxRB32h3aBTE",
"private_key_aes" : "a88997e91bad376672091437d133db293ccf23db72d7b9296368bfcdfcb0a935c2516d14e285d9d715b44e842634fc7f967c9189bc9ef167449ba335c14636a8",
"public_key" : "b00100c2b76b29ad258051dc7be74e77b87994562ace6736eb2ef892cd01519973c585bda035",
"public_key_raw" : "00c2b76b29ad258051dc7be74e77b87994562ace6736eb2ef892cd01519973c5",
"sign_type" : "ed25519"
}
}

响应参数说明:

字段名类型描述
addressString新版账号地址。
address_ethString以太坊地址。
address_rawString账号原始地址。
private_keyString账号私钥。
private_key_aesStringAES加密账号私钥之后的数据。
private_key_rawString账号原始私钥。
public_keyString账号公钥。
public_key_rawString账号原始公钥。
sign_typeString签名类型。

7.4. 解析账号v2

从私钥或公钥解析新版账号信息,参数二选一。

HTTP请求:

GET http://{url}/getAddressV2

请求示例:

http://{url}/getAddressV2?private_key=privbzMv7D5DCmsRkjSn1r6dGaLgP99L3iDQtU7egFJjJxRB32h3aBTE

请求参数说明:

字段名类型描述
private_keyString选填,账号私钥。
public_keyString选填,账号公钥,当private_key为空时,通过该参数解析账号地址。

成功的返回JSON数据:

{
"error_code" : 0,
"result" : {
"address" : "adxSTAWxZRTfpXzooSuNL9dwTeekST9SaKBuR",
"address_eth" : "0x015f8a0eb8c8a4fad1e3b4cff5d22b2110f26212",
"private_key" : "privbzMv7D5DCmsRkjSn1r6dGaLgP99L3iDQtU7egFJjJxRB32h3aBTE",
"private_raw" : "e58a88bc069e61e903b2482713ea02ea8b5fd9033439d84929fa374cad9f2254",
"public_key" : "b00100c2b76b29ad258051dc7be74e77b87994562ace6736eb2ef892cd01519973c585bda035",
"public_key_raw" : "00c2b76b29ad258051dc7be74e77b87994562ace6736eb2ef892cd01519973c5",
"sign_type" : "ed25519"
}
}

响应参数说明:

字段名类型描述
addressString新版账号地址。
address_ethString以太坊地址。
private_keyString账号私钥。
private_key_rawString账号原始私钥。
public_keyString账号公钥。
public_key_rawString账号原始公钥。
sign_typeString签名类型。

7.5. 地址转换

在原始地址、新版地址、以太坊地址之间进行转换,参数三选一。

HTTP请求:

GET http://{url}/evmAddress

请求示例:

http://{url}/evmAddress?address=adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd

请求参数说明:

参数描述
address选填,原版地址,可以转换到新版地址与以太坊地址
address_v2选填,新版地址,只能转换到以太坊地址,不能转换到原版账号地址,需要通过公钥得到原版账号地址
address_eth选填,以太坊地址,只能转换到新版账号地址,不能转换到原版账号地址,需要通过公钥得到原版账号地址

成功的返回JSON数据:

{
"result" : {
"address" : "adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd",
"address_eth" : "0x010685ba7024e96b604d75004f1b845b8f5abe42",
"address_v2" : "adxST8gKZDz4o8QzB5nscv3viaer7D7Tp2nVz"
}
}

响应参数说明:

字段名类型描述
addressString原版地址。
address_v2String新版地址。
address_ethString以太坊地址。

8. 查询接口

8.1. 查询创世账号

返回创世账号的信息。

HTTP请求:

GET http://{url}/getGenesisAccount

成功的返回JSON数据:

{
"error_code" : 0,
"result" : {
"address" : "adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd",
"assets" : null,
"assets_hash" : "ad67d57ae19de8068dbcd47282146bd553fe9f684c57c8c114453863ee41abc3",
"balance" : 98997754995601998,
"metadatas" : null,
"metadatas_hash" : "ad67d57ae19de8068dbcd47282146bd553fe9f684c57c8c114453863ee41abc3",
"nonce" : 14,
"priv" : {
"master_weight" : 1,
"thresholds" : {
"tx_threshold" : 1
}
}
}
}

响应参数说明:

字段名类型描述
addressString创世账号地址。
assetsString创世账号的资产信息。
assets_hashString创世账号的资产哈希。
balanceInt创世账号的余额。
metadatasString创世账号的metadatas信息。
metadatas_hashString创世账号的metadatas哈希。
nonceInt创世账号的nonce值。
privObject账号权限。

8.2. 查询黑洞账号

返回黑洞账号的信息。

HTTP请求:

GET http://{url}/getBlackHoleAccount

成功的返回JSON数据:

{
"error_code" : 0,
"result" : {
"address" : "adx0000000000000000000000000000000000",
"assets" : [
{
"amount" : 134,
"key" : {
"code" : "zxa",
"issuer" : "adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd"
}
}
],
"assets_hash" : "86e5c4ad70eb352b30a6a4f8e26fb121c6f73dd352d321c4f4922fefc4300da6",
"balance" : 1097,
"metadatas" : null,
"metadatas_hash" : "ad67d57ae19de8068dbcd47282146bd553fe9f684c57c8c114453863ee41abc3",
"priv" : {
"master_weight" : 1,
"thresholds" : {
"tx_threshold" : 1
}
}
}
}

8.3. 查询账号

查询指定账号的nonce、权限、信息及其所有资产、metadata。

HTTP请求:

GET http://{url}/getAccount

请求示例:

http://{url}/getAccount?address=adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd

请求参数说明:

字段名类型描述
addressString必填,账号地址。
keyString选填,账号的 metadata 中指定的key的值,字段为空时不返回metadata信息。
code, issuerString选填,issuer表示资产发行账户地址,code表示资产代码。只有同时填写正确code&issuer才能正确显示指定资产否则默认显示所有资产。

成功的返回JSON数据:

{
"error_code" : 0,
"result" : {
"address" : "adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd",
"assets" : [
{
"amount" : 2000,
"key" : {
"code" : "CNY",
"issuer" : "adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd"
}
}
],
"assets_hash" : "131bf4753e7c2a556886b07bf9f2b7ff268714399b1a058fa0488fc44c7a1788",
"balance" : 99699955956151002,
"metadatas" : null,
"metadatas_hash" : "f66847431c1a4be5be1b85df04dee822c12e5addae64357e0e8a90eb9ac047a5",
"nonce" : 17,
"priv" : {
"master_weight" : 1,
"thresholds" : {
"tx_threshold" : 1
}
}
}
}

8.4. 查询账号基本信息

返回指定账号的基本信息。

HTTP请求:

GET http://{url}/getAccountBase

请求示例:

http://{url}/getAccountBase?address=adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd

请求参数说明:

字段名类型描述
addressString必填,账号地址。

成功的返回JSON数据:

{
"error_code" : 0,
"result" : {
"address" : "adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd",
"assets_hash" : "131bf4753e7c2a556886b07bf9f2b7ff268714399b1a058fa0488fc44c7a1788",
"balance" : 99699955956151002,
"metadatas_hash" : "f66847431c1a4be5be1b85df04dee822c12e5addae64357e0e8a90eb9ac047a5",
"nonce" : 17,
"priv" : {
"master_weight" : 1,
"thresholds" : {
"tx_threshold" : 1
}
}
}
}

8.5. 查询资产

查询指定账号的资产信息。

HTTP请求:

GET http://{url}/getAccountAssets

请求示例:

http://{url}/getAccountAssets?address=adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd

请求参数说明:

字段名类型描述
addressString必填,账号地址。
codeString选填,资产代码。同时填写正确的code和issuer时显示指定资产,否则显示所有资产。
issuerString选填,资产发行账户地址。

成功的返回JSON数据:

{
"error_code" : 0,
"result" : [
{
"amount" : 2000,
"key" : {
"code" : "CNY",
"issuer" : "adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd"
}
}
]
}

8.6. 查询metadata

返回指定账号的metadata信息。

HTTP请求:

GET http://{url}/getAccountMetaData

请求示例:

http://{url}/getAccountMetaData?address=adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd

请求参数说明:

字段名类型描述
addressString必填,账号地址,。
keyString选填,指定metadata中的key值。

成功的返回JSON数据:

{
"error_code" : 0,
"result" : {
"age" : {
"key" : "age",
"value" : "30",
"version" : 1
}
}
}

8.7. 查询交易

根据交易哈希或区块高度查询历史交易内容。

HTTP请求:

GET http://{url}/getTransactionHistory

请求示例:

http://{url}/getTransactionHistory?hash=5fef7f80baf036a0635c66b6ec7c68f4d5bf642290047ad0ce4e576465326d20

请求参数说明:

字段名类型描述
ledger_seqInt选填,区块高度。查询指定区块中的所有交易。
hashSting选填,交易唯一标识。查询hash对应的交易。

优先根据ledger_seq查询,当ledger_seq为空时,根据hash查询。如果两个参数都为空,返回所有交易。

成功的返回JSON数据:

{
"error_code":0,
"result":{
"total_count":1,
"transactions":[
{
"actual_fee":5000213000,
"close_time":1711453396442727,
"error_code":0,
"error_desc":"",
"hash":
"5fef7f80baf036a0635c66b6ec7c68f4d5bf642290047ad0ce4e576465326d20",
"ledger_seq":9298,
"signatures":[
{
"public_key": "b001ac76f97b0fda145c68e2edf6665c247a292260694b5dfcacac8acb658bd3746e7d8a3032",
"sign_data": "d211c7b93b9625919077ad735e68478710b95a86621d6cab05c7183488bd44bac5f401f85c7fd28f7072cc3ad4359edea8f4850a239ac2e653d6314869d52700"
}
],
"transaction":{
"fee_limit":10000000000,
"gas_price":1000,
"nonce":8,
"operations":[
{
"issue_asset":{
"amount":1000,
"code":"CNY"
},
"type":2
}
],
"source_address":"adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd"
},
"tx_size":213
}
]
}
}

8.8. 查询缓存队列交易

查询交易池中的交易信息。

HTTP请求:

GET http://{url}/getTransactionCache

请求示例:

http://{url}/getTransactionCache?limit=10

请求参数说明:

字段名类型描述
hashString选填,用交易的唯一标识hash查询。
limitInt选填,查询交易队列前N个正在处理的交易。
优先根据hash查询交易,当hash为空时,根据limit查询。

成功的返回JSON数据:

{
"error_code":0,
"result":{
"total_count":1,
"transactions":[{
"hash":"42954862eca397ab4b2bd8210e753709bb6a61308d287a73733f5c64c7cfcabb",
"incoming_time":1711459378250266,
"signatures":[
{
"public_key": "b001ac76f97b0fda145c68e2edf6665c247a292260694b5dfcacac8acb658bd3746e7d8a3032",
"sign_data": "2190a409ff50c87d4d505a3816cc6ce42ffacb6c727aaa87bf59fbfae17a8b1a63e55709dfc6794c01b960453d1606bd67846de796ff538023e6d25528fb6e06"
}
],
"status":"processing",
"transaction":{
"fee_limit":10000000000,
"gas_price":1000,
"nonce":20,
"operations":[
{
"create_account":{
"dest_address":"adxSXmVaTseEx7yuGPufL5gYFf96WKtbMG2Eo",
"init_balance":1000000,"metadatas":[
{
"key":"111",
"value":"hello 111!"
},
{
"key":"222",
"value":"hello 222!"
}
],
"priv":{
"master_weight":1,
"thresholds":{
"tx_threshold":1
}
}
},
"type":1
}
],
"source_address":"adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd"
}
}
]}
}

8.9. 查询区块

查询指定高度区块的信息。

HTTP请求:

GET http://{url}/getLedger

请求示例:

http://{url}/getLedger?seq=10835

请求参数说明:

字段名类型描述
seqInt选填,ledger的序号, 如果不填写,返回当前ledger
with_validatorString选填,字段为"true"时显示验证节点列表,默认不显示。
with_consvalueString选填,字段为"true"时显示共识值,默认不显示。
with_feeString选填,字段为"true"时显示费用配置,默认不显示。
with_leaderString选填,字段为"true"时显示区块奖励和验证节点奖励,默认不显示。

成功的返回JSON数据:

{
"error_code" : 0,
"result" : {
"consensus_value" : {
"close_time" : 1711533732325928,
"ledger_seq" : 10835,
"previous_ledger_hash" : "cb48839de8b24bcd2d4689f6ad8fbde0b8bbcae108bb055c1c8ae13f69893400",
"previous_proof" : "0ac3010a2e080110022a2808d05410d254222072b8dae46aa95343c0b7cfef81ffb21fcaedb59cff56db1fcd653903ff7998c81290010a4c62303031363739303238346537396461393864663435396133356238626562663038346132646263393463616563643362623235353261666534623234653831633364373837343338363232124055bc19b30b4a164a1fe209d735fc20e1103ccc423eafffbc5693626f7787f6d220e19f793370cd46c527fc4cf0f811b3e69d78531e22ab3b3d7a3cadf65f3808",
"previous_proof_plain" : {
"commits" : [
{
"pbft" : {
"commit" : {
"sequence" : 10834,
"value_digest" : "72b8dae46aa95343c0b7cfef81ffb21fcaedb59cff56db1fcd653903ff7998c8",
"view_number" : 10832
},
"round_number" : 1,
"type" : 2
},
"signature" : {
"public_key" : "b0016790284e79da98df459a35b8bebf084a2dbc94caecd3bb2552afe4b24e81c3d787438622",
"sign_data" : "55bc19b30b4a164a1fe209d735fc20e1103ccc423eafffbc5693626f7787f6d220e19f793370cd46c527fc4cf0f811b3e69d78531e22ab3b3d7a3cadf65f3808"
}
}
]
},
"txset" : null
},
"fees" : {
"base_reserve" : 10000000,
"gas_price" : 1000
},
"header" : {
"account_tree_hash" : "053946067e6355a00b171ce2a445c90015feedc22ab8a9b9e6d8108d68fbef69",
"close_time" : 1711533732325928,
"consensus_value_hash" : "dd7980d113f1eff41c61666fda1c2eeae766290e9a7d791bbda2066a9462c7f7",
"fees_hash" : "916daa78d264b3e2d9cff8aac84c943a834f49a62b7354d4fa228dab65515313",
"hash" : "f283e436254c63af1d642d57dbbe690da9dea0928a5f113f6625fa8aa943b50f",
"previous_hash" : "cb48839de8b24bcd2d4689f6ad8fbde0b8bbcae108bb055c1c8ae13f69893400",
"seq" : 10835,
"tx_count" : 63,
"validators_hash" : "b291b7e00d03a0b7058a5b3a5a55ee7b21eed33e2ab1054cea28daa21ac522c9",
"version" : 4002
},
"ledger_length" : 224,
"validators" : [ "adxSBC9QWrTfZjxjnPjKEF5LHGHYCpZ9BDdDF" ]
}
}

8.10. 查询合约日志

查询js合约中tlog打印的内容

HTTP请求:

GET https://{url}/getContractTxPOST

8.11. 查询账本树

查询区块链账本树。

HTTP请求:

GET http://{url}/debug

请求示例:

http://{url}/debug?key=10835

请求参数说明:

字段名类型描述
keyString必填,数据库存储的key

成功的返回JSON数据:

{
"DEL" : 18,
"NEW" : 38,
"ret" : {
"children" : [
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
{
"childtype" : 1,
"hash" : "9e8eb2d72e347d881d5c20dc18f104f0807718be3d0cf98b4324441335ddd5c6",
"sublocation" : "01f8e100"
},
null
]
}
}

8.11. 批量执行

批量执行查询或交易。

HTTP请求:

POST https://{url}/multiQuery

请求示例:

{
"items":[
{
"url":"getSignature",
"method":"POST",
"jsonData":{
"private_key":
"privbtBp152KnunKvCBgFQX96zuASSH6FBY9KVTX1bifPCLUWarq9EaN",
"transaction_blob": "0a25616478537031583456376858444452424b484c3655323143706250686b693759716a7555641003225708071225616478537031583456376858444452424b484c3655323143706250686b693759716a755564622c0a25616478536657687a365162716234375666724c59627372436a385a736f364a6b4c536369331080c2d72f3080c8afa02538e807"
}
},
{
"url":"createAccount?sign_type=sm2",
"method":"GET"
}
]
}

请求参数说明:

字段名类型描述
urlString必填,请求接口,参考本文的其他API接口。
methodString必填,http方法,填GET或POST。
jsonDataJson选填,对于POST方法,该字段填http请求的body数据。

成功的返回JSON数据:

{
"error_code" : 0,
"results" : [
{
"error_code" : 0,
"result" : {
"data" : "0a25616478537031583456376858444452424b484c3655323143706250686b693759716a7555641003225708071225616478537031583456376858444452424b484c3655323143706250686b693759716a755564622c0a25616478536657687a365162716234375666724c59627372436a385a736f364a6b4c536369331080c2d72f3080c8afa02538e807",
"public_key" : "b001ac76f97b0fda145c68e2edf6665c247a292260694b5dfcacac8acb658bd3746e7d8a3032",
"sign_data" : "999b247104947ed3f80c8d672a651eb8b7257da2908f327d326542f2275d9403dc353ed9522b5f769c38d620993275b01c09b134e4af7eb3aabe06290cee0b0b"
}
},
{
"error_code" : 0,
"result" : {
"address" : "adxT3ubDCsmNKz2PGydRkbVZ8iE5fMrtLSp8N",
"address_raw" : "78aad1a1d7114db3a0e9fcedbb3f714272f6249f",
"private_key" : "privC6EARzYYVDB72L71H7aeVZjZGmuT1UznjuW788rkbYDRgfXduYFz",
"private_key_aes" : "f85cbe64b3d411d185452ffae7369c441f9ece117b1dd9bcd06e875a03f7a5226809e1f512a124226788295f353ba0feca19d463a3c5eb6abfc917ebe12234d9",
"private_key_raw" : "9493bb091285646261c88c3b3b7139409ca0893bac2e88ea55e1cfedd28e90c8",
"public_key" : "b00204299a3435783abdd611c87b86978c13765bebbd1bb5b270d77ed665acf55c70183463ce87a15dffafb7ae3edb2a6b98ae0de13c3c73a3d3f36d245e898b94540aa21c2e9c",
"public_key_raw" : "04299a3435783abdd611c87b86978c13765bebbd1bb5b270d77ed665acf55c70183463ce87a15dffafb7ae3edb2a6b98ae0de13c3c73a3d3f36d245e898b94540a",
"sign_type" : "sm2"
}
}
]
}

8.12. 查询区块奖励

查询区块链区块奖励参数,或输入参数计算区块奖励总数。

HTTP请求:

GET http://{url}/getRewardData

请求示例:

http://{url}/getRewardData?reward_period=75&reward_first_value=800000000&reward_decay=17513928

请求参数说明:

字段名类型描述
reward_decayint64_t选填,区块奖励减小周期(区块高度)。
reward_first_valueint64_t选填,初始区块奖励。
reward_periodint64_t选填,区块奖励减小周比例,百分制。

成功的返回JSON数据:

{
"error_code" : 0,
"error_desc" : "",
"result" : {
"reward_decay" : 75,
"reward_first_value" : 800000000,
"reward_period" : 15768000,
"reward_total" : 50457601482192000
}
}

9. 合约接口

9.1. 调用合约

在智能合约模块的设计中,我们提供了沙箱环境来进行合约调试。在这个环境中,调试过程不会更改区块链和合约的状态。我们提供了callContract接口来帮助用户进行智能合约的调试,用户可以调用已存在于公链上的智能合约。使用callContract接口不会发送交易,因此无需支付上链手续费。

HTTP请求:

POST https://{url}/callContract

请求示例:

{
"contract_address" : "adxSTb2TW6HMjHjFPQAjVTJmyKh7khvSk4BY1",
"input" : "",
"contract_balance" : "100009000000",
"fee_limit" : 100000000000000,
"gas_price": 1000,
"opt_type" : 2,
"source_address" : ""
}

请求参数说明:

字段名类型描述
contract_addressString必填,调用的智能合约地址,如果从数据库查询不到或不是合约账户则返回错误。
inputString选填,给被调用的合约传参。
fee_limitInt必填,手续费。
gas_priceInt必填,Gas价格。
contract_balanceString必填,赋予合约的初始 bubi 余额。
opt_typeInt必填,0: 调用合约的读写接口 init, 1: 调用合约的读写接口 main, 2 :调用只读接口 query。
source_addressString选填,模拟调用合约的原地址。

成功的返回JSON数据:

{
"error_code" : 0,
"error_desc" : "",
"result" : {
"logs" : {
"0-adxSTb2TW6HMjHjFPQAjVTJmyKh7khvSk4BY1" : null
},
"query_rets" : [
{
"result" : {
"type" : "string",
"value" : ""
}
}
],
"stat" : {
"apply_time" : 4821,
"memory_usage" : 1830928,
"stack_usage" : 0,
"step" : 5
},
"txs" : null
}
}

9.2. 调试合约

参考v8_debug文档。

9.3. ABI编码

对调用solidity合约的参数进行编码。

HTTP请求:

POST https://{url}/evmAbiEncode

请求示例:

{
"function": "store2(uint256,int256)",
"args": "[100,-50]"
}

请求参数说明:

字段名类型描述
functionString必填,智能合约接口名称。
argsString选填,接口调用参数。

成功的返回JSON数据:

{
"result" : {
"abicode" : "6aacce8c0000000000000000000000000000000000000000000000000000000000000064ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffce",
"args" : "[100,-50]",
"function" : "store2(uint256,int256)"
}
}

响应参数说明:

字段名类型描述
functionString智能合约接口名称。
argsString接口调用参数。
abicodeString编码后的字节码,前4个字节是接口签名,用于标记接口 。用于转移资产中的input字段,调用solidity合约接口。

9.4. ABI解码

解析abi编码中的参数内容。

HTTP请求:

POST https://{url}/evmAbiDecode

请求示例:

{
"retVal": "store2(uint256,int256)",
"abicode": "0000000000000000000000000000000000000000000000000000000000000064ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffce"
}

请求参数说明:

字段名类型描述
retValString必填,参数格式,store2名称不会对解码结果有任何影响,returns(uint256,int256)是同样的效果。
abicodeString必填,参数字节码,不带任何的接口签名(abi编码的前4个字节),如果有需要去除。

成功的返回JSON数据:

{
"result": {
"abicode": "0000000000000000000000000000000000000000000000000000000000000064ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffce",
"parseValue": "[\"100\",\"-50\"]"
}
}

响应参数说明:

字段名类型描述
abicodeString入参内容
parseValueString解码后的参数内容

10. 交易接口

10.1. 交易结构

JSON格式的交易结构:

{
"source_address":"xxxxxxxxxxx",//交易源账号,即交易的发起方
"nonce":2, //nonce值
"fee_limit" : 1000000, //愿为交易花费的手续费
"gas_price": 1000,//gas价格(不小于配置的最低值)
"ceil_ledger_seq": 100, //可选,区块高度限制, 如果大于0,则交易只有在该区块高度之前(包括该高度)才有效
"metadata":"0123456789abcdef", //可选,用户自定义给交易的备注,16进制格式
"operations":[
{
//根据不同的操作填写
},
{
//根据不同的操作填写
}
......
]
}

参数说明:

字段名类型描述
source_addressString必填,交易源账号,即交易发起方的账号。
nonceInt必填,值必须等于源账号的当前nonce值加1,这是为了防止重放攻击而设计的。通过8.3查询账号查询nonce值。若查询结果没有显示nonce字段,则当前nonce值为0。交易成功后,源账号的nonce字段会自动加1。
fee_limitInt必填,愿为交易花费的手续费。
gas_priceInt必填,gas价格(不小于配置的最低值)。
ceil_ledger_seqInt选填,区块高度限制,。大于0时,交易只有在该高度之前(包括该高度)才有效。
metadataString选填,交易备注,十六进制格式。
operationsJson必填,交易执行的操作,一个交易可以执行多个操作。

Transaction protocol buffer结构:

message Transaction
{
enum Limit{
UNKNOWN = 0;
OPERATIONS = 1000;
};
string source_address = 1;
int64 nonce = 2;
int64 fee_limit = 3;
int64 gas_price =4;
int64 ceil_ledger_seq = 5;
bytes metadata = 6;
repeated Operation operations = 7;
}

10.2. 操作结构

操作码

代码值枚举名说明
1CREATE_ACCOUNT创建账号
2ISSUE_ASSET发行资产
3PAY_ASSET转移资产
4SET_METADATA设置metadata
7PAY_COIN支付bubi COIN
9SET_PRIVILEGE设置权限
10UPGRADE_CONTRACT升级合约

Operation protocol buffer 结构

Operation是所有操作的父类

message Operation 
{
enum Type {
UNKNOWN = 0;
CREATE_ACCOUNT = 1;
ISSUE_ASSET = 2;
PAY_ASSET = 3;
SET_METADATA = 4;
SET_SIGNER_WEIGHT = 5;
SET_THRESHOLD = 6;
PAY_COIN = 7;
LOG = 8;
};
Type type = 1;
string source_address = 2;
bytes metadata = 3;

OperationCreateAccount create_account = 4;
OperationIssueAsset issue_asset = 5;
OperationPayAsset pay_asset = 6;
OperationSetMetadata set_metadata = 7;
OperationSetSignerWeight set_signer_weight = 8;
OperationSetThreshold set_threshold = 9;
OperationPayCoin pay_coin = 10;
OperationLog log = 11;
}

创建账号操作protocol buffer结构:

message OperationCreateAccount
{
string dest_address = 1;
Contract contract = 2;
AccountPrivilege priv = 3;
repeated KeyPair metadatas = 4;
int64 init_balance = 5;
string init_input = 6;
}

发行资产操作protocol buffer 结构:

message OperationIssueAsset
{
string code = 1;
int64 amount = 2;
}

转移资产操作protocol buffer 结构:

message OperationPayAsset
{
string dest_address = 1;
Asset asset = 2;
string input = 3;
}

message Asset
{
AssetKey key = 1;
int64 amount = 2;
}

message AssetKey
{
string issuer = 1;
string code = 2; //资产代码
int32 type = 3; //资产类型
}

设置metadata操作protocol buffer 结构:

message OperationSetMetadata
{
string key = 1;
string value = 2;
int64 version = 3;
}

设置权限操作protocol buffer 结构:

message OperationSetPrivilege
{
string master_weight = 1;
repeated Signer signers = 2;
string tx_threshold = 3;
repeated OperationTypeThreshold type_thresholds = 4;
}

message OperationTypeThreshold
{
Operation.Type type = 1;
int64 threshold = 2;
}

message Signer
{
enum Limit
{
SIGNER_NONE = 0;
SIGNER = 100;
};
string address = 1;
int64 weight = 2;
}

转移gas操作protocol buffer 结构:

message OperationPayCoin
{
string dest_address = 1;
int64 amount = 2;
string input = 3;
}

记录日志操作protocol buffer 结构:

message OperationLog{
string topic = 1;
repeated string datas = 2;
}

升级合约操作protocol buffer 结构:

message OperationUpgradeContract
{
string dest_address = 1;
bool s_payload = 2;
string payload = 3;
bool s_owner = 4;
string owner = 5;
}

10.3. 序列化

将组装好的json格式的交易数据序列化。

HTTP请求:

POST https://{url}/getTransactionBlob

请求示例:

{ 
"source_address":"adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd",
"nonce":17,
"fee_limit":10000000000,
"gas_price":1000,
"operations":[
{
"type":7,
"pay_coin":{
"dest_address":"adxSXmVaTseEx7yuGPufL5gYFf96WKtbMG2Eo",
"amount":10000000,
"input":""
}
}
]
}

组装交易内容参考10.1交易结构

成功的返回JSON数据:

{
"error_code" : 0,
"error_desc" : "",
"result" : {
"hash" : "4a2d6f6f49aaa5025edfdb8ea1d5afe23b02585a84b56f9d261bc96d9d79a5ce",
"transaction_blob" : "0a25616478537031583456376858444452424b484c3655323143706250686b693759716a755564101122300807622c0a2561647853586d56615473654578377975475075664c35675946663936574b74624d4732456f1080ade2043080c8afa02538e807"
}
}

响应参数说明:

字段名描述描述
hashString交易哈希。
transaction_blobString交易序列化之后的16进制表示

10.4. 反序列化

将序列化之后的16进制表示还原为json格式的数据。

HTTP请求:

GET http://{url}/getTransactionFromBlob

请求示例:

http://{url}/getTransactionFromBlob?blob=0a25616478537031583456376858444452424b484c3655323143706250686b693759716a755564101122300807622c0a2561647853586d56615473654578377975475075664c35675946663936574b74624d4732456f1080ade2043080c8afa02538e807

请求参数说明:

字段名类型描述
blobString必填,交易序列化的16进制表示。

成功的返回JSON数据:

{
"actual_fee" : 0,
"close_time" : 0,
"error_code" : 0,
"error_desc" : "",
"hash" : "4a2d6f6f49aaa5025edfdb8ea1d5afe23b02585a84b56f9d261bc96d9d79a5ce",
"ledger_seq" : 0,
"transaction" : {
"fee_limit" : 10000000000,
"gas_price" : 1000,
"nonce" : 17,
"operations" : [
{
"pay_coin" : {
"amount" : 10000000,
"dest_address" : "adxSXmVaTseEx7yuGPufL5gYFf96WKtbMG2Eo"
},
"type" : 7
}
],
"source_address" : "adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd"
},
"tx_size" : 102
}

参数的含义参考10.1交易结构10.2操作结构

10.5. 签名

用账户私钥对数据进行签名。

这个api会泄露账号私钥,仅用于测试环境,方便测试使用,请勿在生产环境中使用。在生产环境中请使用离线交易签名工具。

HTTP请求:

POST http://{url}/getSignature

请求示例:

{
"private_key":"privbtBp152KnunKvCBgFQX96zuASSH6FBY9KVTX1bifPCLUWarq9EaN",
"transaction_blob": "0a25616478537031583456376858444452424b484c3655323143706250686b693759716a755564101122300807622c0a2561647853586d56615473654578377975475075664c35675946663936574b74624d4732456f1080ade2043080c8afa02538e807"
}

请求参数说明:

字段名类型描述
private_keyString必填,账户私钥。
transaction_blobString必填,交易序列化之后的16进制格式。

成功的返回JSON数据:

{
"error_code" : 0,
"result" : {
"data" : "0a25616478537031583456376858444452424b484c3655323143706250686b693759716a755564101122300807622c0a2561647853586d56615473654578377975475075664c35675946663936574b74624d4732456f1080ade2043080c8afa02538e807",
"public_key" : "b001ac76f97b0fda145c68e2edf6665c247a292260694b5dfcacac8acb658bd3746e7d8a3032",
"sign_data" : "b7d38afd04c8d25fafca05acb695937221261a62a1087dda495b980fe23131f2b71d5523254f256430b797bbc1ace430bd4ace5376d406fdf55ab7023ccb6f05"
}
}

响应参数说明:

字段名类型描述
dataString交易序列化之后的16进制格式。
sign_dataString签名数据, 16进制格式。其值为对transaction_blob进行签名(动词)得到的签名数据。
public_keyString公钥, 16进制格式。

10.6. 提交交易

提交交易有两种方式,一种是10.1交易结构中的示例代码,直接提交私钥和交易结构,这种方法会暴露账号的私钥,仅用于测试环境,方便测试使用,在生产环境中请勿使用。

**本节方法是一种安全的提交交易方式,可以在生产环境中使用:**对交易结构序列化(参考10.3),使用离线交易签名工具对序列化结果签名,提交签名、公钥和blob。

提交序列化数据和签名,一种安全的提交交易方法。

HTTP请求:

POST http://{url}/submitTransaction

请求示例:

{
"items" : [
{
"transaction_blob" : "0a25616478537031583456376858444452424b484c3655323143706250686b693759716a755564101122300807622c0a2561647853586d56615473654578377975475075664c35675946663936574b74624d4732456f1080ade2043080c8afa02538e807",
"signatures" : [
{
"sign_data" : "b7d38afd04c8d25fafca05acb695937221261a62a1087dda495b980fe23131f2b71d5523254f256430b797bbc1ace430bd4ace5376d406fdf55ab7023ccb6f05",
"public_key" : "b001ac76f97b0fda145c68e2edf6665c247a292260694b5dfcacac8acb658bd3746e7d8a3032"
}
]
}
]
}

请求参数说明:

字段名类型描述
transaction_blobString必填,交易序列化之后的16进制格式。您可以参照交易结构来组装自己的交易数据。
sign_dataString必填,签名数据,16进制格式。其值为对transaction_blob进行签名(动词)得到的签名数据。注意,签名时要先将transaction_blob转成字节流再签名,不要对16进制字符串直接签名
public_keyString必填,公钥,16进制格式。

成功的返回JSON数据:

{
"results" : [
{
"error_code" : 0,
"error_desc" : "",
"hash" : "4a2d6f6f49aaa5025edfdb8ea1d5afe23b02585a84b56f9d261bc96d9d79a5ce"
}
],
"success_count" : 1
}

响应参数说明:

字段名类型描述
error_codeInt交易成功时为0,失败时为对应错误码
error_descString交易成功时为空,失败时描述错误内容
hashString交易哈希,交易失败时为空
success_countInt成功的交易数量

10.7. 提交多个操作

提交交易接口中每个交易里可以包含多个操作。

源账号adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd当前nonce值为5,第一个操作是创建账号adxSVxzqgKwdYahhjJbQTbfpTgs1cF7uV3qG9,第二个操作是向adxSVxzqgKwdYahhjJbQTbfpTgs1cF7uV3qG9转移10000000gas。

HTTP请求示例:

curl -d '{
"items":[
{
"private_keys":[
"privbtBp152KnunKvCBgFQX96zuASSH6FBY9KVTX1bifPCLUWarq9EaN"
],
"transaction_json":{
"source_address":"adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd",
"nonce":6, // 当前nonce值为5
"fee_limit":100000000000000,
"gas_price":2000,
"operations":[
{
"type": 1,
"create_account": {
"dest_address":
"adxSVxzqgKwdYahhjJbQTbfpTgs1cF7uV3qG9",
"init_balance": 10000000,
"priv": {
"master_weight": 1,
"thresholds": {
"tx_threshold": 1
}
}
}
},
{
"type":7, // 操作码,固定值
"pay_coin":{
"dest_address":"adxSVxzqgKwdYahhjJbQTbfpTgs1cF7uV3qG9",
"amount":10000000,
"input":""
}
}
]
}
}
]
}' https://seed1-node.bubi.cn/submitTransaction

成功的返回JSON数据:

{
"results" : [
{
"error_code" : 0,
"error_desc" : "",
"hash" : "35fe8d4cc864b582332696abdbcafee6f3f466b1656e73087cf8af46ecf27fd8"
}
],
"success_count" : 1
}

交易成功后,源账户的nonce为6,目标账户被创建并有20000000gas。

10.8. 提交多个交易

提交交易接口可以一次提交多个交易。

源账号adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd当前nonce值为6,第一个交易是创建账号adxShnaTjLpybCuGczjujSpU2gPsfB19BeEYr,第二个交易是向adxShnaTjLpybCuGczjujSpU2gPsfB19BeEYr转移10000000gas。

HTTP请求示例:

curl -d '{
"items":[
{
"private_keys":[
"privbtBp152KnunKvCBgFQX96zuASSH6FBY9KVTX1bifPCLUWarq9EaN"
],
"transaction_json":{
"source_address":"adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd",
"nonce":7, // 当前nonce值为6
"fee_limit":100000000000000,
"gas_price":2000,
"operations":[
{
"type": 1,
"create_account": {
"dest_address":
"adxShnaTjLpybCuGczjujSpU2gPsfB19BeEYr",
"init_balance": 10000000,
"priv": {
"master_weight": 1,
"thresholds": {
"tx_threshold": 1
}
}
}
}
]
}
},
{
"private_keys":[
"privbtBp152KnunKvCBgFQX96zuASSH6FBY9KVTX1bifPCLUWarq9EaN"
],
"transaction_json":{
"source_address":"adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd",
"nonce":8, // 当前nonce值为6
"fee_limit":100000000000000,
"gas_price":2000,
"operations":[
{
"type":7, // 操作码,固定值
"pay_coin":{
"dest_address":"adxShnaTjLpybCuGczjujSpU2gPsfB19BeEYr",
"amount":10000000,
"input":""
}
}
]
}
}
]
}' https://seed1-node.bubi.cn/submitTransaction

成功的返回JSON数据:

{
"results" : [
{
"error_code" : 0,
"error_desc" : "",
"hash" : "35fe84dcd6728b47aacaa3da84c20796a4c6ded2028f07dd2d8c677089b00003"
},
{
"error_code" : 0,
"error_desc" : "",
"hash" : "bc2cf0305aef7a3795fcb0fdef1b0eb9607ba014856b74eb6050f113e1a72b45"
}
],
"success_count" : 2
}

交易成功后,源账户的nonce为8,目标账户被创建并有20000000gas。

10.9. 评估费用

在不改变账号余额的基础上,评估交易所需的费用。交易涉及的源账号和目标账号都必须在系统中存在,但创建账号的目标地址除外。

HTTP请求:

POST http://{url}/testTransaction

请求示例:

{
"items": [
{
"transaction_json": {
"source_address": "adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd",
"metadata": "",
"nonce": 6,
"operations": [
{
"type": 7,
"pay_coin": {
"dest_address": "adxSpvcduVTt3Dp3PYZ7YnCdZED6fXZzXfVoE",
"amount": 10000
}
}
]
},
"signature_number": 1
}
]
}

请求参数说明:

字段名类型描述
source_addressString必填,模拟交易的源地址。
nonceInt必填,在源账号基础上加1。
signature_numberInt选填,签名个数,默认为1。
metadataString选填,交易备注。
operationsJson必填,可以是任何一种操作类型。

成功的返回JSON数据:

{
"error_code": 0,
"error_desc": "",
"result": {
"hash": "09ef13e423d36897b36372d39f70743d42fd2a4556c654efca5b06b5136108b3",
"logs": null,
"query_rets": null,
"stat": {
"apply_time": 0,
"memory_usage": 0,
"stack_usage": 0,
"step": 0
},
"txs": [
{
"actual_fee": 408,
"gas": 408,
"transaction_env": {
"transaction": {
"fee_limit": 408,
"gas_price": 1,
"nonce": 9,
"operations": [
{
"pay_coin": {
"amount": 10000000,
"dest_address": "adxSpvcduVTt3Dp3PYZ7YnCdZED6fXZzXfVoE"
},
"type": 7
}
],
"source_address": "adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd"
}
}
}
]
}
}

响应参数说明:

字段名类型描述
gas_priceIntgas_price为系统的最低price
actual_feeInt评估交易的实际费用
gasInt评估交易所用gas

11. 交易操作

11.1. 创建账号交易

在区块链上创建一个新的账号。账号分为普通账号智能合约账号。

  • HTTP请求:

    • 创建普通账号请求示例:
    curl -d '{
    "items":[
    {
    "private_keys":[
    "privbtBp152KnunKvCBgFQX96zuASSH6FBY9KVTX1bifPCLUWarq9EaN"
    ],
    "transaction_json":{
    "source_address":"adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd",
    "nonce":20,
    "fee_limit":10000000000,
    "gas_price":1000,
    "operations":[
    {
    "type": 1,
    "create_account": {
    "dest_address":
    "adxSXmVaTseEx7yuGPufL5gYFf96WKtbMG2Eo",
    "init_balance": 1000000,
    "metadatas":[
    {
    "key": "111",
    "value": "hello 111!",
    "version": 0
    },
    {
    "key": "222",
    "value": "hello 222!",
    "version": 0
    }
    ],
    "priv": {
    "master_weight": 1,
    "thresholds": {
    "tx_threshold": 1
    }
    }
    }
    }
    ]
    }
    }
    ]
    }' http://{url}/submitTransaction

    请求参数说明:

    字段名类型描述
    private_keysString[]必填,源账号的私钥。
    source_addressString必填,交易源账号,即交易发起方的账号。
    nonceInt必填,值必须为源账号当前nonce值加1。通过[查询账号](#8.3. 查询账号)API查询,若查询结果没有nonce字段,则当前nonce值为0。
    fee_limitInt必填,愿为交易花费的手续费。
    gas_priceInt必填,gas价格(不小于配置的最低值)。
    dest_addressString必填,目标账号的地址。创建普通账号时,不能为空。
    init_balanceInt必填,初始化账户 gas值。
    metadatasJson选填,为新建的账号设置一批初始的metadata,其数据类型为KeyPair。
    privJson必填,该账号的权限信息,创建普通账户必须填示例参数。{"master_weight" : 1 , "thresholds": {"tx_threshold":1}}
    • 创建合约账号请求示例:
    curl -d '{
    "items":[
    {
    "private_keys":[
    "privbtBp152KnunKvCBgFQX96zuASSH6FBY9KVTX1bifPCLUWarq9EaN"
    ],
    "transaction_json":{
    "source_address":"adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd",
    "nonce":5,
    "fee_limit":10000000000,
    "gas_price":1000,
    "operations":[{
    "type": 1,
    "create_account":{
    "contract":{
    "payload":
    "\"use strict\";function init(bar){return;}function main(input){let para = JSON.parse(input);if (para.do_foo){let x = {\"hello\" : \"world\"};}}function query(input){ return input;}",
    "owner": "adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd"
    },
    "init_balance": 10000000,
    "init_input" : "",
    "priv": {
    "master_weight": 0,
    "thresholds": {
    "tx_threshold": 1
    }
    }
    }
    }]
    }
    }
    ]
    }' http://{url}/submitTransaction

    请求参数说明:

    字段名类型描述
    private_keysString[]必填,源账号的私钥。
    source_addressString必填,交易源账号,即交易发起方的账号。
    nonceInt必填,值必须为源账号当前nonce值加1。通过[查询账号](#8.3. 查询账号)API查询,若查询结果没有nonce字段,则当前nonce值为0。
    fee_limitInt必填,愿为交易花费的手续费。
    gas_priceInt必填,gas价格(不小于配置的最低值)。
    payloadString必填,合约代码。JavaScript合约的字符串形式,或Solidity合约的abi编码。
    ownerString选填,合约的拥有人。拥有人可以对合约进行升级;如果不填,则合约无法被升级。
    init_balanceInt必填,初始化账户 gas值。
    init_inputString选填,创建合约账户时,给合约的init函数传参。
    privJson必填,该账号的权限信息,目标为合约账户必须填示例参数。{"master_weight" : 0 , "thresholds": {"tx_threshold":1}}

返回内容:

如果交易执行成功,返回交易哈希值,参考[交易结构](#10.1. 交易结构)的返回内容。

通过[查询交易](#8.7. 查询交易)查询操作码的执行结果。如果是创建合约账号,error_desc字段里存储了合约账户的地址。

{
"error_code":0,
"result":{
"total_count":1,
"transactions":[{
"actual_fee":1000442000,
"close_time":1711455959237702,
"error_code":0,
"error_desc":"[{\"contract_address\":\"adxSTD84fMmppxGLbtWD3ASMjtBjjN8kp4MMx\",\"contract_evm_address\":\"0x01ddacf1f1383fc31a39302b69a9d77e37e7f8c8\",\"operation_index\":0}]",
"hash":"be801948c793152c59b12db558fd60e7bc1190528b850c1d18509a5a41557280",
"ledger_seq":9342,
"signatures":[
{
"public_key": "b001ac76f97b0fda145c68e2edf6665c247a292260694b5dfcacac8acb658bd3746e7d8a3032",
"sign_data": "af5beef6314658adad42a9f49ce190486727203afe243dec3bba99ba8f0c7650bc2650fae82999651f6ab1123b52af30b6f192afb28e210ecedceeb98bbef20d"
}
],
"transaction":{
"fee_limit":10000000000,
"gas_price":1000,
"nonce":12,"operations":[
{
"create_account":{
"contract":{
"owner":"adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd",
"payload":"\"use strict\";function init(bar){return;}function main(input){let para = JSON.parse(input);if (para.do_foo){let x = {\"hello\" : \"world\"};}}function query(input){ return input;}"},
"init_balance":10000000,
"init_input":"{}",
"priv":{
"thresholds":{
"tx_threshold":1
}
}
},
"type":1
}
],
"source_address":"adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd"
},
"tx_size":442
}]
}
}

11.2. 发行资产交易

操作源账号发行一笔数字资产,执行成功后操作源账号的资产余额中会出现这一笔资产。

HTTP请求示例:

curl -d '{
"items":[
{
"private_keys":[
"privbtBp152KnunKvCBgFQX96zuASSH6FBY9KVTX1bifPCLUWarq9EaN"
],
"transaction_json":{
"source_address":"adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd",
"nonce":8,
"fee_limit":10000000000,
"gas_price":1000,
"operations":[
{
"type": 2,
"issue_asset": {
"amount": 1000,
"code": "CNY"
}
}
]
}
}
]
}' http://{url}/submitTransaction

请求参数说明:

字段名类型描述
private_keysString[]必填,源账号的私钥。
source_addressString必填,交易源账号,即交易发起方的账号。
nonceInt必填,值必须为源账号当前nonce值加1。通过[查询账号](#8.3. 查询账号)API查询,若查询结果没有nonce字段,则当前nonce值为0。
fee_limitInt必填,愿为交易花费的手续费。
gas_priceInt必填,gas价格(不小于配置的最低值)。
amountInt必填,发行的数量数值范围(0,MAX(int64))
codeString必填,要发行的资产代码,长度范围[1, 64]

执行成功后,操作源的资产表中会出现这部分新发行的资产,可以通过[查询资产](#8.5. 查询资产)接口查询。

11.3. 转移资产

操作源账号将一笔资产转给目标账号。

HTTP请求示例:

curl -d '{
"items":[
{
"private_keys":[
"privbtBp152KnunKvCBgFQX96zuASSH6FBY9KVTX1bifPCLUWarq9EaN"
],
"transaction_json":{
"source_address":"adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd",
"nonce":8,
"fee_limit":10000000000,
"gas_price":1000,
"operations":[
{
"type": 3,
"pay_asset": {
"dest_address": "adxSXmVaTseEx7yuGPufL5gYFf96WKtbMG2Eo",
"asset": {
"key": {
"issuer": "adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd",
"code": "CNY"
},
"amount":100
},
"input": ""
}
}
]
}
}
]
}' http://{url}/submitTransaction

请求参数说明:

字段名类型描述
private_keysString[]必填,源账号的私钥。
source_addressString必填,交易源账号,即交易发起方的账号。
nonceInt必填,值必须为源账号当前nonce值加1。通过[查询账号](#8.3. 查询账号)API查询,若查询结果没有nonce字段,则当前nonce值为0。
fee_limitInt必填,愿为交易花费的手续费。
gas_priceInt必填,gas价格(不小于配置的最低值)。
dest_addressString必填,目标账户。
issuerString必填,资产发行方。
codeString必填,资产代码。
amountInt必填,要转移资产的数量。
inputString选填,如果转移的对象是合约账户,触发合约调用的入参,如果用户未输入,默认为空字符串。

11.4. 设置metadata

交易源账号修改或添加一个metadata到自己的metadata表中。

HTTP请求示例:

curl -d '{
"items":[
{
"private_keys":[
"privbtBp152KnunKvCBgFQX96zuASSH6FBY9KVTX1bifPCLUWarq9EaN"
],
"transaction_json":{
"source_address":"adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd",
"nonce":6,
"fee_limit":10000000000,
"gas_price":1000,
"operations":[
{
"type": 4,
"set_metadata": {
"key": "age",
"value": "30"
}
}
]
}
}
]
}' http://{url}/submitTransaction

请求参数说明:

字段名类型描述
private_keysString[]必填,源账号的私钥。
source_addressString必填,交易源账号,即交易发起方的账号。
nonceInt必填,值必须为源账号当前nonce值加1。通过[查询账号](#8.3. 查询账号)API查询,若查询结果没有nonce字段,则当前nonce值为0。
fee_limitInt必填,愿为交易花费的手续费。
gas_priceInt必填,gas价格(不小于配置的最低值)。
keyString必填,主键,账号内唯一。长度范围[1,1024]
valueString必填,主键,账号内唯一。长度范围[1,1024]

11.5. 设置权限

设置签名者拥有的权重,设置各个操作所需要的门限。

HTTP请求示例:

curl -d '{
"items":[
{
"private_keys":[
"privbtBp152KnunKvCBgFQX96zuASSH6FBY9KVTX1bifPCLUWarq9EaN"
],
"transaction_json":{
"source_address":"adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd",
"nonce":18,
"fee_limit":10000000000,
"gas_price":1000,
"operations":[
{
"set_privilege":
{
"master_weight": "10",
"signers":[
{
"address":
"adxSkrEvPm1dss4HVNu6wK3s5UCSJi8mtttc7",
"weight": 8
}
],
"tx_threshold": "2",
"type_thresholds":[
{
"type": 1,
"threshold": 8
},
{
"type": 2,
"threshold": 9
}
]
},
"type": 9
}
]
}
}
]
}' http://{url}/submitTransaction

请求参数说明:

字段名类型描述
master_weightStringoptional,字符串类型,default "",表示该账号的 master 权重。 "" :不设置该值;"0": 设置 master 权重为 0;("0", "MAX(UINT32)"]:设置权重值为该值;其他:非法。
signers[].addressString需要操作的 signer 地址,符合地址校验规则。
signers[].weightIntoptional,default 0。0 :删除该 signer; (0, MAX(UINT32)]:设置权重值为该值,其他:非法
tx_thresholdStringoptional,字符串类型, default "",表示该账号的最低权限。"",不设置该值;"0": 设置 tx_threshold 权重为 0;("0", "MAX(INT64)"]:设置权重值为该值;其他:非法。
type_thresholds[].typeInt表示某种类型的操作 (0, 100]
type_thresholds[].thresholdIntoptional,default 0。 0 :删除该类型操作;(0, MAX(INT64)]:设置权重值为该值;其他:非法

11.6. 转移gas交易

源账号将一定数量的gas转给目标账号,当目标账号是合约账号时,调用合约main接口。

HTTP请求示例:

curl -d '{
"items":[
{
"private_keys":[
"privbtBp152KnunKvCBgFQX96zuASSH6FBY9KVTX1bifPCLUWarq9EaN"
],
"transaction_json":{
"source_address":"adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd",
"nonce":18,
"fee_limit":10000000000,
"gas_price":1000,
"operations":[
{
"type":7, // 操作码,固定值
"pay_coin":{
"dest_address":"adxSXmVaTseEx7yuGPufL5gYFf96WKtbMG2Eo",
"amount":10000000,
"input":""
}
}
]
}
}
]
}' http://{url}/submitTransaction

请求参数说明:

字段名类型描述
private_keysString[]必填,源账号的私钥。
source_addressString必填,交易源账号,即交易发起方的账号。
nonceInt必填,值必须为源账号当前nonce值加1。通过[查询账号](#8.3. 查询账号)API查询,若查询结果没有nonce字段,则当前nonce值为0。
fee_limitInt必填,愿为交易花费的手续费。
gas_priceInt必填,gas价格(不小于配置的最低值)。
dest_addressString必填,接收方账号地址。
amountInt必填,转移gas的数量。
inputString选填,触发合约调用的入参,给普通账户转移gas时不需要填写。如果用户未输入,默认为空字符串。

11.7. 记录日志

写数据到区块链中。

HTTP请求示例:

curl -d '{
"items":[
{
"private_keys":[
"privbtBp152KnunKvCBgFQX96zuASSH6FBY9KVTX1bifPCLUWarq9EaN"
],
"transaction_json":{
"source_address":"adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd",
"nonce":14,
"fee_limit":10000000000,
"gas_price":1000,
"operations":[
{
"type": 8,
"log": {
"topic": "hello",
"datas":[
"hello, log 1",
"hello, log 2"
]
}
}
]
}
}
]
}' http://{url}/submitTransaction

请求参数说明:

字段名类型描述
private_keysString[]必填,源账号的私钥。
source_addressString必填,交易源账号,即交易发起方的账号。
nonceInt必填,值必须为源账号当前nonce值加1。通过[查询账号](#8.3. 查询账号)API查询,若查询结果没有nonce字段,则当前nonce值为0。
fee_limitInt必填,愿为交易花费的手续费。
gas_priceInt必填,gas价格(不小于配置的最低值)。
topicString必填,日志主题,必须为字符串类型,参数长度(0,128]
datasString[]选填,日志内容,以数组方式存储的字符串,每个元素长度(0,1024]

11.8. 升级合约

合约拥有者升级合约代码。

HTTP请求示例:

curl -d '{
"items":[
{
"private_keys":[
"privbtBp152KnunKvCBgFQX96zuASSH6FBY9KVTX1bifPCLUWarq9EaN"
],
"transaction_json":{
"source_address":"adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd",
"nonce":15,
"fee_limit":10000000000,
"gas_price":1000,
"operations":[
{
"type": 10,
"upgrade_contract": {
"dest_address": "adxSTD84fMmppxGLbtWD3ASMjtBjjN8kp4MMx",
"s_payload": true,
"payload": "\"use strict\";",
"s_owner": true,
"owner": "adxSp1X4V7hXDDRBKHL6U21CpbPhki7YqjuUd"
}
}
]
}
}
]
}' http://{url}/submitTransaction

请求参数说明:

字段名类型描述
private_keysString[]必填,源账号的私钥。
source_addressString必填,交易源账号,即交易发起方的账号。
nonceInt必填,值必须为源账号当前nonce值加1。通过[查询账号](#8.3. 查询账号)API查询,若查询结果没有nonce字段,则当前nonce值为0。
fee_limitInt必填,愿为交易花费的手续费。
gas_priceInt必填,gas价格(不小于配置的最低值)。
dest_addressString必填,目标合约账户地址。
s_payloadBool必填,设置是否升级合约的标志位, true or false
payloadString选填,要升级的合约代码。
s_ownerBool必填,设置是否升级拥有者的标志位, true or false
ownerString选填,源账号是合约的拥有者。合约的拥有者,空的时候不升级合约owner,空的时候合约无法升级。

12. 错误码

当HTTP请求执行失败时,返回错误码和错误信息:

字段名类型描述
error_codeInt错误码,大概的错误分类
error_descString一般能从错误描述准确发现错误具体信息
  • 错误码列表:
error_code枚举名error_desc
0ERRCODE_SUCCESS操作成功
1ERRCODE_INTERNAL_ERROR服务内部错误
2ERRCODE_INVALID_PARAMETER参数错误
3ERRCODE_ALREADY_EXIST对象已存在, 如重复提交交易
4ERRCODE_NOT_EXIST对象不存在,如查询不到账号、TX、区块等
5ERRCODE_TX_TIMEOUTTX 超时,指该 TX 已经被当前节点从 TX 缓存队列去掉,但并不代表这个一定不能被执行
6ERRCODE_ACCESS_DENIED账户被冻结,不能发送交易,不能作为pay_coin和pay_asset的目标地址
7ERRCODE_MATH_OVERFLOW数学计算溢出
20ERRCODE_EXPR_CONDITION_RESULT_FALSE指表达式执行结果为 false,意味着该 TX 当前没有执行成功,但这并不代表在以后的区块不能成功
21ERRCODE_EXPR_CONDITION_SYNTAX_ERROR指表达式语法分析错误,代表该 TX 一定会失败
90ERRCODE_INVALID_PUBKEY公钥非法
91ERRCODE_INVALID_PRIKEY私钥非法
92ERRCODE_ASSET_INVALID无效的资产
93ERRCODE_INVALID_SIGNATURE签名权重不够,达不到操作的门限值
94ERRCODE_INVALID_ADDRESS地址非法
97ERRCODE_MISSING_OPERATIONS交易缺失操作
98ERRCODE_TOO_MANY_OPERATIONS单笔交易内超过了100个操作
99ERRCODE_BAD_SEQUENCE交易序号错误,nonce错误
100ERRCODE_ACCOUNT_LOW_RESERVE余额不足
101ERRCODE_ACCOUNT_SOURCEDEST_EQUAL源和目的账号相等
102ERRCODE_ACCOUNT_DEST_EXIST创建账号操作,目标账号已存在
103ERRCODE_ACCOUNT_NOT_EXIST账户不存在
104ERRCODE_ACCOUNT_ASSET_LOW_RESERVE支付操作,资产余额不足
105ERRCODE_ACCOUNT_ASSET_AMOUNT_TOO_LARGE资产数量过大,超出了int64的范围
106ERRCODE_ACCOUNT_INIT_LOW_RESERVE创建账号初始化资金不足
111ERRCODE_FEE_NOT_ENOUGH费用不足
112ERRCODE_FEE_INVALID费用值非法
114ERRCODE_OUT_OF_TXCACHETX 缓存队列已满
120ERRCODE_WEIGHT_NOT_VALID权重值不在有效范围内
121ERRCODE_THRESHOLD_NOT_VALID门限值不在有效范围内
144ERRCODE_INVALID_DATAVERSIONmetadata的version版本号不与已有的匹配(一个版本化的数据库)
146ERRCODE_TX_SIZE_TOO_BIG交易数据超出上限
151ERRCODE_CONTRACT_EXECUTE_FAIL合约执行失败
152ERRCODE_CONTRACT_SYNTAX_ERROR合约语法分析失败
153ERRCODE_CONTRACT_TOO_MANY_RECURSION合约递归深度超出上限
154ERRCODE_CONTRACT_TOO_MANY_TRANSACTIONS合约产生的交易超出上限
155ERRCODE_CONTRACT_EXECUTE_EXPIRED合约执行超时
156ERRCODE_INVALID_CONTRACT目标账户不是合约账户
157ERRCODE_INVALID_CONTRACT_OWNER合约账户没有owner,不能升级合约
160ERRCODE_TX_INSERT_QUEUE_FAIL插入交易缓存队列失败