Hyperledger Fabricのblockchain explorerを構築してみる

Hyperledger Fabricのブロック状態を可視化できるblockchain explorerを構築してみます。

## 前提となる環境
前回、ローカル環境にHyperledger Fabricを構築しました。
[こちらの手順にて](https://qiita.com/dataspider-fan/items/df1406c9f527073ba750)あらかじめFabricの各サービスを起動しておきます。
Block explorerは8080ポートを使用します。ほかのアプリケーションが8080ポートを使用していないことを確認します。
なお、以下の手順はFabric CAを使用しない場合の設定です。

## Hyperledger Fabric Explorerの構築

### 構築に必要なファイルの準備
fabric-samplesフォルダと同階層に、blockchain-explorerコードをGitからcloneします。
cloneしたらtest-networkの証明書関連の情報を、explorerのフォルダにコピーします。

```bash
$ pwd
/c/Users/dssfan/fabric-samples
$ cd ../
$ git clone https://github.com/hyperledger-labs/blockchain-explorer
$ cd blockchain-explorer
$ cp -r ../fabric-samples/test-network/organizations .
```
### 設定ファイルの修正
blockchain-explorer下にコピーしたorganizations以下の証明書のパスを設定ファイルに記載します。
User1の情報として記載されている部分を、Adminの情報に置き換えます。

赤字：修正前
緑字：修正後
```diff
$ git diff

diff --git a/examples/net1/connection-profile/test-network.json b/examples/net1/connection-profile/test-network.json
index 44eb3dc..53b0812 100644
--- a/examples/net1/connection-profile/test-network.json
+++ b/examples/net1/connection-profile/test-network.json
@@ -29,11 +29,11 @@
                "Org1MSP": {
                        "mspid": "Org1MSP",
                        "adminPrivateKey": {
-                               "path": "/tmp/crypto/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/keystore/priv_sk"
+                               "path": "/tmp/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/e956a7d3bd5d1ad6cd0c666e64fdc9efc5b38f92831a82951e51815a477bc7ae_sk"
                        },
                        "peers": ["peer0.org1.example.com"],
                        "signedCert": {
-                               "path": "/tmp/crypto/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/signcerts/User1@org1.example.com-cert.pem"
+                               "path": "/tmp/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/cert.pem"
                        }
                }
        },

```

### blockchain explorerの起動
環境変数の情報を読み込み、Dockerを起動します。
この起動により、フロントエンドのサービスおよびブロック情報を格納するデータベースサービスが起動します。
docker psコマンドにより、hyperledger/explorerおよびhyperledger/explorer-dbが起動できていれば設定の完了です。
hyperledger/explorerが起動できない場合は、証明書等の設定に誤りがある可能性が高いので、パスおよびファイル名を確認します。

```bash
$ pwd
/c/Users/dssfan/blockchain-explorer
$ source .env
$ docker-compose up -d
$ docker ps
CONTAINER ID   IMAGE                               COMMAND                  CREATED          STATUS                    PORTS                                                                    NAMES
d5a74bf3bb1f   hyperledger/explorer:latest         "docker-entrypoint.s…"   51 minutes ago   Up 51 minutes             0.0.0.0:8080->8080/tcp                                                   explorer.mynetwork.com
580d4fbde358   hyperledger/explorer-db:latest      "docker-entrypoint.s…"   52 minutes ago   Up 52 minutes (healthy)   5432/tcp                                                                 explorerdb.mynetwork.com
6c76513a2f42   basic_ccaas_image:latest            "/tini -- /usr/src/a…"   4 hours ago      Up 4 hours                9999/tcp                                                                 peer0org2_basic_ccaas
4dc843b2ec54   basic_ccaas_image:latest            "/tini -- /usr/src/a…"   4 hours ago      Up 4 hours                9999/tcp                                                                 peer0org1_basic_ccaas
40df41fc37a5   hyperledger/fabric-tools:latest     "/bin/bash"              4 hours ago      Up 4 hours                                                                                         cli
15571810f48f   hyperledger/fabric-orderer:latest   "orderer"                4 hours ago      Up 4 hours                0.0.0.0:7050->7050/tcp, 0.0.0.0:7053->7053/tcp, 0.0.0.0:9443->9443/tcp   orderer.example.com
f201a78c1a91   hyperledger/fabric-peer:latest      "peer node start"        4 hours ago      Up 4 hours                0.0.0.0:9051->9051/tcp, 7051/tcp, 0.0.0.0:9445->9445/tcp                 peer0.org2.example.com
d97a72574304   hyperledger/fabric-peer:latest      "peer node start"        4 hours ago      Up 4 hours                0.0.0.0:7051->7051/tcp, 0.0.0.0:9444->9444/tcp                           peer0.org1.example.com
8d97d04e59de   hyperledger/fabric-ca:latest        "sh -c 'fabric-ca-se…"   4 hours ago      Up 4 hours                0.0.0.0:9054->9054/tcp, 7054/tcp, 0.0.0.0:19054->19054/tcp               ca_orderer
f21a5c3f7b1d   hyperledger/fabric-ca:latest        "sh -c 'fabric-ca-se…"   4 hours ago      Up 4 hours                0.0.0.0:8054->8054/tcp, 7054/tcp, 0.0.0.0:18054->18054/tcp               ca_org2
1e7d906c03b7   hyperledger/fabric-ca:latest        "sh -c 'fabric-ca-se…"   4 hours ago      Up 4 hours                0.0.0.0:7054->7054/tcp, 0.0.0.0:17054->17054/tcp                         ca_org1

```

## blockchain explorerの表示

### ブラウザから確認
ブラウザを起動し、http://localhost:8080にアクセスします。
ログイン画面が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2849535/be006048-dab1-4483-2458-5805d4638edb.png)

**User**: exploreradmin
**Password**：exploreradminpw
を入力します。
以下の画面が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2849535/22b1a263-a139-3e8a-8490-03cd79e9e3f0.png)

### トランザクション情報の確認
メニューからtransactionsをクリックします。
確認するTxIdをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2849535/6e960e6f-fbbd-68ca-70c5-eba3b006ea6e.png)

ダイアログにある、ReadもしくはWriteからトランザクションの入出力情報を確認することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2849535/8df10809-f831-b884-7ba6-d8b45e22a80e.png)

blockchain explorer構築手順は以上です。

## 補足
### ブロック情報の初期化
ブロック情報はデータベースに保持されています。
データベースを初期化する場合は以下のコマンドを実行し、Dockerボリュームを削除します。
```shell-session
$ pwd
/c/Users/dssfan/blockchain-explorer
$ docker-compose down -v
$ docker volume rm blockchain-explorer_pgdata
$ docker volume rm blockchain-explorer_walletstore
```

## 次回は
DataSpiderSDKによりアダプタの実装例を紹介したいと思います。