Show / Hide Table of Contents
CLI 命令参考
打开命令行,定位到 Neo-CLI 所在目录,输入以下命令即可启动 Neo 的命令行节点。
dotnet neo-cli.dll
本节将介绍命令行节点的所有命令,你可以通过输入命令操作节点,如创建打开钱包、导入导出私钥、转账、启动共识、部署、调用合约等。
命令概览
以下表格列出了所有 CLI 命令。在命令行中输入 help
也可以查看所有命令。
本文中的命令格式均遵循以下约定:
-
<>
:表示参数
-
[]
:可选参数
-
|
:表示所填的参数可以是其中任意一种
-
=
:表示可选参数在不输入情况下的默认值
控制台命令
命令 | 说明 |
version | 显示当前节点的版本 |
help [plugin-name] | 帮助菜单,也可以查看部分插件的提示信息 |
parse <value> | 根据输入的字符串,转换成各种支持的数据格式 |
clear | 清除屏幕 |
exit | 退出程序 |
钱包命令
下表所列命令均需要打开钱包才能使用。
合约命令
命令 | 参数 | 说明 |
deploy | <nefFilePath> [manifestFile] | 发布合约 |
invoke | <scripthash> <operation> [contractParameters=null] [sender=null] [signerAccounts=null] [maxGas=20] | 调用合约 |
update | <scriptHash> <filePath> <manifestPath> <sender> [signerAccounts=null] | 升级合约 |
节点命令
命令 | 参数 | 说明 |
show state | | 显示当前区块链同步状态 |
show pool | [verbose=False] | 显示内存池中的交易(这些交易处于零确认的状态) |
NEP17 命令
命令 | 参数 | 说明 |
balanceof | <tokenHash> <address> | 查询指定 token 指定地址的余额 |
decimals | <tokenHash> | 查询指定 token 的精度 |
name | <tokenHash> | 查询指定 token 的名字 |
transfer | <tokenHash> <to> <amount> [from=null] [data=null] [signersAccounts=null] | 调用 token 的 transfer 方法转账 |
原生合约命令
网络命令
插件命令
投票命令
区块命令
命令 | 参数 | 说明 |
export blocks | <start> [block count] [export path] | 从指定区块高度导出区块数据,导出的结果可以用作离线同步 |
命令说明
parse
根据输入的字符串,转换成各种支持的数据格式
句法
parse <value>
示例
对于无法转换的数据类型可能出现乱码
create wallet
创建一个 .db3 或 .json 钱包文件。创建过程中需要设置钱包密码。
句法
create wallet <path>
示例
创建的钱包文件存放在 Neo-CLI 根目录下,如果要指定其它路径,需要先创建好文件夹。
open wallet
打开指定路径的钱包文件。打开钱包时需要输入钱包密码。
句法
open wallet <path>
示例
change password
修改钱包密码。
句法
change password
示例
upgrade wallet
升级旧版 .db3 钱包文件。
句法
upgrade wallet <path>
示例
show gas
列出当前钱包中的所有未提取的 GAS。
句法
show gas
示例
这里不包含已提取的 GAS,查看已提取的 GAS 请用 list asset 命令。
在 Neo N3 中,某地址每次 NEO 数量发生改变时都会触发其 GAS 的自动提取。
create address
在当前钱包中创建一个地址或批量创建地址。创建的地址会自动导出到 address.txt 文件中。
句法
create address [n]
参数
n
:要创建的地址数量。n 为正整数,不填默认为1
示例
balanceof
查询指定 token 指定地址的余额
句法
balanceof <tokenHash> <address>
参数
示例
decimals
查询指定 token 的精度
句法
decimals <tokenHash>
参数
示例
transfer
调用指定 token 的 transfer 方法转账
句法
transfer <tokenHash> <to> <amount> [from=null] [data=null] [signersAccounts=null]
参数
示例
list nativecontract
列出所有原生合约的名字及 scripthash
句法
list nativecontract
参数
无
示例
get accountstate
获取指定账户最新的投票情况,如投票地址,所投票数和投票的区块高度。
句法
get accountstate <address>
参数
address
:要查询投票情况的地址
示例
get candidates
获取候选人公钥及票数
句法
get candidates
参数
无
示例
get committee
获取委员会成员公钥
句法
get committee
参数
无
示例
get next validators
获取下一轮验证人公钥
句法
get next validators
参数
无
示例
register candidate
注册候选人
句法
register candidate <account> [maxGas=1010]
参数
account
:注册者账户
maxGas
: 最大花费 GAS,默认为 1010,其中注册费用 1000 GAS。
示例
unregister candidate
注销候选人
句法
unregister candidate <account>
参数
示例
vote
投票
句法
vote <senderAccount> <publicKey>
参数
-
senderAccount
:用来投票的账户
-
publickey
:被投票地址的公钥
示例
unvote
取消投票
句法
unvote <senderAccount>
参数
示例
export key
导出地址对应的私钥到指定的文件。该命令需要验证钱包密码。
句法
export key [address] [path]
参数
-
address
:指定要导出私钥的地址
-
path
:指定保存私钥的文件路径
示例
将私钥输出到控制台:
将私钥输出到指定文件中:
import key
导入一个私钥或者指定文件中的多个私钥。
句法
import key <wif | path>
参数
wif | path
:指定要导入的私钥,或者存放私钥的文件路径
示例
如果是指定文件的话,文件里的私钥格式请参考 export key key.txt 的输出。
import multisigaddress
创建多方签名地址。
句法
import multisigaddress m pubkeys...
参数
示例
import watchonly
导入只监听的地址,例如合约账户。
句法
import watchonly <addressOrFile>
参数
addressOrFile
:账户地址/ hash 或合约 hash,或者存有这些数据的文件
示例
send
向指定地址转账。该命令需要验证钱包密码。
句法
send <id | alias> <address> <amount> [from=null] [data=null] [signerAccounts=null]
参数
示例
将 100 GAS 转到地址 “Ni5iS2XHazKZtXfzLJbdyDk8UUcGBZGePR”:
因为第二个参数除了资产 ID,还可以填写资产缩写,所以以上命令可以写成:
要查看资产 ID ,可输入 list asset
命令查看钱包中的所有资产。
当从签名数量为 1 以上的多方签名合约地址中转出资产时,需要多方进行签名,此时会返回一段待签名的 json 字符串,如下所示:
如果从合约中转出资产,from 为合约 hash,签名账户需要包含合约 hash 和鉴权账户 verify account,例如: ` neo> send 0x70e2301955bf1e74cbb31d18c2f96972abadb328 NZttvm9tAhMjyxZATvqN9WFYkHYMNaXD6C 0.000002 0x436b18e7b624c0323b090141a89e79a3ab588b6a transferdata 0x436b18e7b624c0323b090141a89e79a3ab588b6a NNU67Fvdy3LEQTM374EJ9iMbCRxVExgM8Y password: * TXID: 0x174bab85eb004a07ae5b411f23cb6d3128346f9249305a768c286707938b4727
`
sign
该命令用于给 ContractParametersContext 签名。签名完整后才能广播出去,广播交易的方法请参照 relay 方法。
句法
sign <jsonObjectToSign>
参数
jsonObjectToSign
:记录多方签名交易的 json 字符串
示例
返回已签名的 json 字符串。如果签名已完整,则可以通过 relay 指令广播交易。
deploy
将智能合约发布到链上。
句法
deploy <nefFilePath> [manifestFile]
参数
-
nefFilePath
:NeoVM的可执行文件 nef 的路径
-
manifestFile
:可选,manifest.json 文件的路径,manifest 记录了合约的各个接口信息以及配置内容,如果为空,则程序会自动匹配与 nef 文件同名的 manifest.json 文件
示例
invoke
调用合约
句法
invoke <scriptHash> <operation> [contractParameters=null] [sender=null] [signerAccounts=null] [maxGas]
参数
-
scripthash
:要调用的合约脚本散列
-
operation
:合约内方法名,后面可以输入传入参数,以空格隔开
-
contractParameters
为调用参数,需要传入 JSON 格式的字符串,如果是 ByteArray,需要提前进行 Base64编码
示例:地址 NfKA6zAixybBHHpmaPYPDywoqDaKzfMPf9
可转换为 16 进制大端序的 ScriptHash 0xe4b0b6fa65a399d7233827502b178ece1912cdd4
也可转换为 Base64 编码的 ScriptHash 1M0SGc6OFytQJzgj15mjZfq2sOQ=
。JSON 格式的参数如下:
-
sender
:交易发送方,即支付 GAS 费的账户
-
signerAccounts
为附加签名地址数组,只支持标准账户(单签地址),填写后 Neo-CLI 会为调用交易附加该数组内所有地址的签名
-
maxGas
: 最大花费 GAS
示例 1
示例输入:
示例输出:
-
VM State: HALT
表示虚拟机执行成功, FAULT
表示虚拟机执行时遇到异常退出。
-
Gas Consumed :调用智能合约时消耗的系统手续费。
-
Evaluation Stack:合约执行结果,其中 value 如果是字符串或 ByteArray,则是 Base64 编码后的结果。
示例 2
示例输入:
示例输出:
示例输入:
或
示例输出:
示例 3
示例输入:
示例输出:
当输入 invoke 命令后,节点调用合约中的 operation
方法,并将 operation
和 contractParameters
作为实参传入。如果合约里没有对 operation
和 contractParameters
做处理,将不能返回预期的结果。
update
升级合约。
句法
update <scriptHash> <filePath> <manifestPath> <sender> [signerAccounts=null]
参数
-
scriptHash
:要升级的合约hash
-
nefFilePath
:NeoVM的可执行文件 nef 的路径
-
manifestFile
:manifest.json 文件的路径,manifest 记录了合约的各个接口信息以及配置内容,如果为空,则程序会自动匹配与 nef 文件同名的 manifest.json 文件
-
sender
:交易发送方,即支付 GAS 费的账户
-
signerAccounts
:附加签名地址数组,只支持标准账户(单签地址),填写后 Neo-CLI 会为调用交易附加该数组内所有地址的签名
示例
relay
将完成签名的交易信息进行广播。
句法
relay <jsonObjectToSign>
参数
jsonObjectToSign
:记录签名交易的 json 字符串
示例
broadcast addr
广播一个节点 IP 地址。
句法
broadcast addr <IPAddress> <port>
示例
broadcast block
广播一个区块。
句法
broadcast block <block-hash>
broadcast block <block-height>
示例
broadcast getblocks
广播 getblocks 请求。
句法
broadcast getblocks <block-hash>
示例
广播 getheaders 请求。
句法
broadcast getheaders <block-hash>
示例
broadcast getdata
广播 getdata 请求。
句法
broadcast getdata <inventory type> <payload>
示例
broadcast inv
广播 inventory data。
句法
broadcast inv <inventory type> <payload>
示例
broadcast transaction
广播一笔交易。
句法
broadcast transaction <transaction hash>
示例
plugins
显示所有已加载的插件。
句法
plugins
示例
install
安装指定插件
install [Plugin name]
安装指定插件,如下所示。卸载插件与此类似。
以上只是示例插件,更多插件请参考 安装插件 。
dump storage
导出全部或指定的状态量数据。
句法
dump storage <key>
export blocks
从指定区块高度导出区块数据,导出的结果可以用作离线同步。
句法
export blocks <index>
参数
<index>
:指定要导出数据的起始区块高度
start consensus
启动共识。此命令是 DBFTPlugin 插件提供的,使用前需要安装该插件。启动共识的前提是当前钱包有共识的权限,在 Neo 主网上可以通过投票选举获得共识的权限,如果自己部署的私有链,可以在 protocol.json
中设置共识节点的公钥,详情可参考 私链搭建 。
start oracle
启动 Oracle 服务。此命令由 OracleService 插件提供,使用前需要安装该插件。开启 Oracle 服务的前提是当前钱包地址的公钥已经被委员会指定了 Oracle 角色。
stop oracle
停止 Oracle 服务。此命令由 OracleService 插件提供,使用前需要安装该插件。
state root
通过高度查询 state root,需要安装 StatePlugin 插件。
句法
state root <index>
参数
<index>
:区块索引
get proof
通过 root hash,合约 hash 和 storage key 查询得到 proof
句法
get proof <root hash> <script hash> <key>
参数
verify proof
使用 root hash 和 proof 进行验证,得到 key 对应存储区的值
句法
verify proof <root hash> <proof>
参数