Hyperledger-Fabric がv1.4がリリースされていたので、上っ面だけ触ってみた

どーも、のぶこふです。

他のプラットフォーム~~に浮気~~を遊んでいたら、Hyperledger Fabric が v1.4 になっていたので、本当に上っ面だけ触って見ました。

サンプルをインストールして、クエリを叩くところまでを最短で突っ走っていきます。

## ■ What is v1.4？

- 2019/01/09　リリース！！
-  ＼プログラミングモデルのアップデート／
    - Javascriptのみ
    - Golang,Javaに関しては変更なし
- 後方（v1.3）互換性があるので、v1.3のサンプルなども動く
- Visual Studio Codeでは、Hyperledger Fabricのアドオンも提供されている（2019/02/01現在：プレビュー版）

## ■ Let's try
### ▼ 参考サイト
IBM Developer
「Hyperledger Fabric 入門, 第 6 回　Hyperledger Fabric v1.4 のプログラミングモデル」
https://www.ibm.com/developerworks/jp/cloud/library/cl-hyperledger-fabric-basic-6/index.html

### ▼ 環境準備（前提条件）
以下、すべての前提条件がインストールされていること。
インストール方法は省略。
詳細は公式参照
https://hyperledger-fabric.readthedocs.io/en/release-1.4/prereqs.html

* cURL
* Docker、Docker Compose
    * Docker：v17.06.2-ce以上
    * Docker Compose：v1.14.0以上
* Golang
    * v1.11.x
* Node.js、npm
    * Node.js：v8.x
　* npm：5.6.0
* Python
    * 2.7

### ▼ サンプルのチュートリアル
#### １．インストール
```
// インストール
curl -sSL http://bit.ly/2ysbOFE | bash -s 1.4.0

// 確認（fabric-samplesがある）
$ ls
fabric-samples

// ディレクトリ移動
$ cd fabric-samples/

// 確認（とりあえずいっぱいある）
$ ls
CODE_OF_CONDUCT.md		balance-transfer		config
CONTRIBUTING.md			basic-network			fabcar
Jenkinsfile			bin				first-network
LICENSE				chaincode			high-throughput
MAINTAINERS.md			chaincode-docker-devmode	interest_rate_swaps
README.md			commercial-paper		scripts

// ディレクトリ移動
$ cd fabcar/

// 確認（とりあえずいっぱいある）
$ ls
javascript		javascript-low-level	startFabric.sh		typescript
```

#### ２．HyperledgerFabricのブロックチェーンネットワークを起動＆確認
```
// ネットワークの起動
./startFabric.sh javascript

// Dockerのプロセス確認
// 以下のコンテナが表示されればOK
$ docker ps --format "{{.Names}}"
dev-peer0.org1.example.com-fabcar-1.0
cli
peer0.org1.example.com
couchdb
orderer.example.com
ca.example.com
```

#### ３．ユーザの作成
```
// 改定されたサンプルプログラムが含まれている
// javascript-low-levelディレクトリには、v1.3までのサンプルが格納されている
cd javascript

// ライブラリのインストール
npm install

// 管理ユーザを作成する
$ node enrollAdmin.js
Wallet path: /fabric-samples/fabcar/javascript/wallet
Successfully enrolled admin user "admin" and imported it into the wallet

// ユーザを登録する
$ node registerUser.js
Wallet path: /fabric-samples/fabcar/javascript/wallet
Successfully registered and enrolled admin user "user1" and imported it into the wallet

// wallet フォルダの中に admin と user1 の 2 つのユーザが作成される
$ ls -R
admin	user1

./admin:
0a9d7bfd96160d878afa17862a87803e5f4ab1de200b5d3e9ada05d495c68a4b-priv
0a9d7bfd96160d878afa17862a87803e5f4ab1de200b5d3e9ada05d495c68a4b-pub
7d4d245d5a1a67425132d51517affc31051b3ad9235c7aed809d528c8c72a375-priv
admin

./user1:
7d4d245d5a1a67425132d51517affc31051b3ad9235c7aed809d528c8c72a375-priv
7d4d245d5a1a67425132d51517affc31051b3ad9235c7aed809d528c8c72a375-pub
user1
```

#### ４．チェーンコードの実行
```
// 台帳の検索
$ node query.js 
Wallet path: lab-dev/HyperledgerFabric/fabric-samples/fabcar/javascript/wallet
Transaction has been evaluated, result is: "[{\"Key\":\"CAR0\",\"Record\":{\"color\":\"blue\",\"docType\":\"car\",\"make\":\"Toyota\",\"model\":\"Prius\",\"owner\":\"Tomoko\"}},{\"Key\":\"CAR1\",\"Record\":{\"color\":\"red\",\"docType\":\"car\",\"make\":\"Ford\",\"model\":\"Mustang\",\"owner\":\"Brad\"}},{\"Key\":\"CAR2\",\"Record\":{\"color\":\"green\",\"docType\":\"car\",\"make\":\"Hyundai\",\"model\":\"Tucson\",\"owner\":\"Jin Soo\"}},{\"Key\":\"CAR3\",\"Record\":{\"color\":\"yellow\",\"docType\":\"car\",\"make\":\"Volkswagen\",\"model\":\"Passat\",\"owner\":\"Max\"}},{\"Key\":\"CAR4\",\"Record\":{\"color\":\"black\",\"docType\":\"car\",\"make\":\"Tesla\",\"model\":\"S\",\"owner\":\"Adriana\"}},{\"Key\":\"CAR5\",\"Record\":{\"color\":\"purple\",\"docType\":\"car\",\"make\":\"Peugeot\",\"model\":\"205\",\"owner\":\"Michel\"}},{\"Key\":\"CAR6\",\"Record\":{\"color\":\"white\",\"docType\":\"car\",\"make\":\"Chery\",\"model\":\"S22L\",\"owner\":\"Aarav\"}},{\"Key\":\"CAR7\",\"Record\":{\"color\":\"violet\",\"docType\":\"car\",\"make\":\"Fiat\",\"model\":\"Punto\",\"owner\":\"Pari\"}},{\"Key\":\"CAR8\",\"Record\":{\"color\":\"indigo\",\"docType\":\"car\",\"make\":\"Tata\",\"model\":\"Nano\",\"owner\":\"Valeria\"}},{\"Key\":\"CAR9\",\"Record\":{\"color\":\"brown\",\"docType\":\"car\",\"make\":\"Holden\",\"model\":\"Barina\",\"owner\":\"Shotaro\"}}]"

// 台帳の更新
$ node invoke.js 
Wallet path: lab-dev/HyperledgerFabric/fabric-samples/fabcar/javascript/wallet
2019-02-01T03:59:48.416Z - info: [TransactionEventHandler]: _strategySuccess: strategy success for transaction "738bf963cdbfb22b01f3df0e1204c502e834d1c7379d6e8b143fd68fb09d6ba8"
Transaction has been submitted
```

## まとめ
v1.3で構築までは行ったことはありましたが、なんとなく、以前よりも簡単に出来ているような・・・？
※多分、気のせいです

v1.4は、Hyperldger Fabric 初（？）のLTSであり、企業などでも使われやすいと思うので、目が離せないですね。

今回はここまでです。
ありがとうございました。