[Blockchain]Hyperledger Fabricを試す(Hyperledger Explorer 構築編)

## 背景

Hyperledger Fabricの検証を進めている中で、周りから「確認するすべはコマンドしか無いのか？」と問われたことがありました。
GUIは案件の要件に即してフルスクラッチするものだと思っていたのですが、
なんと、公式のGUIツール「Hyperledger Explorer」を発見しました。
せっかくなのでこのツールも起動させてみたいと思います。

## 参考

[5 minutes to Install Hyperledger Explorer with Fabric on Ubuntu 18.04 DigitalOcean](https://medium.com/@eplt/5-minutes-to-install-hyperledger-explorer-with-fabric-on-ubuntu-18-04-digitalocean-9b100d0cfd7d)

## 手順

基本的には上記参照サイトの手順で良いのですが、かなり苦戦しました。
ポイントは「first-network.json」の編集です。
特にpathの修正ミスに注意が必要です。

また、上記参照サイトではv1.0.0を使用していますが、githubがバージョンアップしていました。
今回は上記参照サイトで使用し、検証実績のあるv1.0.0を使用しました。

```
git clone https://github.com/hyperledger/blockchain-explorer.git -b v1.0.0
```


## 動作確認

```
http://{fqdn}:8080/
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589067/5252a506-28cd-55a8-dd63-e58e9420c135.png)

```
ログイン情報
admin/adminpw

※ログインID/PWは「~/blockchain-explorer/app/platform/fabric/connection-profile/first-network.json」に記述されています
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589067/555ab098-efcc-a7f6-a1df-3b4270dcacea.png)


## (注意)再起動後

サーバを再起動後、byfnを正常に起動させるため、「./byfn.sh down」「./byfn.sh up」を実行するが、証明書が再作成されるようです。  
証明書のファイル名が変更になるため、Hyperledger Explorerの設定を変更しないと正常に起動しませんでした。

```
$ ./start.sh
************************************************************************************
**************************** Hyperledger Explorer **********************************
************************************************************************************

2020-07-15T00:31:24.366Z - error: [NetworkConfig101.js]: NetworkConfig101 - problem reading the PEM file :: Error: ENOENT: no such file or directory, open '/home/ubuntu/fabric-samples/first-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/b00e3cb64764faa44218395b1f6e5f88e55cd0a5bd1b18f6c50b60141c0deb53_sk'

$ ll /home/ubuntu/fabric-samples/first-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore
total 12
drwxr-xr-x 2 ubuntu ubuntu 4096 Jul 15 00:22 ./
drwxr-xr-x 7 ubuntu ubuntu 4096 Jul 15 00:22 ../
-rw------- 1 ubuntu ubuntu  241 Jul 15 00:22 982aaa8ef16d7ae834f3f5e326b46b15a41be4e28b056de7d3fc722f6ff4f15f_sk
※証明書のファイル名が異なっていることが分かります
```

そのため、以下を実行し、設定を変更する必要があります。

```
$ cd ~/blockchain-explorer/app/platform/fabric/connection-profile
$ cat first-network.json
※後のsedで使用するためkeystoreのファイル名をチェック

$ ls ~/fabric-samples/first-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/
※lsの結果ファイル名をコピー

$ sed -i -e "s#catしたkeystoreファイル名を指定#lsの結果ファイル名を指定#g" first-network.json
```

また、起動時に既にDBが存在していてもエラーとなり起動しませんでした。

```
[ERROR] main - <<<<<<<<<<<<<<<<<<<<<<<<<< Explorer Error >>>>>>>>>>>>>>>>>>>>>
[ERROR] main - Error :  [ 'Explorer is closing due to channel name [%s] is already exist in DB',
  'mychannel' ]
[ERROR] Sync - <<<<<<<<<<<<<<<<<<<<<<<<<< Synchronizer Error >>>>>>>>>>>>>>>>>>>>>
[ERROR] Sync - Error :  [ 'Channel name [%s] already exist in DB , Kindly re-run the DB scripts to proceed',
  'mychannel' ]
[INFO] Sync - <<<<<<<<<<<<<<<<<<<<<<<<<< Closing client processor >>>>>>>>>>>>>>>>>>>>>
```

そのため、Hyperledger Explorerが使用するDBを再構築しました。

```
$ cd ~/blockchain-explorer/app/persistence/fabric/postgreSQL/db
$ ./createdb.sh
```

以上を行うことで、Hyperledger Explorerを起動することができました。

```
$ cd ~/blockchain-explorer
$ ./start.sh
************************************************************************************
**************************** Hyperledger Explorer **********************************
************************************************************************************
```

## おわりに

参考サイトの手順が素晴らしくまとまっているので、とても参考になりました。
このHyperledger Explorerを使えば、Hyperledger Fabricの中でどのようなトランザクションが発行されているのか、その結果はどうなっているのかなどを確認することができます。
「かゆいところに手が届く」ツールではありませんが、簡易的にHyperledger Fabricを可視化する素晴らしいツールでした。
また、サーバの再起動後に使えなくなる現象についても証明書が再作成されるからという原因は分かりましたが、なぜ再作成されるのかという「真因」にはたどり着けていませんし、再作成しなくても利用できないのか？という疑問は残念ながら解消されていません。
もっと他にも汎用的な可視化ツールがあれば是非試してみたいと思います。