【Hyperledger Fabric v1.4.11】peer コマンドを実行する

# peer コマンドの概要
* ピアに対する特定のタスクセットを提供します。
* 5つの異なるサブコマンドを提供しています。

| サブコマンド | 説明 |
|:--|:--|
| chaincode | チェーンコードの管理 |
| channel | チャネルの管理 |
| version | バージョン情報の表示 |
| logging | ログの動的な表示・ログレベルの管理 |
| node | ピアノードの起動・ステータス確認 |

# 文法
```
peer chaincode [option] [flags]
peer channel   [option] [flags]
peer version   [option] [flags]
peer logging   [option] [flags]
peer node      [option] [flags]
```


# peer コマンドの設定項目

* peer コマンドの設定ファイル（core.yaml）
* MSP（CA）用の証明書・暗号鍵
* peer コマンドの環境変数

| 環境変数 | 説明 |
|:--|:--|
| FABRIC_CFG_PATH | コマンドの設定ファイルを配置するパスを指定 |
| CORE_PEER_ADDRESS | 操作するピアノードのアドレスとポーチ番号を指定（例：172.18.0.5:7051） |
| CORE_PEER_LOCALMSPID | 証明書検証等で問い合わせる際の MSP の ID を指定 |
| CORE_PEER_MSPCONFIGPATH | 各種証明書の配置ディレクトリパスを指定 |
| CORE_LOGGING_LEVEL | ログレベルの指定 |


# peer コマンドの使用準備

## 設定ファイル（core.yaml）の準備
以下のディレクトリに格納されているファイルを使用します。

```
~$ ls -l fabric/fabric-samples/config/
total 76
-rw-r--r-- 1 vagrant vagrant 25708 Mar  3 03:06 configtx.yaml
-rw-r--r-- 1 vagrant vagrant 30352 Mar  3 03:06 core.yaml
-rw-r--r-- 1 vagrant vagrant 16094 Mar  3 03:06 orderer.yaml
```

## MSP（CA）用の証明書・暗号鍵の準備
ここでは、作成済みのものを使用します。
通常は、configtxgen コマンドを用いて作成します。

## peer コマンドの環境変数の設定
ブロックチェーンネットワークに合わせて設定を行います。
ここでは、公式サンプルの basic-network を利用したブロックチェーンネットワークを使用します。

basic-network の起動後、「docker inspect」コマンドを使用して、通信先のピアノードのIPアドレスと、MSPID を調べます。

```
~$ docker ps
CONTAINER ID   IMAGE                        COMMAND                  CREATED       STATUS       PORTS                                                                                  NAMES
f723ae5ca9ed   hyperledger/fabric-peer      "peer node start"        2 hours ago   Up 2 hours   0.0.0.0:7051->7051/tcp, :::7051->7051/tcp, 0.0.0.0:7053->7053/tcp, :::7053->7053/tcp   peer0.org1.example.com
5b9cd973d81b   hyperledger/fabric-couchdb   "tini -- /docker-ent…"   2 hours ago   Up 2 hours   4369/tcp, 9100/tcp, 0.0.0.0:5984->5984/tcp, :::5984->5984/tcp                          couchdb
da11494d6c90   hyperledger/fabric-ca        "sh -c 'fabric-ca-se…"   2 hours ago   Up 2 hours   0.0.0.0:7054->7054/tcp, :::7054->7054/tcp                                              ca.example.com
5dea323c9daf   hyperledger/fabric-orderer   "orderer"                2 hours ago   Up 2 hours   0.0.0.0:7050->7050/tcp, :::7050->7050/tcp                                              orderer.example.com

~$ docker inspect  peer0.org1.example.com | grep -e IPAddress -e MSPID
                "CORE_PEER_LOCALMSPID=Org1MSP",
            "SecondaryIPAddresses": null,
            "IPAddress": "",
                    "IPAddress": "172.18.0.5",
```

以下のように環境変数を設定します。

| 環境変数 | 説明 |
|:--|:--|
| FABRIC_CFG_PATH | $HOME/fabric/fabric-samples/config |
| CORE_PEER_ADDRESS | 172.18.0.5:7051 |
| CORE_PEER_LOCALMSPID | Org1MSP |
| CORE_PEER_MSPCONFIGPATH | $HOME/fabric/fabric-samples/basic-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp |
| CORE_LOGGING_LEVEL | 未指定（デフォルトを使用） |

```
~$ export FABRIC_CFG_PATH=$HOME/fabric/fabric-samples/config
~$ export CORE_PEER_ADDRESS=172.18.0.5:7051
~$ export CORE_PEER_LOCALMSPID=Org1MSP
~$ export CORE_PEER_MSPCONFIGPATH=$HOME/fabric/fabric-samples/basic-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
```


# 動作確認
peer コマンドのヘルプを実行してみます。

```
~/fabric/fabric-samples/bin$ peer --help
Usage:
  peer [command]

Available Commands:
  chaincode   Operate a chaincode: install|instantiate|invoke|package|query|signpackage|upgrade|list.
  channel     Operate a channel: create|fetch|join|list|update|signconfigtx|getinfo.
  help        Help about any command
  logging     Logging configuration: getlevel|setlevel|getlogspec|setlogspec|revertlevels.
  node        Operate a peer node: start|status|reset|rollback.
  version     Print fabric peer version.

Flags:
  -h, --help   help for peer

Use "peer [command] --help" for more information about a command.
```

# 参考文献

https://hyperledger-fabric.readthedocs.io/en/release-1.4/commands/peercommand.html