交互命令行
MOAC母链客户端使用了和以太坊类似的交互式命令行。用户可以在命令行(console)中执行内置的JAVA script命令或者利用脚本(script),输出结果显示在命令行中。 这里使用的chain3对象,是MOAC参考以太坊,而开发的一套javascript库,目的是让应用程序能够与MOAC的VNODE和SCS节点进行通信。注意,这里有两层,moac启动了一个MOAC VNODE节点,console参数开启了一个javascript的控制台,这个控制台注入了chain3.js这个库,以使我们可以通过chain3对象与MOAC VNODE节点做交互。
VNODE和用户交互的命令行界面
MOAC 母链节点的客户端(VNODE)有一个可以和用户交互的JavaScript命令行界面。启动这个命令行可以使用下面两个命令
$ moac console $ moac attach
如果使用console参数,moac客户端会首先启动VNODE节点并自动进入命令行界面。 而使用attach参数,moac客户端不会启动VNODE节点,而是去连接一个已经运行的VNODE节点并显示命令行界面。
$ moac attach ipc:/some/custom/path $ moac attach http://127.0.0.1:8545 $ moac attach ws://127.0.0.1:8546
参数说明 --datadir 数据库和秘钥存储路径 --dev 开发环境,采用权威证明(PoA),开发帐号有预存金额,自动封装交易数据到区块链 --rpc 开启HTTP-RPC服务,默认8545端口 --rpccorsdomain 允许连接到rpc的url匹配模式 *代表任意 console 启动一个交互式的JavaScript环境
请注意,默认情况下,MOAC VNODE节点不会启动http和weboscket服务,并且由于安全原因,并非所有功能都通过这些接口提供。 当启动VNODE节点时使用--rpcapi和--wsapi参数,或者使用admin.startRPC和admin.startWS,可以覆盖这些默认值。
log 参数会在终端显示更多的信息:
$ moac --verbosity 4 console 2>> /tmp/vnode.log
如果不想被太多的系统信息干扰命令行的界面,可以关掉系统输出:
$ moac console 2>> /dev/null
or
$ moac --verbosity 0 console
MOAC支持在交互命令行(console)中通过--preload参数使用用户定义的JavaScript脚本文件。
$ moac --preload "/my/scripts/folder/utils.js,/my/scripts/folder/contracts.js" console
非交互式使用: JSRE 脚本模式
VNODE也可以执行文件到JavaScript解释器。 console和attach子命令接受--exec参数,这是一个javascript语句。
$ moac --exec "mc.blockNumber" attach
这将打印正在运行的MOAC VNODE上的当前区块号。 或通过http在远程节点上执行带有更复杂语句的本地脚本:
$ moac --exec 'loadScript("/tmp/checkbalances.js")' attach http://127.0.0.1:8545 $ moac --jspath "/tmp" --exec 'loadScript("checkbalances.js")' attach http://127.0.0.1:8545
使用--jspath <path / to / my / js / root>为您的js脚本设置一个libdir。 相对于该目录,将理解没有绝对路径的loadScript()参数。
您可以通过键入exit或直接使用CTRL-C退出控制台。
注意
MOAC's JSRE 和以太坊的客户端一样采取了Otto JS VM 虚拟机并具有以下限制:
"use strict" 语句可以编译通过,但没有相应效果。 正则表达式引擎(re2 / regexp)与ECMA5规范不完全兼容。 注意,Otto的另一个已知限制(即缺少计时器)已得到解决。 以太坊JSRE同时实现setTimeout和setInterval。 除此之外,控制台还提供admin.sleep(seconds)以及“ blocktime sleep”方法admin.sleepBlocks(number)。
chain3.js 自动加载 bignumber.js 的软件库(MIT Expat Licence)用于大数处理。
时钟(Timers)
除了JS的全部功能(按照ECMA5)之外,MOAC VNODE的JSRE还增加了各种计时器。 它实现了在浏览器窗口中使用的setInterval,clearInterval,setTimeout,clearTimeout。 它还提供了admin.sleep(seconds)和基于块的计时器admin.sleepBlocks(n)的实现,该定时器一直休眠直到添加的新块的数量等于或大于n为止,认为“等待n个确认”。
高级管理 APIs
除了官方的API界面外,VNODE还支持其他管理API。 这些API是使用JSON-RPC提供的,并且遵循与DApp API中使用的相同约定。 VNODE软件包随附一个控制台客户端,该客户端支持所有其他API。