本文主要定位给想快速使用 Nervos AppChain 系列产品进行原型开发的用户。本文主要介绍帮助开发者快速在本地进行 Nervos AppChain 原型开发的一些好用的工具。

关于 Nervos AppChain 的详细信息请参见官方文档;想了解如何在本地搭建完整的,类似于生产环境的 Nervos AppChain 系列产品,请参见之前的文章:[教程] 手把手教你在本地构建 Nervos AppChain 全家桶;想了解如何具体进行 Dapp 开发,请参考官方 Demo

主要环境:

  • Ubuntu 18.04

实际上在 Mac OS 上测试也是 OK 的。

Nervos AppChain OneClick


Nervos AppChain OneClick 是由网友 PRIEWIENV (其实就是本人)打造的,专门给想以最快的速度在本地进行原型开发的开发者所使用的非官方一键部署包。目前支持 Linux 以及 Mac OS。

Nervos AppChain OneClick 有两个版本:FullLight,它们的区别如下:

  • Full
    • 包含 ReBirth
    • 无须编译
  • Light
    • 不包含 ReBirth
    • 需要编译 Microscope

ReBirth 是一个缓存服务器,主要用来从 CITA 链上获取数据存入数据库进行索引,因此,Microscope 的一些统计表格以及搜索功能需要 ReBirth 才可以使用。但是 Microscope 有 Debug 模式,开启之后可以在 Debugger 面板上直接捕捉含有交易的区块。在快速原型开发过程中实际上 Light 版本的 OneClick 基本可以满足要求。本篇文章着重介绍 Light 版本的使用方法。

安装

按照 GitHub 仓库上的说明,在安装之前,我们需要先安装 Docker 以及 Docker Compose。可以参考官方的 Docker 安装文档以及 Docker Compose 安装文档进行安装。官方文档非常详细,推荐在安装和使用过程中尽量使用官方文档。

在确保 Docker 以及 Docker Compose 都正确安装以后,可以开始使用 OneClick 了。只需三步即可完成 Nervos AppChain OneClick Light 的安装:

  1. 获取 GitHub 仓库源代码

    git clone -b develop https://github.com/PRIEWIENV/appchain-oneclick.git --recursive
    cd appchain-oneclick
    

    -b develop 参数表示使用仓库的 develop 分支。另外,注意此处一定要确保带上 --recursive 参数,然后观察到命令输出已经成功拉下来 Mircroscope 的代码才行,否则,如果观察到 microscope/microscope 文件夹仍然是空的,可以在拉下来的 OneClick 的代码的根目录下执行以下命令:

    git submodule init
    git submodule update
    
  2. 配置

    ./configure.sh
    

    这一步骤会下载 CITA 的 v0.19 发布包,如果下载有问题可以手动下载,然后将压缩包拷贝至目录 appchain-oneclick/cita/ 下,再运行 configure.sh

  3. 启动 OneClick

    docker-compose build
    docker-compose up
    

    成功后的界面如下图所示:

img

图1:OneClick 启动界面

使用

OneClick 会暴露出服务端口:

  • CITA: http://localhost:1337/
  • Microscope: http://localhost:8080/

在浏览器中键入 http://localhost:8080/ 后可以看到 Microscope 的界面:

img

图2:OneClick 中的 Microscope

由于没有 ReBirth,Microscope 目前有些功能无法使用,不过我们有 Debug 模式可以替代。Debug 模式需要手动在浏览器的 Config 页面里打开:

img

图3:打开 Debugger 开关

打开之后可以看到导航栏上多了一个 Debugger

img

图4:Debugger 标签

点击进入页面,可以看到默认有 5 个账户,最后一个是 CITA 链上的默认超级管理员账户(由于是开发专用,所以 OneClick 一切都尽量采用了默认设置,不考虑安全性),前四个是预置的账户供开发测试使用,可以看到预置账户里面都是有原生 Token 的(这是由于 OneClick 采用了具有原生 Token 的经济模型设置,具体细节请参考官方文档-经济模型选择),默认为 10000000000 NATT

