API 参考
每个 Neo-CLI 节点都可选的提供了一套 API 接口,用于从该节点获取区块链数据,使得开发区块链应用变得十分方便。接口通过 JSON-RPC 的方式提供,底层使用 HTTP/HTTPS 协议进行通讯。
要启用 RPC服务,你需要安装 RpcServer 插件 ,可参考 安装插件 进行安装。启动 Neo-CLI 时无需添加参数。
如果安装时找不到对应版本的文件,则表示当前未发布对应版本的 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] | 通过虚拟机运行脚本并返回结果 |
traverseiterator | <session> <iterator id>] <count> | 获取 Iterator 类型数据的具体值 |
工具
方法 | 参数 | 说明 |
---|---|---|
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 | 通过 root hash,合约 hash 和 storage key 的前缀查询 state。 |
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
}
请将区块同步到最新高度后再使用 API,否则返回的结果可能不是最新的。
测试工具
你可以用 Postman 来方便地进行测试,下面是测试截图: