Vagrantを使ってHyperledger fabric v0.5のサンプルチェーンコードを試す

はじめに

v0.5-developer-previewを試してみましたので手順をまとめておきます。
最新版はv1.1.0があるのでだいぶ古い(v0.5は2016年にリリースされた)ようですがとりあえず試したいだけならこれでも大丈夫かと思います。

参考書籍:ブロックチェーン 仕組みと理論 サンプルで学ぶFinTechのコア技術

環境

  • Mac
  • Vagrant 2.0.3
  • Hyperledger fabric v0.5-developer-preview
  • go version go1.10.1 darwin/amd64

Go言語のセットアップ

以下記事がわかりやすいですのでそのまま参照しセットアップします。
[Go] MacにGo言語をインストール&セットアップする

リポジトリの用意

archveされているv0.5-developer-previewというブランチをローカルに用意します。

$ git clone https://github.com/hyperledger-archives/fabric.git
$ cd fabric/
$ git branch -r
  origin/HEAD -> origin/master
  origin/master
  origin/test-release
  origin/v0.5-developer-preview <= これを使います
$ git checkout -b v0.5-developer-preview origin/v0.5-developer-preview
Checking out files: 100% (421/421), done.
Branch v0.5-developer-preview set up to track remote branch v0.5-developer-preview from origin.
Switched to a new branch 'v0.5-developer-preview'
$ git branch
  master
* v0.5-developer-preview <= ブランチ切り替え完了

setup.shの修正

devenv/setup.sh b/devenv/setup.shを修正します。
v0.5-developer-previewで利用しているdockerのAPIが削除されているためdockerのバージョンを明示して対応します。
修正結果は以下の通りです、docker-engine=1.10.2-0~trustyとなっている部分です。

$ git diff
diff --git a/devenv/setup.sh b/devenv/setup.sh
index 90f5437..e2e3800 100755
--- a/devenv/setup.sh
+++ b/devenv/setup.sh
@@ -67,7 +67,8 @@ case "${DOCKER_STORAGE_BACKEND}" in
 esac

 # Install docker
-apt-get install -y linux-image-extra-$(uname -r) apparmor docker-engine
+# apt-get install -y linux-image-extra-$(uname -r) apparmor docker-engine
+apt-get install -y linux-image-extra-$(uname -r) apparmor docker-engine=1.10.2-0~trusty

Vagrant起動

初回起動時は少し時間がかかります。

$ cd devenv/
$ vagrant up
$ vagrant ssh

※以降の作業はVagrantで起動したサーバ上で作業します。

CAサーバの起動

認証サーバの用意を進めます。
(Hyperledgerはパーミッション型ネットワーク)

$ cd $GOPATH/src/github.com/hyperledger/fabric/
$ make membersrvc
$ membersrvc

Validating Peer起動

※以下作業は別ターミナルで実施

Peerはビルド済みのため起動コマンドを実行します。
こちらはブロックを作成するノードの役割になります。

$ CORE_SECURITY_ENABLED=true CORE_SECURITY_PRIVACY=true peer node start --peer-chaincodedev

チェーンコードのビルド

※以下作業は別ターミナルで実施
サンプルのchaincode_example02というチェーンコードプロセスを起動します。
(Fabricの中ではこのチェーンコードでスマートコントラクトを実装している)

$ cd $GOPATH/src/github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02/
$ go build
$ CORE_CHAINCODE_ID_NAME=mycc CORE_PEER_ADDRESS=0.0.0.0:30303 ./chaincode_example02 

CAサーバにログイン

※以下作業は別ターミナルで実施
CAサーバにログインをします。
なお初期アカウント情報はfabric/membersrvc/membersrvc.yamlに記載されています。

$ peer network login jim -p 6avZQLwcUe9b <= 初期設定されているアカウント
2018/04/09 14:44:35 Load docker HostConfig: %+v &{[] [] []  [] false map[] [] false [] [] [] [] host    { 0} [] { map[]} false []  0 0 0 false 0    0 0 0 []}
14:44:35.615 [crypto] main -> INFO 002 Log level recognized 'info', set to INFO
14:44:35.632 [main] networkLogin -> INFO 003 CLI client login...
14:44:35.632 [main] networkLogin -> INFO 004 Local data store for client loginToken: /var/hyperledger/production/client/
14:44:35.633 [main] networkLogin -> INFO 005 Logging in user 'jim' on CLI interface...
14:44:35.768 [main] networkLogin -> INFO 006 Storing login token for user 'jim'.
14:44:35.768 [main] networkLogin -> INFO 007 Login successful for user 'jim'.
14:44:35.768 [main] main -> INFO 008 Exiting.....

デプロイトランザクションの実行

下記コマンドでブロックチェーンネットワークにデプロイしValidating Peerがチェーンコードを実行できるようになります。
コマンドが正常に実行されると、Harutoに100、Yuiに200という設定の状態になります。

$ CORE_SECURITY_ENABLED=true CORE_SECURITY_PRIVACY=true peer chaincode deploy -u jim -l golang -n mycc -c '{"Function":"init", "Args":["Haruto", "100", "Yui", "200"]}'
2018/04/09 14:45:57 Load docker HostConfig: %+v &{[] [] []  [] false map[] [] false [] [] [] [] host    { 0} [] { map[]} false []  0 0 0 false 0    0 0 0 []}
14:45:58.038 [crypto] main -> INFO 002 Log level recognized 'info', set to INFO
mycc

Invokeトランザクション実行

実際に取引を実行するコマンドです。
以下はHarutoからYuiに10送金する取引となります。

$ CORE_SECURITY_ENABLED=true CORE_SECURITY_PRIVACY=true peer chaincode invoke -u jim -l golang -n mycc -c '{"Function":"invoke", "Args":["Haruto", "Yui", "10"]}'
2018/04/09 14:46:06 Load docker HostConfig: %+v &{[] [] []  [] false map[] [] false [] [] [] [] host    { 0} [] { map[]} false []  0 0 0 false 0    0 0 0 []}
14:46:06.784 [crypto] main -> INFO 002 Log level recognized 'info', set to INFO
9b9451e4-d13b-44b0-a603-35e1ed371f54

Queryトランザクションの実行

以下は所持金を参照し送金が実行されたことを確認するコマンドです。
Harutoから送金がされているはずですので90となっていればOK。

$ CORE_SECURITY_ENABLED=true CORE_SECURITY_PRIVACY=true peer chaincode query -u jim -l golang -n mycc -c '{"Function":"query", "Args":["Haruto"]}'
2018/04/09 14:46:15 Load docker HostConfig: %+v &{[] [] []  [] false map[] [] false [] [] [] [] host    { 0} [] { map[]} false []  0 0 0 false 0    0 0 0 []}
14:46:15.980 [crypto] main -> INFO 002 Log level recognized 'info', set to INFO
90

まとめ

Vagrantfileの用意があるため非常に手軽にサンプルを試すことができました。
最新版のFabricはv1.1のようですのでまたこちらも試してみようと思います。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.