img

图5:默认账户及余额

账户下面是监听含有交易的区块的面板,每当有含交易的区块出现在链上时,Debugger 都会捕捉到区块然后展示出交易,需要注意的是,这项监听功能目前并不是全局的,所以在使用的时候浏览器需要一直保持在在 Debugger 页面。

img

图6:捕捉交易

cita-cli


cita-cli 是一个易用友好的命令行工具,用来和 CITA 进行交互。在开发过程中,可以用来替代用 curl 命令发送 JSON-RPC 的交互方式,极大方便了手动测试。

安装

参见官方仓库,可以选择编译或者使用发布包。如果采用编译,需要 Rust 以及 libsecp256k1。libsecp256k1 除了源码编译的方法外,Ubuntu 用户还可以使用 apt 进行安装:

sudo apt install libsecp256k1-dev

需要注意的是,编译时最好加上参数 --features tls 开启 HTTPS 支持,否则 cita-cli 将无法与使用 HTTPS 协议的 JSON-RPC 端口交互。

使用

具体使用方法请参考官方仓库,下面简单介绍一下 cita-cli 的基本特性。

运行 cita-cli 之后可以注意到环境变量:

[       url        ]: http://127.0.0.1:1337
[       pwd        ]: /home/ubuntu
[      color       ]: true
[      debug       ]: false
[       json       ]: true
[    encryption    ]: secp256k1
[ completion_style ]: List
[    edit_style    ]: Emacs
[   save_private   ]: false

url 指的是目标 CITA 客户端的 JSON-RPC 端口地址,debug 模式默认关闭,以上环境变量均可通过 switch 命令进行设置。所有的命令都可以后接 --help 参数获取帮助信息。直接键入 help 将会获取所有一级命令帮助信息。下面以转账操作为例。

转账命令 transfer 是 cita-cli 专门实现的一条用于转账的发送交易命令,极大地方便了转账操作的进行。cita-cli 还实现了变量代换,使用 set 可以给变量复制,使用 get 可以获取变量信息,在命令中可以使用 ${} 语法获取变量的值。以上语法都是和 Shell 一致的,具体用法可以参考帮助信息。下面我们使用以上命令进行转账操作。

配合 OneClick 使用的话,我们要确保环境变量 urlhttp://127.0.0.1:1337。首先,暂存收款地址以及付款人私钥地址。

cita> set addr 0x381310CFD8160Bcf4A868f776BC6f975812bf2fC
cita> set priv 0x5f0258a4778057a8a7d97809bd209055b2fbafa654ce7d31ec7191066b9225e6

然后,发送转账交易:

cita> transfer --address ${addr} --private-key ${priv} --value 1000

命令行返回以下数据说明交易发送成功:

{
  "id": 4,
  "jsonrpc": "2.0",
  "result": {
    "hash": "0x0f65558964afac88cb0cd2abd0eb8f19133b8f437e97b3b2645445469699aca5",
    "status": "OK"
  }
}

CodeSandbox + Nervos.js


CodeSandbox 是一个在线的前端代码编辑器,它比起 CodePen,提供了很多前端框架(例如 React,Vue)以及服务器框架(例如 Node)的支持。cita-cli 作为命令行调试工具是非常好用的,但是仍然有很多调试需求命令行工具难以很好地满足,比如批量发送交易,交易反序列化,获取签名后的交易等等。这时,使用工具非常齐全的 Nervos.js SDK 直接进行调试是最好的选择,但是却要为此单独配置环境。CodeSandbox 刚好弥补了这一不足,上面公开分享的代码片段可以直接运行。比如下面这个使用 @nervos/chain 获取签名后交易、解开签名后交易以及获取链上元数据,使用 @nervos/observables 实时获取现在块高度的小工具:

最后放上 Nervos 官方出品的 Demo —— First Forever 的 CodeSandbox 版: