API 参考
每个 Neo-CLI 节点都可选的提供了一套 API 接口,用于从该节点获取区块链数据,使得开发区块链应用变得十分方便。接口通过 JSON-RPC 的方式提供,底层使用 HTTP/HTTPS 协议进行通讯。
要启用 RPC服务,你需要安装 RpcServer 插件,可参考 安装插件 进行安装。启动 Neo-CLI 时无需添加参数。
note
如果安装时找不到对应版本的文件,则表示当前未发布对应版本的 RpcServer 插件,开发者可以自行编译 neo-modules 项目:
- 在 neo-cli.dll 所在的目录新建 Plugins 文件夹
- 将编译后的 RpcServer 文件放到 Plugins 文件夹中,然后重新启动 Neo-CLI。
#
监听端口JSON-RPC 服务器启动后,会监听 TCP 端口,默认为本地地址(127.0.0.1)的 10332 端口,即
http://127.0.0.1:10332/
如需更改可修改 RpcServer 文件夹中的 config.json 配置文件。
#
命令列表#
区块链方法 | 参数 | 说明 |
---|---|---|
getbestblockhash | 获取当前链中高度最大的区块的散列 | |
getblock | \<hash \| index> [verbose=0] | 根据指定的哈希或索引,返回对应的区块信息 |
getblockcount | 获取当前链中区块的数量 | |
getblockhash | \<index> | 根据指定的索引,返回对应区块的散列值 |
getblockheader | \<hash \| index> [verbose=0] | 根据指定的哈希或索引,返回对应的区块头信息 |
getcommittee | 获取委员会成员公钥列表 | |
getnativecontracts | 获得原生合约的列表 | |
getnextblockvalidators | 获得下个区块的验证人列表 | |
getcontractstate | \<script_hash> | 根据合约脚本散列,查询合约信息 |
getrawmempool | [shouldGetUnverified=0] | 获取内存中已确认的交易列表,如果参数为1,则获取内存中所有的交易列表(包括已确认和未确认交易) |
getrawtransaction | \<txid> [verbose=0] | 根据指定的散列值,返回对应的交易信息 |
getstorage | \<script_hash> \<key> | 根据合约脚本散列和存储的 key,返回存储的 value |
gettransactionheight | \<txid> | 根据交易哈希获取交易所在的区块高度 |
#
节点方法 | 参数 | 说明 |
---|---|---|
getconnectioncount | 获取节点当前的连接数 | |
getpeers | 获得节点当前已连接/未连接的节点列表 | |
getversion | 获取节点的版本信息 | |
sendrawtransaction | \<hex> | 广播交易 |
submitblock | \<hex> | 提交新的区块 注意:需要成为共识节点 |
#
智能合约方法 | 参数 | 说明 |
---|---|---|
getunclaimedgas | \<address> | 查询指定地址未获取的 gas |
invokefunction | \<script_hash> \<operation> [params] [sender] [signers] | 用指定的哈希调用智能合约,传入方法名及参数 |
invokescript | \<script> [sender] [signers] | 通过虚拟机运行脚本并返回结果 |
#
工具方法 | 参数 | 说明 |
---|---|---|
listplugins | 列出节点已加载的所有插件 | |
validateaddress | \<address> | 验证地址是否是正确的 Neo 地址 |
#
钱包方法 | 参数 | 说明 |
---|---|---|
calculatenetworkfee | \<key> | 计算指定交易的网络费GasToken |
closewallet | 关闭当前打开着的钱包 | |
dumpprivkey | \<address> | 导出指定地址的私钥 |
getnewaddress | 创建一个新的地址 | |
getwalletbalance | \<asset_id> | 查询资产余额 |
getwalletunclaimedgas | 显示钱包中未提取的 GasToken 数量 | |
importprivkey | \<key> | 导入私钥到钱包 |
invokecontractverify | \<script_hash> [params] [signers] | 调用合约的验证方法 |
listaddress | 列出当前钱包内的所有地址 | |
openwallet | \<path> \<password> | 打开指定钱包,为了安全该方法默认禁用 |
sendfrom | \<asset_id>``\<from>``\<to>``\<value> | 从指定地址,向指定地址转账 |
sendmany | \<outputs_array> [signers] | 在一笔交易中向多个地址发起多笔转账 |
sendtoaddress | \<asset_id>``\<address>``\<value> [signers] | 向指定地址转账 |
#
ApplicationLogs 插件方法 | 参数 | 说明 |
---|---|---|
getapplicationlog | \<txid> | 根据交易 txid 获取合约的事件信息 |
#
TokensTracker 插件方法 | 参数 | 说明 |
---|---|---|
getnep11balances | \<address> | 返回指定地址内的所有 NEP11 资产余额 |
getnep11properties | \<contract_hash>``\<tokenId> | 返回 NEP-11 资产的自定义属性 |
getnep11transfers | \<address> [timestamp] | 返回指定地址内的所有 NEP11 交易记录 |
getnep17balances | \<address> | 返回指定地址内的所有 NEP17 资产余额 |
getnep17transfers | \<address> [timestamp] | 返回指定地址内的所有 NEP17 交易记录 |
#
StateService 插件方法 | 参数 | 说明 |
---|---|---|
getstateroot | \<index> | 通过高度查询 state root。 |
getproof | \<roothash>``\<scripthash>``\<key> | 通过 root hash,合约 hash 和 storage key 查询得到 proof。 |
verifyproof | \<roothash>``\<proof> | 使用 root hash 和 proof 进行验证,得到 key 对应存储区的值。 |
getstateheight | 查询 stateroot 高度。 | |
getstate | \<roothash>``\<scripthash>``\<key> | 通过 root hash,合约 hash 和 storage key 查询 state。 |
findstates | \<roothash>``\<scripthash>``\<prefix> [key][count] | 通过 root hash,合约 hash 和 storage key 的前缀查询 state。 |
note
RPC 中所有的金额(手续费、NEP-17 余额、钱包余额、转账金额等)相关的返回值均为无符号整数,通过 RpcClient(C# 轻节点 SDK) 请求时会自动根据资产精度自动换算。若开发者自行编写代码请求,则需要手动对返回值的精度进行处理。例如,返回值为 1234560,资产精度为 8,则实际金额为 0.0123456。
#
GET 请求示例一次典型的 JSON-RPC GET 请求格式如下:
下面以获取当前链中区块的数量方法为例。
请求 URL:
http://127.0.0.1:10332?jsonrpc=2.0&method=getblockcount¶ms=[]&id=1
发送请求后,将会得到如下的响应:
{ "jsonrpc": "2.0", "id": 1, "result": 909129}
#
POST 请求示例一次典型的 JSON-RPC Post 请求的格式如下:
下面以获取当前链中区块的数量方法为例。
请求 URL:
http://127.0.0.1:10332
请求 Body:
{ "jsonrpc": "2.0", "method": "getblockcount", "params": [], "id": 1}
发送请求后,将会得到如下的响应:
{ "jsonrpc": "2.0", "id": 1, "result": 909122}
note
请将区块同步到最新高度后再使用 API,否则返回的结果可能不是最新的。
#
测试工具你可以用 Postman 来方便地进行测试,下面是测试截图: