注意
2019/02/21現時点では
v1.4.0
が最新のため、いろいろ古い。
(2019.02) ぜひこちらの記事群も参考にしてください。
【Hyperledger Fabric 1.2.1を動かして、ブロックチェーンの動作を確認・検証しよう】 https://qiita.com/kyoko7tam/items/6e0eea28ac8340f6897e
概要
Hyperledger Fabric (以下Fabric) のソースコードには動作確認用の e2e_cli
(End-to-end CLI) が同梱されている。基本的にはソースをビルド後の動作確認用だが、Dockerイメージを引っ張ってくればビルドしなくても動く。
以下その方法。
Fabric v1.1.0リリース版で実験するための環境設定方法。以下の3ステップを行う。ただサンプルで遊ぶだけならFabricのソースは不要なのでスキップしてよい。Dockerイメージ、platform binaries、fabric-samples
は必要。
- Fabric v1.1.0のソースコードをダウンロード
- Dockerイメージとplatform binariesのダウンロード
-
fabric-samples
のダウンロード - 確認のため、
basic-network
を動かしてみる - 確認のため、Build Your First Network (BYFN) を試してみる
前提条件
Mac OS X El Capitanで試した。
- git
- Docker CE
- Docker Compose
以下、適当な作業ディレクトリ WORK
で行うものとする。
cd $WORK
Fabric v1.1.0のソースコードをダウンロード
Cloneの際、ブランチに release-1.1
を指定するのがポイントである。
注意: タグ v1.1.0 をクローンするのは、いくつかのファイルが古いのでうまくいかない
# --depth=1 を指定すると過去のコミットを取らないので速い
git clone -b release-1.1 --depth=1 https://github.com/hyperledger/fabric.git
Dockerイメージとplatform binariesのダウンロード
# 作業用のディレクトリを別に作っておいたほうがいい
cd $WORK
mkdir work && cd work
# (ローカルでビルドしない場合) Dockerイメージをpullし、platform binariesをダウンロード
# Fabricのイメージはタグ1.1.0、サードパーティのイメージはタグ0.4.6をpullする
# Pullされたイメージにはdocker tagコマンドによりlatestタグが付くので注意
../fabric/scripts/bootstrap.sh
# Platform binariesにパスを通す
export PATH=$WORK/work/bin:$PATH
Pullされたイメージは以下の通り:
hyperledger/fabric-ca latest 72617b4fa9b4 2 months ago 299MB
hyperledger/fabric-ca x86_64-1.1.0 72617b4fa9b4 2 months ago 299MB
hyperledger/fabric-tools latest b7bfddf508bc 2 months ago 1.46GB
hyperledger/fabric-tools x86_64-1.1.0 b7bfddf508bc 2 months ago 1.46GB
hyperledger/fabric-orderer latest ce0c810df36a 2 months ago 180MB
hyperledger/fabric-orderer x86_64-1.1.0 ce0c810df36a 2 months ago 180MB
hyperledger/fabric-peer latest b023f9be0771 2 months ago 187MB
hyperledger/fabric-peer x86_64-1.1.0 b023f9be0771 2 months ago 187MB
hyperledger/fabric-javaenv latest 82098abb1a17 2 months ago 1.52GB
hyperledger/fabric-javaenv x86_64-1.1.0 82098abb1a17 2 months ago 1.52GB
hyperledger/fabric-ccenv latest c8b4909d8d46 2 months ago 1.39GB
hyperledger/fabric-ccenv x86_64-1.1.0 c8b4909d8d46 2 months ago 1.39GB
hyperledger/fabric-zookeeper latest 92cbb952b6f8 2 months ago 1.39GB
hyperledger/fabric-zookeeper x86_64-0.4.6 92cbb952b6f8 2 months ago 1.39GB
hyperledger/fabric-kafka latest 554c591b86a8 2 months ago 1.4GB
hyperledger/fabric-kafka x86_64-0.4.6 554c591b86a8 2 months ago 1.4GB
hyperledger/fabric-couchdb latest 7e73c828fc5b 2 months ago 1.56GB
hyperledger/fabric-couchdb x86_64-0.4.6 7e73c828fc5b 2 months ago 1.56GB
また、platform binariesにはpeerコマンド自身も含まれているので、バージョンを表示してみるとこのようになる:
$ peer version
peer:
Version: 1.1.0
Go version: go1.9.2
OS/Arch: darwin/amd64
Experimental features: false
Chaincode:
Base Image Version: 0.4.6
Base Docker Namespace: hyperledger
Base Docker Label: org.hyperledger.fabric
Docker Namespace: hyperledger
2018-05-15 17:11:02.034 JST [main] main -> INFO 001 Exiting.....
たとえばprivate ledger機能を試すには、"Experimental features" がtrueになるように再ビルドする必要がある (たぶん)。
fabric-samplesのダウンロード
cd $WORK
git clone -b release-1.1 --depth=1 https://github.com/hyperledger/fabric-samples.git
確認のため、basic-network
を動かしてみる
cd $WORK
cd fabric-samples/basic-network
# スタート
start.sh
# ストップ。コンテナを止めるだけ
stop.sh
# 停止したコンテナなどを消すなどしたければこちら。`docker rmi`のエラーが出るけど気にしない
# これはこのスクリプトが他のサンプルと共用のため余計なコマンドが入っている
teardown.sh
basic-network
はpeer 1台、CouchDB 1台、orderer 1台、CA 1台を立ち上げるシンプルな設定である。起動されると以下の動作を行う:
- peer0から唯一のチャネル
mychannel
をpeer channel create
コマンドで作成する - peer0をそのチャネルに
peer channel join
コマンドで参加させる
特にチェーンコードをデプロイしたり呼び出すということはしていない。
動いているコンテナの確認
$ docker-compose ps
Name Command State Ports
----------------------------------------------------------------------------------------------------------------
ca.example.com sh -c fabric-ca-server sta ... Up 0.0.0.0:7054->7054/tcp
couchdb tini -- /docker-entrypoint ... Up 4369/tcp, 0.0.0.0:5984->5984/tcp, 9100/tcp
orderer.example.com orderer Up 0.0.0.0:7050->7050/tcp
peer0.org1.example.com peer node start Up 0.0.0.0:7051->7051/tcp, 0.0.0.0:7053->7053/tcp
ログの確認
特定のコンテナのログが見たいときはその名前を指定する。-f
を指定するとtailモードになる。
$ docker-compose logs
peer0.org1.example.com | 2018-05-15 08:32:00.738 UTC [nodeCmd] serve -> INFO 001 Starting peer:
peer0.org1.example.com | Version: 1.1.0
peer0.org1.example.com | Go version: go1.9.2
peer0.org1.example.com | OS/Arch: linux/amd64
peer0.org1.example.com | Experimental features: false
peer0.org1.example.com | Chaincode:
peer0.org1.example.com | Base Image Version: 0.4.6
peer0.org1.example.com | Base Docker Namespace: hyperledger
peer0.org1.example.com | Base Docker Label: org.hyperledger.fabric
peer0.org1.example.com | Docker Namespace: hyperledger
peer0.org1.example.com |
peer0.org1.example.com | 2018-05-15 08:32:00.741 UTC [ledgermgmt] initialize -> INFO 002 Initializing ledger mgmt
peer0.org1.example.com | 2018-05-15 08:32:00.742 UTC [kvledger] NewProvider -> INFO 003 Initializing ledger provider
peer0.org1.example.com | 2018-05-15 08:32:00.801 UTC [couchdb] handleRequest -> WARN 004 Retrying couchdb request in 125ms. Attempt:1 Error:Get http://couchdb:5984/: dial tcp 172.23.0.3:5984: getsockopt: connection refused
(略)
orderer.example.com | 2018-05-15 08:32:18.479 UTC [policies] Evaluate -> DEBU 31c Signature set satisfies policy /Channel/Readers
orderer.example.com | 2018-05-15 08:32:18.480 UTC [policies] Evaluate -> DEBU 31d == Done Evaluating *policies.implicitMetaPolicy Policy /Channel/Readers
orderer.example.com | 2018-05-15 08:32:18.480 UTC [common/deliver] deliverBlocks -> DEBU 31e [channel: mychannel] Received seekInfo (0xc42010c220) start:<specified:<number:1 > > stop:<specified:<number:18446744073709551615 > > from 172.23.0.5:38980
orderer.example.com | 2018-05-15 08:32:18.480 UTC [fsblkstorage] waitForBlock -> DEBU 31f Going to wait for newer blocks. maxAvailaBlockNumber=[0], waitForBlockNum=[1]
peer CLI
peer0が参加しているチャネルの一覧を取得するにはdocker exec
を使用してpeer channel list
コマンドを実行する:
$ docker exec peer0.org1.example.com peer channel list
2018-05-15 08:48:07.033 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized
Channels peers has joined:
mychannel
2018-05-15 08:48:07.059 UTC [main] main -> INFO 002 Exiting.....