Skip to main content

API Reference

Each NEO-CLI node provides an API interface for obtaining blockchain data from it, making it easy to develop blockchain applications. The interface is provided via JSON-RPC, and the underlying protocol uses HTTP/HTTPS for communication.

To start a node that provides an RPC service, you must install the plugin RpcServer. Refer to Installing plugins for instructions. No need to add an argument when starting Neo-CLI.

note

If the desired version of file is not found during installation, it is because the corresponding version of RpcServer plug-in has not been released yet. In that case, you can compile the project neo-modules by yourself:

  1. Create the folder Plugins under the directory where neo-cli.dll locates.
  2. Put the RpcServer file you has complied in the Plugins folder and then restart Neo-CLI.

Listening ports#

After the JSON-RPC server is started, it will listen to the TCP port. By default it is the port 10332 of the local address (127.0.0.1), which is

http://127.0.0.1:10332/

You can modify the port in config.json in the RpcServer folder.

Command Lists#

Blockchain#

MethodParameterDescription
getbestblockhashGets the hash of the latest block in the blockchain.
getblock<hash | index> [verbose=0]Returns the block information with the specified hash value or index.
getblockcountGets the block count of the blockchain.
getblockhash<index>Returns the block hash with the specified index.
getblockheader<hash | index> [verbose=0]Returns the information of the block header with the specified script hash or index.
getcommitteeGets the public key list of current Neo committee members.
getnativecontractsGets the list of native contracts.
getnextblockvalidatorsGets the validators list of the next block.
getcontractstate<script_hash>Returns information of the contract with the specified script hash.
getrawmempool[shouldGetUnverified=0]Gets a list of confirmed transactions in memory. If the value is 1 it gets all the transactions including both confirmed and unconfirmed transactions.
getrawtransaction<txid> [verbose=0]Returns the transaction information with the specified hash value.
getstorage<script_hash> <key>Returns the value with the contract script hash and the key.
gettransactionheight<txid>Returns the transaction height with the specified transaction hash.

Node#

MethodParameterDescription
getconnectioncountGets the current connection count of the node.
getpeersGets a list of nodes that are currently connected/disconnected by this node.
getversionGets the version information of the node.
sendrawtransaction<hex>Broadcasts a transaction over the network.
submitblock<hex>Submits a new block to the network.<br/>Note: Need to be a validator

Smart Contract#

MethodParameterDescription
getunclaimedgas<address>Get unclaimed gas of the specified address.
invokefunction<script_hash> <operation> [params] [sender] [signers]Invokes a smart contract with the specified script hash, passing in the method name and its params.
invokescript<script> [sender] [signers]Runs a script through the virtual machine and returns the results.

Tool#

MethodParameterDescription
listpluginsReturns a list of plugins loaded by the node.
validateaddress<address>Verifies whether the address is a valid NEO address.

Wallet#

MethodParameterDescription
calculatenetworkfee<tx>Calculates network fee for the specified transaction.
closewalletCloses the current wallet.
dumpprivkey<address>Exports the private key of the specified address.
getnewaddressCreates a new address.
getwalletbalance<asset_id>Returns the balance of the corresponding asset in the wallet.
getwalletunclaimedgasGets the amount of unclaimed GAS in the wallet.
importprivkey<key>Imports the private key to the wallet.
invokecontractverify<script_hash> [params] [signers]Invokes the verification method of contract.
listaddressLists all the addresses in the current wallet.
openwallet<path> <password>Opens the specified wallet.
sendfrom<asset_id><from><to><value>Transfers from the specified address to the destination address.
sendmany<outputs_array> [signers]Initiates multiple transfers to multiple addresses in a transaction.
sendtoaddress<asset_id><address><value> [signers]Transfers to the specified address.

ApplicationLogs plugin#

MethodParameterDescription
getapplicationlog<txid>Returns the contract event information based on the specified txid.

TokensTracker plugin#

MethodParameterDescription
getnep11balances<address>Returns the balance of all NEP11 assets in the specified address.
getnep11properties<contract_hash><tokenId>Returns the customized properties of NEP-11 assets.
getnep11transfers<address>[timestamp]Returns all the NEP11 transaction information occurred in the specified address.
getnep17balances<address>Returns the balance of all NEP17 assets in the specified address.
getnep17transfers<address>[timestamp]Returns all the NEP17 transaction information occurred in the specified address.

StateService plugin#

MethodParameterDescription
getstateroot<index>Queries the state root by the block height.
getproof<roothash><scripthash><key>Gets proof by querying root hash, contract hash, and storage key.
verifyproof<roothash><proof>Verifies using the root hash and proof, and gets the value of the storage corresponding to the key.
getstateheightQueries the stateroot height.
getstate<roothash><scripthash><key>Queries state with the root hash, contract hash and storage key.
findstates<roothash><scripthash><prefix> [key][count]Queries state with the prefix of root hash, contract hash and storage key.
note

For RPC API, all the return values related to the amount such as fees, NEP-17 asset balance, wallet balance, transfer amount, etc. are unsigned integer, which are automatically converted according to the asset decimal when requested by RpcClient (C# light node SDK). If you write the request by yourselves, you need to convert the amount manually. For example, if the return value is 1234560 and the asset decimal is 8, the actual amount is 0.0123456.

GET request example#

The format of a typical JSON-RPC GET request is as follows:

Here is an example of how to get the number of blocks in the block chain.

Request URL:

http://127.0.0.1:10332?jsonrpc=2.0&method=getblockcount&params=[]&id=1

After sending the request, you will get the following response:

{  "jsonrpc": "2.0",  "id": 1,  "result": 909129}

POST request example#

The format of a typical JSON-RPC Post request is as follows:

Here is an example of how to get the number of blocks in the block chain.

Request URL:

http://127.0.0.1:10332

Request Body:

{  "jsonrpc": "2.0",  "method": "getblockcount",  "params":[],  "id": 1}

After sending the request, you will get the following response:

{  "jsonrpc": "2.0",  "id": 1,  "result": 909122}
note

To make sure you get the latest result synchronize your client to the latest block height before you use the API.

Test tools#

You can use the Chrome extension in Postman to facilitate the test (Installation of the Chrome extension requires Internet connection). A test screenshot is shown below:

image

See also#

C# JSON-RPC Command List