環境
- EC2(Amazon Linux 2)
- Docker v18.09
- Docker-compose v1.24
- Go lang v1.12
- Node.js v8.9.4
- npm v5.6.0
- Python v2.7
- Hyperledger Fabric v1.4.4
Fabcarディレクトリ構成
-
Chaincodeファイル
~/fabric-samples/chaincode/fabcar/go/配下
~/fabric-samples/chaincode/fabcar/javascript/lib/配下 -
Chaincode実行用SDKファイル
~/fabric-samples/fabcar/javascript/配下
Docker, Docker-composeインストール
1.パッケージのアップデート
$ sudo yum -y update
2.Dockerインストール
# インストール
$ sudo yum install -y docker
# dockerグループにユーザーを登録
$ sudo usermod -a -G docker ec2-user
# 確認
$ cat /etc/group | grep docker
3.Docker-composeインストール→Docker起動
# インストール
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# バイナリに対して実行権限付与
$ sudo chmod +x /usr/local/bin/docker-compose
# 確認
$ docker-compose -v
# Docker起動
$ sudo service docker start
# 一度ログアウトして、dockerの環境情報を確認
$ docker info
Nodebrew(nvm)インストール
Nodebrewの場合
# インストール
$ curl -L git.io/nodebrew | perl - setup
# PATH通す
$ export PATH=$HOME/.nodebrew/current/bin:$PATH >> ~/.bash_profile
# 使用するNode.js(npm)のバージョン指定
$ nodebrew install-binary v8.9.4
$ nodebrew use v8.9.4
nvmの場合
# nvmインストール
$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | bash
# nvmバージョン&インストール可能Node.jsバージョンの確認
$ nvm --version
$ nvm ls-remote
# 使用するNode.js(npm)のバージョンをインストール
$ nvm install v8.9.4
お好きな方で構築してください。
Goインストール
# インストール
$ sudo yum install golang
# PATH通す
$ export GOPATH=$HOME/go
$ export PATH=$PATH:$GOPATH/bin
# 確認
$ echo $GOPATH
$ go version
Fabricチュートリアル
1.ネットワーク起動
startFabric.shを実行することで、peer(Chaincodeを実行するコンテナ)やorderer(Chaincodeの実行順序を制御するコンテナ)、CA(アカウントを管理するコンテナ)用のDockerコンテナが起動し、peerにChaincodeをインストール/インスタンス化/初期化するところまでやってくれます。
# サンプルプログラムのインストール
$ curl -sSL http://bit.ly/2ysbOFE | bash -s // バージョン指定しない場合最新版インストール(2019/12/23時点: v1.4.4)→今回はこっち
$ curl -sSL http://bit.ly/2ysbOFE | bash -s 1.4.1 // バージョン指定する場合
$ cd fabric-samples/fabcar
# ブロックチェーンネットワークの起動
$ ./startFabric.sh javascript
# 起動コンテナの確認
$ docker ps --format "{{.Names}}"
ちなみにEC2のインスタンスタイプがt2.microではメモリ不足でChaincodeをインストールできないので、t3a.small(自分はこれでできました)以上にしましょう。
2.Chaincodeの確認
ちゃんとインスタンス化までできているか確認してみましょう。
# インストール済みChaincode確認
$ docker exec cli peer chaincode list --installed
# インスタンス化済みChaincode確認
$ docker exec cli peer chaincode list --instantiated -C mychannel
3.Chaincodeの実行
コンテナにインストールされたChaincodeを叩きにいきます。
# サンプルプログラムのディレクトリに移動
$ cd javascript
# ライブラリのインストール
$ npm install // npm ERR!がでて、'fabric-network'を正常にインストールできていない場合、gccをインストールしてみる
$ sudo yum install gcc-c++
# gRPCバイナリをインストール
$ npm rebuild
# ユーザー作成&登録
$ node enrollAdmin.js
$ node registerUser.js
$ ls wallet
admin user1
# 台帳(StateDB)のデータを参照
$ node query.js
# 台帳(StateDB)のデータを更新
$ node invoke.js
# ブロックチェーンネットワークの停止
$ cd ../../basic-network
$ ./stop.sh
npm installするときは、gccインストールするのを忘れずに。
次回はより実践的な内容で、Chaincodeを自作する(Node.js)記事でも書いてみます。
参考
参考になる記事が少ないので、オフィシャルドキュメントを参考にすることをおすすめします(一つ目)。
peer chaincode - Hyperledger Fabric docs - Read the Docs
Hyperledger Fabric v1.4 のプログラミングモデル
AWSのEC2でDockerを試してみる