联盟链RPC介绍

RPC是指联盟链对外的rpc接口,开发人员可利用这些接口获取联盟链的数据。当前 SSN 和SSB都有RPC接口。 开发人员可直接利用这些接口做二次开发。

另外两种 ConsoleSDK 的开发模式,将在本章其他节介绍。

启动RPC的方式


启动SSB RPC的方式

联盟链部署 中,SSB的启动方式如下

super-solid-base --verbosity=4, --rpc, --networkid=1510, --datadir=./path/to/chaindata,
--rpcaddr=0.0.0.0, --rpcport=8545, --rpcapi=chain3,mc,net,db

其中,–rpc、–rpcaddr和–rpcport就是指明RPC启动的三个参数,开发人员可选择为需要RPC服务的SSB加上这三个启动参数。

启动SSN RPC的方式

同样,在 联盟链部署 中,SSN的启动方式如下

super-solid-node --rpc --rpcaddr 0.0.0.0 --rpcport 8546 --p2pport 30383

同样,可选择以上三个参数来为SSN开启RPC服务。

SSN RPC命令汇总

联盟链主要是在SSN上进行二次开发,在开启SSN RPC服务后,即可用以下常用的RPC服务。

假设当前rpcaddr=127.0.0.1,rpcport=8546。


mh

getSSNId: 获取SSN节点id

sendRawTransaction: 发送已加签好的交易

accounts:获取SSN节点已创建地址列表

sign:以特殊前缀加签

signTransaction:交易加签

sendTransaction:以未加签方式发送交易

anyCall:调用联盟链已部署合约方法,如何部署联盟链合约,请参见

getBalance:获取联盟链账号余额

getBlock:获取联盟链某一区块信息

getBlockList:获取联盟链某段区块信息

getBlockNumber:获取联盟链区块高度

getContractAddrList:获取联盟链已注册合约列表

getNonce:获得对应账号在联盟链中的Nonce

getReceiptByHash:通过交易hash获取联盟链的tx执行结果

getReceiptByNonce:通过账号和Nonce获取联盟链的tx执行结果

getTransactionByHash:通过交易HASH获取联盟链的交易信息

getTransactionByNonce:通过账号和Nonce获取联盟链的交易信息

syncing:获取联盟链节点同步信息

getBlockThreshold:获取联盟链下次续费块高度



接口:mh.getSSNId
描述:获取SSN节点id
输入参数:
返回:
  • SSN 地址

示例:

// Request
curl -X POST --data '{"jsonrpc":"2.0","id":0,"method":"mh_getSSNId","params":[]}' http://127.0.0.1:8546/rpc

// Result
{"jsonrpc":"2.0","id":0,"result":"0xe569b8d860ae0b9......fd66eb24a78de3fed"}

接口:mh.sendRawTransaction
描述:发送已加签好的交易
输入参数:
  • 加签交易数据
返回:
  • 交易hash

示例:

curl -X POST --data '{"jsonrpc":"2.0","id":0,"method":"mh_sendRawTransaction","params":["0xf8698080808094......ded65da7ff5426d4de44fd634cff969169617c4dca01"]}' http://127.0.0.1:8546/rpc

// Result
{"jsonrpc":"2.0","id":0,"result":"0x039ace1656a1e2300aadcc......014ae9b605bcf0dc4c991db2faefeb201e"}

接口:mh.accounts
描述:获取SSN节点已创建地址列表
输入参数:
返回:
  • SSN 地址列表集

示例:

// Request
curl -X POST --data '{"jsonrpc":"2.0","id":0,"method":"mh_accounts","params":[]}' http://127.0.0.1:8546/rpc

// Result
{"jsonrpc":"2.0","id":0,"result":["0xe569b8d8......eb24a78de3fed","0x7f5440ce55db40......0b06d79defc87c7c","0xc4c17b......038af9a2d98309cd81f42b67"]}

接口:mh.sign
描述:

以特定前缀签名,通过向消息添加前缀,可以将计算得到的签名识别为moheng特定的签名。这可以防止恶意的DApp对任意数据(如事务)进行签名,并使用签名冒充受害者。注意要签名的地址必须解锁。

输入参数:
  • 加签账号地址
  • 加签明文数据
返回:
  • 签名结果

示例:

