教程 | 手把手教你在本地构建Nervos AppChain全家桶

2018 年 10 月 16 日 数据派THU

来源:胡shuo区块链

本文约2200字,建议阅读8分钟。

本文依据博文教程以及Nervos AppChain官方文档,带你搭建一个Dapp。


[ 导读 ]本文所使用的方法并不是最快的搭建一个 Dapp 的方法,在公共测试链上搭建 Dapp 会更加快速,可以跳过 CITA 链搭建步骤,请参考官方 Demo: First Forever。


本文主要依据 A Hands-on Tutorial on Building Your First DAPP with CITA (Nervos) 这篇博文做了一些补充,同时也参考了 Nervos AppChain 官方文档。


主要环境:


  • CITA 0.18

  • Ubuntu 18.04


Nervos AppChain 全家桶简介


Nervos Network 包含了 Nervos CKB (layer 1) 和 Nervos AppChain (layer 2)。引用 Nervos AppChain 官方文档的一句话介绍:


「Nervos AppChain」是一套开源的应用公链解决方案。


官方文档种已经包含了各种系列工具的介绍。本教程主要利用以下工具构建一个麻雀虽小,五脏俱全的 Dapp:


  • CITA

  • ReBirth

  • Microscope

  • nervos.js

  • cita-cli


这五种产品的关系如下:


依赖


docker(安装方法请参考 CITA - 安装Docker)


获取 CITA


首先,我们需要获取 CITA,CITA 是 AppChain 客户端,目前仅支持联盟链。CITA 是 Nervos AppChain 工具链的核心。获取本地可用的 CITA 链有两种方式:从源码编译或者直接使用发布包。


  • 从源码编译


由于官方文档已经阐述十分详细,本章不作过多赘述,请参考 CITA - 编译 CITA。


  • 使用发布包


可在 CITA 正式发布版本 处找到目前所有已经发布的版本。通常选择cita_secp256k1_ sha3.tar.gz版本下载。


创建、配置并启动节点


请参考 CITA - 部署CITA。


在本文中,将配置四个节点,并且使用 charge 经济模型(具体说明见 CITA - config_tool 的功能和用法)。


如果不配置经济模型,在创建链的时候默认就是 quota 。 quota 模型下链上没有原生 Token ,交易也不消耗 Token ,而 charge 模型就和平时我们使用 Ethereum 的体验基本一致了。


在使用 create_cita_config.py 工具进行节点配置的时候,应当同时指定配置参数。脚本如下:


1  ./env.sh ./scripts/create_cita_config.py create \
2  --chain_name test-chain \
3  --jsonrpc_port 1337 \
4  --ws_port 4337 \
5  --grpc_port 5000 \
6  --nodes "127.0.0.1:4000,127.0.0.1:4001,127.0.0.1:4002,127.0.0.1:4003" \
7  --contract_arguments "SysConfig.chainId=2" \
8  "SysConfig.economicalModel=1"


后面需要用到的是 jsonrpc_port ,由于我们是在本地搭链,配置了四个节点,所以 JSON-RPC 地址应分别为


1  http://127.0.0.1:1337 

2  http://127.0.0.1:1338 

3  http://127.0.0.1:1339 

4  http://127.0.0.1:1340


部署合约和发起交易时任选一个地址连接即可。


检查本地链状态


  • 直接使用 JSON-RPC


参见 CITA - 验证。


  • 使用 cita-cli 


使用 cita-cli 首先应安装 rust 和 cargo 。可以参见 Rust 程序设计语言 - 安装。


然后安装 cita-cli :


1  git clone https://github.com/cryptape/cita-cli.git 

2  cd cita-cli/cita-cli

3  cargo install


然后可以运行 ~/.cargo/bin/cita-cli 或者进入 cita-cli/cita-cli 运行 cargo run 命令。运行界面如下:


1  # default is http://127.0.0.1:1337 

2  # the following is a test chain provided by nervos

3  cita> switch--host http://121.196.200.225:1337 

4  cita> rpc blockNumber ... 

5  cita> exit


命令参见 CITA JSON-RPC。


  • 可能的错误


节点无法启动。


在 cita 根目录下键入:


1  cd <YOUR_CHAIN_NAME>/0/logs
2  cat cita-network.log


 cita-network.log 末尾打印出来的结果中有:


