0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

はじめに

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のようですのでまたこちらも試してみようと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?