博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
手把手教你在本地构建 Nervos AppChain 全家桶
阅读量:6652 次
发布时间:2019-06-25

本文共 5940 字,大约阅读时间需要 19 分钟。

本文来源 Nervos 粉-邱飞旸,缘起于一场 。感谢飞旸哦
邱飞旸私人博客:http://t.cn/EPuuaqa

本文主要定位给对区块链有一定了解的,但是对 Nervos AppChain 这一系列产品知之甚少,想要入门的用户。本文所使用的方法并不是最快的搭建一个 Dapp 的方法,在公共测试链上搭建 Dapp 会更加快速,可以跳过 CITA 链搭建步骤,请参考官方 Demo: 。

本文主要依据 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的功能和用法)。如果不配置经济模型,在创建链的时候默认就是 quotaquota 模型下链上没有原生 Token,交易也不消耗 Token,而 charge 模型就和平时我们使用 Ethereum 的体验基本一致了。

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

12345678复制代码
./env.sh ./scripts/create_cita_config.py create \--chain_name test-chain \--jsonrpc_port 1337 \--ws_port 4337 \--grpc_port 5000 \--nodes "127.0.0.1:4000,127.0.0.1:4001,127.0.0.1:4002,127.0.0.1:4003" \--contract_arguments "SysConfig.chainId=2" \"SysConfig.economicalModel=1"复制代码

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

1234复制代码
http://127.0.0.1:1337http://127.0.0.1:1338http://127.0.0.1:1339http://127.0.0.1:1340复制代码

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

检查本地链状态

直接使用 JSON-RPC

参见 CITA - 验证。

使用 cita-cli

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

然后安装 cita-cli

123复制代码
git clone https://github.com/cryptape/cita-cli.gitcd cita-cli/cita-clicargo install复制代码

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

123456复制代码
# default is http://127.0.0.1:1337# the following is a test chain provided by nervoscita> switch --host http://121.196.200.225:1337cita> rpc blockNumber...cita> exit复制代码

命令参见 CITA JSON-RPC。

可能的错误

节点无法启动。

cita 根目录下键入

12复制代码
cd 
/0/logscat 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 容器,使用

12复制代码
docker ps # 查看目前运行的docker容器docker stop 
# 结束掉和CITA有关的所有容器复制代码

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

1复制代码
ps -aux | grep rabbitmq复制代码

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

1复制代码
sudo systemctl status rabbitmq-server复制代码

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

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

1234复制代码
./env.sh ./bin/cita setup test-chain/0./env.sh ./bin/cita setup test-chain/1./env.sh ./bin/cita setup test-chain/2./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 文件里面。

编译合约

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

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

  • 如果使用 solcjs,请使用
1复制代码
solcjs --optimize --abi --bin 
复制代码
  • 如果使用 solc,请使用
1复制代码
solc --optimize --abi --bin 
复制代码

但是要确保 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 用户可以通过下列命令安装 nodenpm

123复制代码
sudo apt-get install npmnpm i n -gn latest复制代码

3. 生成 DLL 包

1复制代码
yarn run dll复制代码

4. 添加配置文件

1复制代码
cp ./.env.example ./.env复制代码

5. 修改配置文件

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

1234567复制代码
# public content server 地址PUBLIC=localhost:8082# 默认 AppChain JSON-RPC 地址,就使用刚刚配置好的节点RPC地址即可CHAIN_SERVERS=http://47.96.231.19:4000# 区块浏览器名称APP_NAME=MicroscopeLNGS=zh,en,ja-JP,ko,de,it,fr复制代码

本文使用的配置如下:

12345复制代码
# https://cdn.cryptape.com/ 是Nervos官方的CDNPUBLIC=https://cdn.cryptape.com/CHAIN_SERVERS=http://127.0.0.1:1337/APP_NAME=MicroscopeLNGS=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

1234复制代码
git clone https://github.com/cryptape/re-birth.gitcd re-birthmake setup # 第一次运行使用这个命令make up # 开启 docker daemon复制代码

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

输入 docker ps,应该可以看见至少有 4 个容器在运行,分别为 re-birth_webre-birth_webre-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 dexhunter.github.io/tutorial/20…

转载地址:http://eknto.baihongyu.com/

你可能感兴趣的文章
dedecms二次开发帮助文档地址
查看>>
thinkphp-3
查看>>
ACM在线题库
查看>>
Unison File SynchronizerUser Manual and Reference Guide
查看>>
第 3 章 Keystone - 019 - 通过例子学习 Keystone
查看>>
自己的菜单,阻止默认事件
查看>>
python unittest addCleanup中也加失败截图功能
查看>>
2017.07.03 需求经理作业 第五组
查看>>
jsp开发知识
查看>>
深层次探究值类型与引用类型,以及值传递引用传递
查看>>
MyBatis输入输出映射
查看>>
django debug tool
查看>>
Java实现邮箱验证
查看>>
关于left join连接查询 两张表里有同名字段的问题
查看>>
IOC----LightInject
查看>>
免费资料下载导航
查看>>
adb命令
查看>>
HDU 2680 Choose the best route(多起点单终点最短路问题)题解
查看>>
js经典试题之原型与继承
查看>>
iPod nano将何去何从?
查看>>