Hyperledger fabric 1.0.1 をドキュメント通りに動かす

# Hyperledger fabric 1.0.1 をドキュメント通りに動かす

Hyperledger fabric のドキュメントから[Chaincode for Developers](http://hyperledger-fabric.readthedocs.io/en/latest/chaincode4ade.html) にあるサンプルをそのまま動かしてみます。そのままでは芸がないので、Raspberry Pi3 で動かしてみた際のログです。

[Download Docker images](http://hyperledger-fabric.readthedocs.io/en/latest/chaincode4ade.html#download-docker-images) とありますが、Raspberry Pi3 でセルフビルドした `fabric-1.0.1`を使用しています。

(2017/12/17) _fabric-1.0.5_ で実行してみました。

## Install Hyperledger Fabric Samples

`github.com`から[fabric-samples](https://github.com/hyperledger/fabric-samples.git) をクローンしておきます。今回は、その中にある、`chaincode-docker-devmode`を使用しています。

```
# git clone https://github.com/hyperledger/fabric-samples.git
# cd fabric-samples/chaincode-docker-devmode
```

## [Terminal1 - Start the network](http://hyperledger-fabric.readthedocs.io/en/latest/chaincode4ade.html#terminal-1-start-the-network)

```
# docker-compose -f docker-compose-simple.yaml up
```

ここで、セルフビルドした`docker images`は以下の状態です。

```
# docker images | grep fabric
hyperledger/fabric-tools         armv7l-1.0.1-snapshot-d9c3202   49c9cfafb134        4 weeks ago         1.13GB
hyperledger/fabric-tools         latest                          49c9cfafb134        4 weeks ago         1.13GB
hyperledger/fabric-testenv       armv7l-1.0.1-snapshot-d9c3202   59f5cdae348c        4 weeks ago         1.21GB
hyperledger/fabric-testenv       latest                          59f5cdae348c        4 weeks ago         1.21GB
hyperledger/fabric-buildenv      armv7l-1.0.1-snapshot-d9c3202   871ed15933a3        4 weeks ago         1.13GB
hyperledger/fabric-buildenv      latest                          871ed15933a3        4 weeks ago         1.13GB
hyperledger/fabric-orderer       armv7l-1.0.1-snapshot-d9c3202   f8f5a7c74dc7        4 weeks ago         191MB
hyperledger/fabric-orderer       latest                          f8f5a7c74dc7        4 weeks ago         191MB
hyperledger/fabric-peer          armv7l-1.0.1-snapshot-d9c3202   b29908598708        4 weeks ago         193MB
hyperledger/fabric-peer          latest                          b29908598708        4 weeks ago         193MB
hyperledger/fabric-javaenv       armv7l-1.0.1-snapshot-d9c3202   21ee891f0e3a        4 weeks ago         1.2GB
hyperledger/fabric-javaenv       latest                          21ee891f0e3a        4 weeks ago         1.2GB
hyperledger/fabric-ccenv         armv7l-1.0.1-snapshot-d9c3202   5f5d092f4106        4 weeks ago         1.11GB
hyperledger/fabric-ccenv         latest                          5f5d092f4106        4 weeks ago         1.11GB
hyperledger/fabric-couchdb       armv7l-1.0.1-snapshot-d9c3202   fcc9b87debd4        5 weeks ago         1.3GB
hyperledger/fabric-couchdb       latest                          fcc9b87debd4        5 weeks ago         1.3GB
hyperledger/fabric-kafka         armv7l-1.0.1-snapshot-d9c3202   cf92328f7a5f        5 weeks ago         1.11GB
hyperledger/fabric-kafka         latest                          cf92328f7a5f        5 weeks ago         1.11GB
hyperledger/fabric-zookeeper     armv7l-1.0.1-snapshot-d9c3202   0b5260df8980        5 weeks ago         1.13GB
hyperledger/fabric-zookeeper     latest                          0b5260df8980        5 weeks ago         1.13GB
hyperledger/fabric-ca            armv7l-1.0.1-snapshot-a21585d   0c7f9ed80088        5 weeks ago         240MB
hyperledger/fabric-ca            latest                          0c7f9ed80088        5 weeks ago         240MB
hyperledger/fabric-baseimage     armv7l-0.3.2                    48f9201658bb        5 weeks ago         1.09GB
hyperledger/fabric-baseimage     armv7l-0.3.2-snapshot-fcaa2fb   48f9201658bb        5 weeks ago         1.09GB
hyperledger/fabric-baseimage     latest                          48f9201658bb        5 weeks ago         1.09GB
hyperledger/fabric-basejvm       armv7l-0.3.2-snapshot-fcaa2fb   5490f550786d        5 weeks ago         456MB
hyperledger/fabric-basejvm       latest                          5490f550786d        5 weeks ago         456MB
hyperledger/fabric-baseos        armv7l-0.3.2                    f846d9fe1f89        5 weeks ago         171MB
hyperledger/fabric-baseos        armv7l-0.3.2-snapshot-fcaa2fb   f846d9fe1f89        5 weeks ago         171MB
hyperledger/fabric-baseos        latest                          f846d9fe1f89        5 weeks ago         171MB
```

実は、ちょっと手を入れて `Makefile` でビルドした後で一部 `docker tag` しているものがあります。

先ほどの `docker-compose`の結果が、こんな感じです。

```
# docker ps
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                                            NAMES
c871233d26c7        hyperledger/fabric-tools     "/bin/bash -c ./sc..."   5 minutes ago       Up 5 minutes                                                         cli
9d334f97d2b6        hyperledger/fabric-ccenv     "/bin/bash -c 'sle..."   5 minutes ago       Up 5 minutes                                                         chaincode
174fd57ac7fb        hyperledger/fabric-peer      "peer node start -..."   5 minutes ago       Up 5 minutes        0.0.0.0:7051->7051/tcp, 0.0.0.0:7053->7053/tcp   peer
693d0962f027        hyperledger/fabric-orderer   "orderer"                5 minutes ago       Up 5 minutes        0.0.0.0:7050->7050/tcp                           orderer
```

あ、`docker-compose` も古かったので Raspberry Pi3 用に作り直しています。
（[Raspberry Pi用docker-composeの構築](http://qiita.com/tkyonezu/items/ceaaf41924df39254058))

## [Terminal 2 - Build & start the chaincode](http://hyperledger-fabric.readthedocs.io/en/latest/chaincode4ade.html#terminal-2-build-start-the-chaincode)

```
# docker exec -it chaincode bash
# cd sacc
# go build
# CORE_PEER_ADDRESS=peer:7051 CORE_CHAINCODE_ID_NAME=mycc:0 ./sacc
```

もちろん、ここで使っている Raspberry Pi3 には [go 1.8.3](https://golang.org/dl/) を導入済みです。と言って、[Download Page](https://golang.org/dl/) をみたら既に `go1.9` になってましたけど。

## [Terminal 3 - Use the chaincode](http://hyperledger-fabric.readthedocs.io/en/latest/chaincode4ade.html#terminal-3-use-the-chaincode)

ここから cli で chaincode を動かしていますが、一応 `time` コマンドも使ってみました。

最初に chaincode を install します。

```
# docker exec -it cli bash
# time peer chaincode install -p chaincodedev/chaincode/sacc -n mycc -v 0
...
real    0m4.136s
user    0m1.330s
sys     0m0.420s
```

(2017/12/17) _fabric-1.0.5_の場合です。

```
real    0m2.385s
user    0m0.650s
sys     0m0.350s
```

次に、instantiate でアセットに 10 を設定します。

```
# time peer chaincode instantiate -n mycc -v 0 -c '{"Args":["a","10"]}' -C myc
...
real    0m2.849s
user    0m0.960s
sys     0m0.880s
```

(2017/12/17) _fabric-1.0.5_の場合です。

```
real    0m2.721s
user    0m0.420s
sys     0m0.090s
```

query で、アセットに 10 が設定されていることを確認してみます。

```
# time peer chaincode query -n mycc -c '{"Args":["query","a"]}' -C myc
...
Query Result: 10
2017-08-25 14:29:58.334 UTC [main] main -> INFO 007 Exiting.....

real    0m0.932s
user    0m0.380s
sys     0m0.080s
```

(2017/12/17) _fabric-1.0.5_の場合です。

```
real    0m0.477s
user    0m0.170s
sys     0m0.080s
```

invoke でアセットの値を 20 にしてみます。

```
# time peer chaincode invoke -n mycc -c '{"Args":["set", "a", "20"]}' -C myc
...
2017-08-25 14:31:28.726 UTC [chaincodeCmd] chaincodeInvokeOrQuery -> INFO 0a8 Chaincode invoke successful. result: status:200 payload:"20"
2017-08-25 14:31:28.727 UTC [main] main -> INFO 0a9 Exiting.....

real    0m1.868s
user    0m0.940s
sys     0m0.070s
```

(2017/12/17) _fabric-1.0.5_の場合です。

```
real    0m0.765s
user    0m0.310s
sys     0m0.130s
```

再度 query で、アセットの値が 20 になっていることを確認してみます。

```
# time peer chaincode query -n mycc -c '{"Args":["query","a"]}' -C myc
...
Query Result: 20
2017-08-25 14:40:50.400 UTC [main] main -> INFO 007 Exiting.....

real    0m0.912s
user    0m0.410s
sys     0m0.090s
```

(2017/12/17) _fabric-1.0.5_の場合です。

```
real    0m0.412s
user    0m0.180s
sys     0m0.090s
```

無事にドキュメント通りの動作を確認することができました。

最後に、お行儀良く `docker-compose down` でコンテナを停止して削除しておきます。

```
# docker-compose -f docker-compose-simple.yaml down
Stopping cli       ... done
Stopping chaincode ... done
Stopping peer      ... done
Stopping orderer   ... done
Removing cli       ... done
Removing chaincode ... done
Removing peer      ... done
Removing orderer   ... done
Removing network chaincodedockerdevmode_default
```

ドキュメント通りにうごかしてみたという、只それだけのお話でした。