// Request
curl -X POST --data '{"jsonrpc":"2.0","id":0,"method":"mh_sign","params":["0x7f5440ce55db4.......c0b06d79defc87c7c", "0xf869808080809......04d754ab038af9a2d98309cd8f"]}' http://127.0.0.1:8546/rpc

// Result
{"jsonrpc":"2.0","id":0,"result":"0x065529a4b5f86ceacff00e10fe18279ba0bd870d2fbab84a0731285deeb4......105ead228cad3991f0ec020b82071b"}

接口:mh.signTransaction
描述:对交易进行加签,注意要签名的地址必须解锁。
输入参数:
  • from:交易发送账号地址,也是交易加签地址
  • to:交易指向的账号地址,部署合约交易不填写
  • value:交易转出的货币数量,
  • data:加签数据
  • nonce :交易nonce ,可不填
返回:
  • raw: 交易加签结果

示例:

// Request
curl -X POST --data '{"jsonrpc":"2.0","id":0,"method":"mh_signTransaction","params":[{"from":"0x7f5440ce55......c3ec0b06d79defc87c7c", "to":"0xc4c17b9e04......2d98309cd81f42b67", "value":"0xDE0B6B3A7640000"}]}' http://127.0.0.1:8546/rpc

// Result
{"jsonrpc":"2.0","id":0,"result":{"raw":"0xf8690180808094c4c17b9e04d......cd4edc2f1b","tx":{"TxData":{"nonce":1,"syscnt":0,"gasPrice":0,"gas":0,"to":"0xc4c17b9e04......af9a2d98309cd81f42b67","value":1000000000000000000,"input":null,"shardingFlag":0,"via":null,"v":240,"r":898862982657692024547......9182641849803035800591990157411498310,"s":507781054392481032685727479435646309......2747609317939843294788595483,"hash":null},"DirCallSent":false}}}

接口:mh.sendTransaction
描述:发送未加签的交易,注意要签名的地址必须解锁。
输入参数:
  • from:交易发送账号地址,也是交易加签地址
  • to:交易指向的账号地址,部署合约交易不填写
  • value:交易转出的货币数量,
  • data:交易数据
  • nonce :交易nonce ,可不填
返回:
  • 交易hash

示例:

// Request
curl -X POST --data '{"jsonrpc":"2.0","id":0,"method":"mh_sendTransaction","params":[{"from":"0x7f5440ce55db403e......b06d79defc87c7c", "to":"0xc4c17b9e04d......d98309cd81f42b67", "value":"0xDE0B6B3A7640000"}]}' http://127.0.0.1:8546/rpc

// Result
{"jsonrpc":"2.0","id":0,"result":"0x8c6b2a2c1392839d04223bc3......c7c70e4ebf62abee024a04f47f"}

接口:mh.anyCall
描述:获取SSN合约函数的返回值,调用此接口前必须将合约注册入dappbase
输入参数:
  • Sender:查询账号
  • DappAddr:联盟链业务逻辑地址
  • Params: 第一个参数是调用的方法,之后是方法传入参数
返回:
  • 函数返回值

示例:

// Request
curl -X POST --data '{"jsonrpc":"2.0","id":0,"method":"mh_anyCall","params":[{"DappAddr":"0x974c37d2b3a7......b94285cf5126512a", "Params":["coinName"]}]}' http://127.0.0.1:8546/rpc

// Result
{"jsonrpc":"2.0","id":0,"result":"\"test coin\""}

接口:mh.getBalance
描述:获得对应账号在联盟链中的货币余额。
输入参数:
  • 账号地址
返回:
  • 账号余额,精度18,十六进制

示例:

// Request
curl -X POST --data '{"jsonrpc":"2.0","id":0,"method":"mh_getBalance","params":["0x7f5440ce55db40......d79defc87c7c"]}' http://127.0.0.1:8546/rpc

// Result
{"jsonrpc":"2.0","id":0,"result":"0x21dfe1f5c5363780000"}

接口:mh.getBlock
描述:获得联盟链某一区块信息。
输入参数:
  • 块号,十六进制

示例:

// Request
curl -X POST --data '{"jsonrpc":"2.0","id":0,"method":"mh_getBlock","params":["0x3"]}' http://127.0.0.1:8546/rpc

// Result
{"jsonrpc":"2.0","id":0,"result":{"extraData":"0x18bcb765b41fdc06478c......8d8f09f17f63f1c803","hash":"0x558c038641ca32fe003d6......891571043b53665134cc28542952e7","miner":"0x44268c92ec660......ff1bfcbf9dfd14276c1","number":"0x3","parentHash":"0x2871f7a292b6b433183f2ee867......ca8bcb5b31eba01b054","receiptsRoot":"0x56e81f171bcc55a6ff8345e692c0f86e5......c001622fb5e363b421","stateRoot":"0x5e7b9dc44d4bbe962c1f9c......620ef1c484022a1a69e0a4b","timestamp":"0x5e85821c","transactions":[],"transactionsRoot":"0x56e81f171bcc5......e5b48e01b996cadc001622fb5e363b421"}}

接口:mh.getBlockList
描述:获取联盟链某一区间内的区块信息。
输入参数:
  • 起始块号,十六进制
  • 结束块号,十六进制

示例:

// Request
curl -X POST --data '{"jsonrpc":"2.0","id":0,"method":"mh_getBlockList","params":["0x3","0x4"]}' http://127.0.0.1:8546/rpc

// Result
{"jsonrpc":"2.0","id":0,"result":{"blockList":[{"extraData":"0x18bcb765b41fdc06478c9da......17f63f1c803","hash":"0x558c038641ca32fe003......43b53665134cc28542952e7","miner":"0x44268c92e......bfcbf9dfd14276c1","number":"0x3","parentHash":"0x2871f7a2......58ca8bcb5b31eba01b054","receiptsRoot":"0x56e81......b996cadc001622fb5e363b421","stateRoot":"0x5e7b9dc44......7d86620ef1c484022a1a69e0a4b","timestamp":"0x5e85821c","transactions":[],"transactionsRoot":"0x56e81f171bcc5......adc001622fb5e363b421"},{"extraData":"0x46c74da4d4d62e......8724fc009d3b07","hash":"0x42d510......b0f9bb05e2085d2c07ac15caf90","miner":"0xe569b8d860......66eb24a78de3fed","number":"0x4","parentHash":"0x558c038641ca32fe003d6d......134cc28542952e7","receiptsRoot":"0x56e81f171bcc55a6......dc001622fb5e363b421","stateRoot":"0x5e7b9dc4......f1c484022a1a69e0a4b","timestamp":"0x5e858226","transactions":[],"transactionsRoot":"0x56e81f171bcc......001622fb5e363b421"}],"endBlk":"0x4","startBlk":"0x3"}}

接口:mh.getBlockNumber
描述:获得当前联盟链的区块高度。

:输入参数:无

:返回:当前区块高度,十六进制

示例:

// Request
curl -X POST --data '{"jsonrpc":"2.0","id":0,"method":"mh_getBlockNumber","params":[]}' http://127.0.0.1:8546/rpc

// Result
{"jsonrpc":"2.0","id":0,"result":"0x33f"}

接口:mh.getContractAddrList
描述:

获取联盟链内所有已注册合约的地址列表,需要已部署的合约在dappbase中调用registerDapp方法后才能生效,具体方法请参见

:输入参数:无

:返回:合约地址列表,第一个是dappbase地址,之后是已注册合约地址

示例:

// Request
curl -X POST --data '{"jsonrpc":"2.0","id":0,"method":"mh_getContractAddrList","params":[]}' http://127.0.0.1:8546/rpc

// Result
{"jsonrpc":"2.0","id":0,"result":["0x974c37d2b......285cf5126512a"]}

接口:mh.getNonce
描述:获得对应账号在联盟链中的Nonce,这是调用联盟链DAPP合约的必要参数之一,每当联盟链交易发送后会自动加1
  • 账号地址

:返回:该账号Nonce

示例:

// Request
curl -X POST --data '{"jsonrpc":"2.0","id":0,"method":"mh_getNonce","params":["0x7f5440ce55db......6d79defc87c7c"]}' http://127.0.0.1:8546/rpc

// Result
{"jsonrpc":"2.0","id":0,"result":2}

接口:mh.getReceiptByHash
描述:通过交易hash获取联盟链的tx执行结果

:输入参数:

  • 账号地址

示例:

// Request
curl -X POST --data '{"jsonrpc":"2.0","id":0,"method":"mh_getReceiptByHash","params":["0x8c6b2a2c1392839d04223bc3abf0b31e588ea3c7c70e4ebf62abee024a04f47f"]}' http://127.0.0.1:8546/rpc

// Result
{"jsonrpc":"2.0","id":0,"result":{"contractAddress":"0x00000000000......0000000000000000","failed":false,"logs":[],"logsBloom":"0x0000000000000000000......000000000000000000000000000","queryInBlock":0,"result":"","transactionHash":"0x8c6b2a2c139......e588ea3c7c70e4ebf62abee024a04f47f"}}

接口:mh.getReceiptByNonce
描述:通过账号和Nonce获取联盟链的tx执行结果
输入参数:
  • 账号地址
  • Nonce

示例:

// Request
curl -X POST --data '{"jsonrpc":"2.0","id":0,"method":"mh_getReceiptByNonce","params":["0x7f5440ce55d......6d79defc87c7c", 1]}' http://127.0.0.1:8546/rpc

// Result
{"jsonrpc":"2.0","id":0,"result":{"contractAddress":"0x00000000......0000000000000000","failed":false,"logs":[],"logsBloom":"0x000000000000000000000000000000000000......00000000000000","queryInBlock":0,"result":"","transactionHash":"0x8c6b2a2c1392839d04223b......7c70e4ebf62abee024a04f47f"}}

接口:mh.getTransactionByHash
描述:通过交易HASH获取联盟链的交易信息
输入参数:
  • 交易哈希

示例:

// Request
curl -X POST --data '{"jsonrpc":"2.0","id":0,"method":"mh_getTransactionByHash","params":["0x8c6b2a2c1392839d......4ebf62abee024a04f47f"]}' http://127.0.0.1:8546/rpc

// Result
{"jsonrpc":"2.0","id":0,"result":{"blockHash":"0x8593bf7ca8fd20f755598c8b......7b6cfcc936e3d98e3dc1","blockNumber":"0x2d0","from":"0x7f5440ce55db40......79defc87c7c","gas":null,"gasPrice":null,"hash":"0x8c6b2a2c139283......4ebf62abee024a04f47f","input":"0x","nonce":"0x1","syscnt":"0x0","to":"0xc4c17b9e04d7......8309cd81f42b67","transactionIndex":"0x0","value":"0xde0b6b3a7640000","v":"0xef","r":"0x1ea4ea0cd20......6bdf87143292b15af1a","s":"0xd8b7411188aabc29e9bec5......5b7be580e17c435f10955569d80d","shardingFlag":"0x0"}}

接口:mh.getTransactionByNonce
描述:通过账号和Nonce获取联盟链的交易信息

:输入参数:

  • 账号地址
  • Nonce

示例:

// Request
curl -X POST --data '{"jsonrpc":"2.0","id":0,"method":"mh_getTransactionByNonce","params":["0x7f5440ce55db......defc87c7c", 1]}' http://127.0.0.1:8546/rpc

// Result
{"jsonrpc":"2.0","id":0,"result":{"blockHash":"0x8593bf7ca8fd20f75......7b6cfcc936e3d98e3dc1","blockNumber":"0x2d0","from":"0x7f5440ce55d......defc87c7c","gas":null,"gasPrice":null,"hash":"0x8c6b2a2c1......bee024a04f47f","input":"0x","nonce":"0x1","syscnt":"0x0","to":"0xc4c17b9e04......a2d98309cd81f42b67","transactionIndex":"0x0","value":"0xde0b6b3a7640000","v":"0xef","r":"0x1ea4ea0cd20658......b72b76f9a5342e6bdf87143292b15af1a","s":"0xd8b7411188aabc29e9bec5bb2......c435f10955569d80d","shardingFlag":"0x0"}}

接口:mh.syncing
描述:获取联盟链节点同步信息

:输入参数:无

返回:
  • 开始块,十六进制
  • 当前块,十六进制
  • 最高块,十六进制

示例:

// Request
curl -X POST --data '{"jsonrpc":"2.0","id":0,"method":"mh_syncing","params":[]}'http://127.0.0.1:8546/rpc

// Result
{"jsonrpc":"2.0","id":0,"result": {startingBlock: '0x384',currentBlock: '0x386',highestBlock: '0x454'}}
// Or when not syncing
{"jsonrpc":"2.0","id":0,"result":false}