1 Thread main panicked at failed to open url amqp://guest:guest@localhost/test-chain/0 : Protocol("Connection reset by peer (os error 104)"), /opt/.cargo/git/checkouts/cita-common-1aad419f3e80ba17/67c715f/pubsub_rabbitmq/src/lib.rs:59


说明 RabbitMQ 服务没有启动起来,此时,需要检查一下是不是有其他的 rabbitmq 的进程,具体原因可以参见官方文档配置节点下的 Note。我们先结束掉 docker 容器,使用:


1  docker ps # 查看目前运行的docker容器
2  docker stop <CONTAINER_ID> # 结束掉和CITA有关的所有容器


然后查看是否还有 RabbitMQ 服务,


1  ps -aux | grep rabbitmq


如果有的话用 kill -9 结束掉进程。还可以使用 systemd 查看是否有 RabbitMQ 服务被注册:


1  sudo systemctl status rabbitmq-server


如果有的话,用户可自行决定是否关闭自启动。

此时,再重新执行配置操作:


1  ./env.sh ./bin/cita setup test-chain/0 

2  ./env.sh ./bin/cita setup test-chain/1 

3  ./env.sh ./bin/cita setup test-chain/2 

4  ./env.sh ./bin/cita setup test-chain/3


然后启动节点即可。


部署合约


本文按照官方 Demo: First Forever 进行部署。具体步骤不再赘述,只是指出几个注意事项。


  • 部署合约使用的地址和私钥


部署合约需要用到公私钥对,并且在我们 charge 经济模型下(刚刚说过)只有超级管理员和节点的地址才有余额发布合约。


如果在前文配置节点的时候没有配置超级管理员,那么默认的超级管理员的地址和私钥为:


  • address:

    0x4b5ae4567ad5d9fb92bc9afd6a657e6fa13a2523

  • privkey:

    5f0258a4778057a8a7d97809bd209055b2fbafa654ce7d31ec7191066b9225e6


详情参考 CITA - 系统合约。


节点的私钥存储在进行节点配置时生成的 test-chain 文件夹下的节点文件夹里面,文件名叫做 privkey 。节点地址在 test-chain 文件夹下的 template/init_data.yml 文件里面。


  • 编译合约


单合约编译时, solcjs 与 solc 没有什么太大区别。当多合约编译的时候,这两个工具有些区别。


多合约编译时,假设 YOUR_CONTRACT_1 import 了 YOUR_CONTRACT_2 :


  • 如果使用 solcjs ,请使用


1  solcjs --optimize --abi --bin <YOUR_CONTRACT_1> <YOUR_CONTRACT_2>


  • 如果使用 solc ,请使用


2  solc --optimize --abi --bin <YOUR_CONTRACT_1>


但是要确保YOUR_CONTRACT_2YOUR_ CONTRACT_1位于同一目录或者YOUR_CONTRACT_1所在目录的子目录,否则,应当使用 --allow-paths 参数指定YOUR_CONTRACT_2所在目录。


在Dapp中调用合约


这一步可以使用nervos.js在web网页中调用合约方法,参考Demo First Forever和@nervos/chain文档。


搭建区块浏览器


Microscope 是专门为 Nervos AppChain 设计的区块浏览器,使用它可以看到任意给定链的块和交易的详细信息。


ReBirth 是基于 PostgreSQL 的一个缓存服务器,Microscope 中的某些功能,例如列出最近10笔交易,必须使用ReBirth。


我们将使用 Microscope + ReBirth 组合搭建区块链浏览器。


  • 使用 Microscope 搭建区块浏览器前端


1. 下载 Microscope 的 Github 仓库


1  git clone https://github.com/cryptape/Microscope/


2. 安装仓库依赖


1  yarn install


没有 yarn 的可以利用 npm i yarn -g 来安装。Ubuntu 用户可以通过下列命令安装 node 和 npm :


1  sudo apt-get install 

2  npm npm i n -g 

3  n latest


3. 生成 DLL 包


1  yarn run dll


4. 添加配置文件


1 cp ./.env.example ./.env


5. 修改配置文件

打开 .env ,默认配置如下:


1  # public content server 地址 

2  PUBLIC=localhost:8082 

3  # 默认 AppChain JSON-RPC 地址,就使用刚刚配置好的节点RPC地址即可 

4  CHAIN_SERVERS=http://47.96.231.19:4000 

5  # 区块浏览器名称 

6  APP_NAME=Microscope 

7  LNGS=zh,en,ja-JP,ko,de,it,fr


本文使用的配置如下:


