2. 接口设计
Hyperchain接口主要由六块接口组成: 1. 交易服务,方法名前缀为 "tx"
; 2. 合约服务,方法名前缀为 "contract"
; 3. 区块服务,方法名前缀为 "block"
; 4. 消息订阅服务,方法名前缀为 "sub"
; 5. 节点服务,方法名前缀为 "node"
; 6. 证书服务,方法名前缀为 "cert"
;
接口设计基于JSON-RPC 2.0规范。所有HTTP请求均为POST请求,请求的参数包括:
jsonrpc
: 指定JSON-RPC协议版本的字符串,如果是2.0版本,则必须准确写为 “2.0”。namespace
: 表示该条请求发送给哪个分区去处理。method
: 表示所要调用方法名称的字符串,格式为:(服务前缀)_(方法名)。params
: 调用方法所需要的结构化参数值,该成员参数可以被省略。id
: 已建立客户端的唯一标识id,该值必须包含一个字符串、数值。
- # Request
- curl -X POST -d '{"jsonrpc":"2.0","method":"block_latestBlock","namespace":"global","params":[],"id":1}' localhost:8081
返回值格式为:
jsonrpc
: 指定JSON-RPC协议版本的字符串,如果是2.0版本,则必须准确写为 “2.0”。namespace
: 表示该条请求所属分区。code
: 状态码。若成功,则为0,其他状态码详见表5-1。message
: 错误信息。若成功,则为“SUCCESS”,否则为错误详细信息。result
: 被调用方法成功执行返回的结果。id
: 该值应与请求对象中的id值保持一致。
- # Response
- {
- "jsonrpc": "2.0",
- "namespace": "global",
- "id": 1,
- "code": 0,
- "message": "SUCCESS",
- "result": {
- "version": "1.4",
- "number": "0x3",
- "hash": "0x00acc3e13d8124fe799d55d7d2af06223148dc7bbc723718bb1a88fead34c914",
- "parentHash": "0x2b709670922de0dda68926f96cffbe48c980c4325d416dab62b4be27fd73cee9",
- "writeTime": 1481778653997475900,
- "avgTime": "0x2",
- "txcounts": "0x1",
- "merkleRoot": "0xc6fb0054aa90f3bfc78fe79cc459f7c7f268af7eef23bd4d8fc85204cb00ab6c",
- "transactions": [
- {
- "version": "1.4",
- "hash": "0xf57a6443d08cda4a3dfb8083804b6334d17d7af51c94a5f98ed67179b59169ae",
- "blockNumber": "0x3",
- "blockHash": "0x00acc3e13d8124fe799d55d7d2af06223148dc7bbc723718bb1a88fead34c914",
- "txIndex": "0x0",
- "from": "0x17d806c92fa941b4b7a8ffffc58fa2f297a3bffc",
- "to": "0xaeccd2fd1118334402c5de1cb014a9c192c498df",
- "amount": "0x0",
- "timestamp": 1481778652973000000,
- "nonce": 3573634504790373,
- "extra": "",
- "executeTime": "0x2",
- "payload": "0x81053a70000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000001c8"
- }
- ]
- }
- }
比如,接口调用成功的话,返回的字段有:jsonrpc、namespace、id、code、message、result,且code值为0,message值为“SUCCESS”,用户可通过这两个字段的值来判断接口调用是否成功,若调用失败,则code为非0值,message为错误信息。code值的定义如下:
code | 含义 |
---|---|
0 | 请求成功 |
-32700 | 服务端接收到无效的json。该错误发送于服务器尝试解析json文本 |
-32600 | 无效的请求(比如非法的JSON格式) |
-32601 | 方法不存在或者无效 |
-32602 | 无效的方法参数 |
-32603 | JSON-RPC内部错误 |
-32000 | Hyperchain内部错误或者空指针或者节点未安装solidity环境 |
-32001 | 查询的数据不存在 |
-32002 | 余额不足 |
-32003 | 签名非法 |
-32004 | 合约部署出错 |
-32005 | 合约调用出错 |
-32006 | 系统繁忙 |
-32007 | 交易重复 |
-32008 | 合约操作权限不够 |
-32009 | (合约)账户不存在 |
-32010 | namespace不存在 |
-32011 | 账本上无区块产生,查询最新区块的时候可能抛出该错误 |
-32012 | 订阅不存在 (预留状态码) |
-32013 | 数据归档、快照相关错误 |
-32098 | 请求未带cert或者错误cert导致认证失败 |
-32099 | 请求tcert失败 |
当前内容版权归 Hyperchain 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 Hyperchain .