當前位置:
首頁 > 知識 > 手把手教你在本地構建Nervos AppChain全家桶

手把手教你在本地構建Nervos AppChain全家桶

來源:胡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 /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 # 結束掉和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

如果使用 solc ,請使用

2 solc --optimize --abi --bin

但是要確保YOUR_CONTRACT_2和YOUR_ 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, fromhttps://dexhunter.github.io/tutorial/2018 /09/04/tutorial-on-cita.html

原文來源:

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


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 數據派THU 的精彩文章:

來自獨秀同學的深度網路數學筆記,還不快收藏?
2種數據科學編程中的思維模式,了解一下

TAG:數據派THU |