1  # https://cdn.cryptape.com/ 是Nervos官方的CDN 

2  PUBLIC=https://cdn.cryptape.com/ 

3  CHAIN_SERVERS=http://127.0.0.1:1337/ 

4  APP_NAME=Microscope 

5  LNGS=zh,en,ja-JP,ko,de,it,fr


6. 开发模式运行服务器


1  yarn start


其中一行输出如下:


1  Project is running at http://localhost:8080/


然后等待 webpack 打包,时间可能会比较长。之后看到如下输出:


1 webpack: Compiled successfully.


说明服务器已经成功运行。


在浏览器中键入 http://localhost:8080/,可以看见如下图所示,最近交易列表无法显示:



更多信息请参考 Mircroscope 文档。


  • 使用 ReBirth 提供缓存数据库服务


1. 设置配置文件


配置文件是 re-birth 根目录下的 .env ,一般应当另建一个 .env.local 文件,本文我们直接修改 .env ,将 CITA_URL 字段设为 http://127.0.0.1:1337/ 


2. 运行 ReBirth


1 git clone https://github.com/cryptape/re-birth.git 

2  cd re-birth 

3  make setup # 第一次运行使用这个命令 

4  make up # 开启 docker daemon


命令会自动拉取 docker 镜像并运行容器,默认运行的地址为 http://localhost:8888  。


输入docker ps,应该可以看见至少有 4 个容器在运行,分别为re-birth_web,re-birth_web,re-birth_web和一个PostgreSQL的容器。


更多信息请参考 ReBirth 文档。


3. 重新配置 Microscope


在浏览器中键入http://localhost:8080/,点击如下图红框所示按钮:



在如图所示Other Chain处键入刚刚设置好的ReBirth缓存服务器地址:


http://localhost:8888



可以发现浏览器的功能变得全面:



参考文献


[1] Dex Hunter. (2018, September 4). Dex Hunter blog. A hands-on tutorial on building your first DAPP with CITA (Nervos). Retrieved September 19, 2018, from https://dexhunter.github.io/tutorial/2018 /09/04/tutorial-on-cita.html


原文来源:

https://blog.priewienv.me/post/nervos-appchain-local/ 版权归原作者所有


登录查看更多
0

相关内容

MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消 息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。其中较为成熟的MQ产品有IBM WEBSPHERE MQ。
【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
194+阅读 · 2020年6月29日
【WWW2020】DGL深度图神经网络实战教程,PPT+代码
专知会员服务
175+阅读 · 2020年4月12日
【干货】用BRET进行多标签文本分类(附代码)
专知会员服务
84+阅读 · 2019年12月27日
【书籍】深度学习框架:PyTorch入门与实践(附代码)
专知会员服务
163+阅读 · 2019年10月28日
通过Docker安装谷歌足球游戏环境
CreateAMind
11+阅读 · 2019年7月7日
Github项目推荐 | Pytorch TVM 扩展
AI研习社
11+阅读 · 2019年5月5日
教程 | 如何通过PyTorch上手Tensor Comprehensions?
机器之心
5+阅读 · 2018年3月12日
TensorFlow神经网络教程
Python程序员
4+阅读 · 2017年12月4日
A Survey on Deep Learning for Named Entity Recognition
Arxiv
26+阅读 · 2020年3月13日
Deep Learning for Energy Markets
Arxiv
10+阅读 · 2019年4月10日
Arxiv
4+阅读 · 2018年5月10日
Arxiv
7+阅读 · 2018年3月21日
Arxiv
6+阅读 · 2018年1月29日
VIP会员
相关资讯
通过Docker安装谷歌足球游戏环境
CreateAMind
11+阅读 · 2019年7月7日
Github项目推荐 | Pytorch TVM 扩展
AI研习社
11+阅读 · 2019年5月5日
教程 | 如何通过PyTorch上手Tensor Comprehensions?
机器之心
5+阅读 · 2018年3月12日
TensorFlow神经网络教程
Python程序员
4+阅读 · 2017年12月4日
相关论文
A Survey on Deep Learning for Named Entity Recognition
Arxiv
26+阅读 · 2020年3月13日
Deep Learning for Energy Markets
Arxiv
10+阅读 · 2019年4月10日
Arxiv
4+阅读 · 2018年5月10日
Arxiv
7+阅读 · 2018年3月21日
Arxiv
6+阅读 · 2018年1月29日
Top
微信扫码咨询专知VIP会员