Macでブロックチェーンに触れてみた (Hyperledger-fabric)


Macでブロックチェーンを動かしてみる

Hyperledger FabricはDockerコンテナとしてあるので、それをMacOSで利用することができます。
環境構築を行い、サンプル実行までの方法をまとめています。
サンプル実行できたらOKって感じなので中身は薄いです。
公式サンプルの「fabcar」でHyperledger Fabricの動作確認を行っていきます。
自分の環境では、以下の手順でいけました!

Go, node, Git, npmのバージョン

インストール前にそれぞれのバージョンを記載しておきました。
参考にしてください。

go
$ go version
go version go1.9.1 darwin/amd64
node
$ node -v
v8.11.4
Git
$ git --version
git version 2.14.3 (Apple Git-98)
npm
$ npm -v
3.10.10

Dockerは最新のやつで大丈夫そう。

Go,nodebrew, Docker, npmのインストール

Goのインストール

Homebrewでインストール
$brew install go
パスを通す
$ echo 'export GOPATH=$HOME/go' >> ~/.bash_profile
$ echo 'export PATH=$PATH:$GOPATH/bin' >> ~/.bash_profile
$ source ~/.bash_profile

nodebrewのインストール

culrでインストール
$ curl -L git.io/nodebrew | perl - setup
nodeのバージョン一覧表示
nodebrew ls-remote

インストール可能なバージョンの一覧が表示されます。

バージョン指定してnodeをインストール
$ nodebrew install-binary v8.11.4
lsでインストール済みの一覧表示
$ nodebrew ls
v6.2.1
v8.1.0
v8.11.4
v8.15.1
v10.12.0

current: v8.11.4

currentが現在利用中のバージョンとなっています。

Dockerのインストール

公式サイトからDocker for Macをインストールしました。
Docker for Mac
とりあえずインストールできたらOKです。

Hyperledger Fabricの環境構築

ここから環境構築していきます。

ディレクトリを作成
$ mkdir -p $GOPATH/src/github.com/hyperledger
$ cd $GOPATH/src/github.com/hyperledger
Gitリポジトリのコピーを取得
$ git clone https://github.com/hyperledger/fabric.git
$ cd fabric
ブランチを切り替える
$ git branch
* release-1.4
$ git checkout ae4e37d
$ git branch
* (HEAD detached at ae4e37dba)
  release-1.4

[git branch] で現在のブランチ名の左側に「*」が表示されます。
[git checkout ブランチ名 (ここではae4e37dというハッシュ値) ] でブランチを切り替えて、
[git branch]で確認してみると切り替わっていることが確認できます。

ディレクトリを移動し、buildする
$ cd $GOPATH/src/github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02
$ go build --tags nopkcs11 ./

buildは何も出力がなかったら成功です。

サンプルの実行準備

公式サンプルの「fabcar」でHyperledger Fabricの動作確認を行っていきます。
ここではその準備を行っていきます。

fabric-samplesの取得
$ git clone https://github.com/hyperledger/fabric-samples.git -b v1.0.6

fabcarサンプルのセットアップ
$ cd fabric-samples/fabcar/
$ npm install
   (略)
 (warningは無視)

セットアップスクリプトを実行する前にDockerを起動しておきます。
F4を押してアプリケーション一覧の中から起動します。

セットアップスクリプトを実行
./startFabric.sh

[docker ps] で起動しているコンテナを確認します。

コンテナが起動しているか確認
$ docker ps --format "{{.Names}}"
dev-peer0.org1.example.com-fabcar-1.0
cli
peer0.org1.example.com
couchdb
orderer.example.com
ca.example.com

6個起動していればOKです。

サンプルの実行

いよいよサンプルの実行です。

管理ユーザadminの登録
$ node enrollAdmin.js
      (略)
Successfully enrolled admin user "admin"
      (略)
一般ユーザuser1の登録
$ node registerUser.js 
      (略)
Successfully loaded admin from persistence
Successfully registered user1 - secret:beiNjAAEqimU
Successfully enrolled member user "user1" 
User1 was successfully registered and enrolled and is ready to intreact with the fabric network
ユーザuser1として全データの問い合わせを行い、結果を表示
$ node query.js 
      (略)
Successfully loaded user1 from persistence
Query has completed, checking results
Response is  [{"Key":"CAR0", "Record":{"colour":"blue","make":"Toyota","model":"Prius","owner":"Tomoko"}},
{"Key":"CAR1", "Record":{"colour":"red","make":"Ford","model":"Mustang","owner":"Brad"}},
{"Key":"CAR2", "Record":{"colour":"green","make":"Hyundai","model":"Tucson","owner":"Jin Soo"}},
{"Key":"CAR3", "Record":{"colour":"yellow","make":"Volkswagen","model":"Passat","owner":"Max"}},
{"Key":"CAR4", "Record":{"colour":"black","make":"Tesla","model":"S","owner":"Adriana"}},
{"Key":"CAR5", "Record":{"colour":"purple","make":"Peugeot","model":"205","owner":"Michel"}},
{"Key":"CAR6", "Record":{"colour":"white","make":"Chery","model":"S22L","owner":"Aarav"}},
{"Key":"CAR7", "Record":{"colour":"violet","make":"Fiat","model":"Punto","owner":"Pari"}},
{"Key":"CAR8", "Record":{"colour":"indigo","make":"Tata","model":"Nano","owner":"Valeria"}},
{"Key":"CAR9", "Record":{"colour":"brown","make":"Holden","model":"Barina","owner":"Shotaro"}}]


何やら、車の情報がたくさん出力されました。これでHyperledger Fabricのサンプルは実行できました。
SDK for Node.jsを利用した、Hyperledger FabricとのやりとりによってState DBの内容を取得しているそうです。詳しくは勉強中なので今後まとめていきたいと思います。