接口:mh.getBlockThreshold
描述:获取联盟链下次续费块高度
输入参数:
返回:
  • 当前块号
  • 下次续费高度

示例:

// Request
curl -X POST --data '{"jsonrpc":"2.0","id":0,"method":"mh_getBlockThreshold","params":[]}' http://127.0.0.1:8546/rpc

// Result
{"jsonrpc":"2.0","id":0,"result":{"Current":972,"Threshold":200000}}



txpool

content: 获得联盟链交易池交易的详细信息

inspect: 获得联盟链交易池交易的简要信息

status: 获得联盟链交易池交易的交易数量



接口:txpool.content
描述:获得联盟链交易池交易的详细信息
输入参数:
返回:
  • pending:待打包
  • queued:队列中

示例:

// Request
 curl -X POST --data '{"jsonrpc":"2.0","id":0,"method":"txpool_content","params":[]}' http://127.0.0.1:8546/rpc

 // Result
 {"jsonrpc":"2.0","id":0,"result":{"pending":{"0x7f5440ce55d......B06d79DEfC87C7c":{"2":{"blockHash":"0x000000000000000000000......0000000000000000000000","blockNumber":null,"from":"0x7f5440ce......ec0b06d79defc87c7c","gas":null,"gasPrice":null,"hash":"0xff5d8......8ac013c9e491","input":"0x","nonce":"0x2","syscnt":"0x0","to":"0xc4c17b9e0......81f42b67","transactionIndex":"0x0","value":"0xde0b6b3a7640000","v":"0xef","r":"0x8494dbb7f3af......78f597406de","s":"0x7d25dd2abc4dafe......5e724c9e66cc8c72e901421ba607c5c9606","shardingFlag":"0x0"}}},"queued":{}}}

接口:txpool.inspect
描述:获得联盟链交易池交易的简要信息
输入参数:
返回:
  • pending:待打包
  • queued:队列中

示例:

 // Request
curl -X POST --data '{"jsonrpc":"2.0","id":0,"method":"txpool_inspect","params":[]}' http://127.0.0.1:8546/rpc

// Result
{"jsonrpc":"2.0","id":0,"result":{"pending":{"0x7f5440ce55db4......B06d79DEfC87C7c":{"3":"0xC4c17b9e04d75......Cd81F42B67: 1000000000000000000 sha + 0 × 0 gas"}},"queued":{}}}

接口:txpool.status
描述:获得联盟链交易池交易的交易数量

:输入参数:无

:返回:

  • pending:待打包,十六进制
  • queued:队列中,十六进制

示例:

// Request
curl -X POST --data '{"jsonrpc":"2.0","id":0,"method":"txpool_status","params":[]}' http://127.0.0.1:8546/rpc

// Result
{"jsonrpc":"2.0","id":0,"result":{"pending":"0x1","queued":"0x0"}}



debug

traceTransaction: 获得交易在EVM执行期间创建的结构化日志



接口:debug.traceTransaction
描述:返回交易在EVM执行期间创建的结构化日志,并将它们作为JSON对象返回
输入参数:
  • 交易哈希

示例:

 // Request
curl -X POST --data '{"jsonrpc":"2.0","id":0,"method":"debug_traceTransaction","params":["0x1a0da52d43d4222......4100f7357f0a0128340", "callTracer"]}' http://127.0.0.1:8546/rpc

// Result
{"jsonrpc":"2.0","id":0,"result":"{\"type\":\"CALL\",\"from\":\"0xc2a0423fac6......9bd8560288edc94c00ee\",\"to\":\"0xe5d7da7......94c43a7e16575f18e4b746\",\"value\":\"0x0\",\"gas\":\"0x337be36\",\"gasUsed\":\"0x0\",\"input\":\"0x12df941200000000000000000000......00000000000000000000000000000005e562360\",\"output\":\"0x\",\"time\":\"0s\",\"calls\":[{\"type\":\"CALL\",\"from\":\"0xe5d7da7a37466321......7e16575f18e4b746\",\"to\":\"0xf180041c895a6aa......ea3e20c2cbe\",\"value\":\"0xde0b6b3a7640000\",\"input\":\"0x\"}]}"}