IBMのメインフレームでBlockchainを動かしてみた。(Hyperledger Fabric and Hyperledger Composer on LinuxONE) Part2

#はじめに
この記事は[IBMのメインフレームでBlockchainを動かしてみた。Part1](https://qiita.com/truepot/private/17d1ca382a8813208bf5)の続きです。
最初にこちらのページを参照してください。

#[Part 2 — ブロックチェーンアプリケーションの作成とAPIの生成](https://github.com/IBM/hyperledger-fabric-on-linux-one#part-2--creating-a-blockchain-application-and-generating-api-1)

ブロックチェーンアプリケーションのコンポーネントのインポート

**手順の1〜5はゲストOSから一旦離れて、各自のPC(Mac OS)での作業になります。後のステップでPCに保管したファイルをブラウザーを介して読み込んだり、作成したアプリケーションをPCのファイルに保管したりします。**
**Windows端末の場合は事前に[こちら](https://github.com/IBM/hyperledger-fabric-on-linux-one?cm_sp=IBMCode-_-run-blockchain-technology-on-a-linux-mainframe-_-Get-the-Code)のサイトからダウンロードして（下図参照）展開し、手順6から進めてください。**
![image.png](https://qiita-image-store.s3.amazonaws.com/0/284619/c46efe55-5a65-1c79-4db3-4a59ad46f29e.png)

1.コンピュータの端末で、ホームディレクトリに移動します。 `cd $HOME`

2.まだインストールされていない場合は、システムに[Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git_)をインストールしてください。

3.Gitがインストールされたら、以下のコマンドを実行して、このエクササイズに必要なマテリアルをクローンします。
`git clone https://github.com/IBM/HyperledgerFabric-on-LinuxOne.git`
![](https://github.com/IBM/hyperledger-fabric-on-linux-one/raw/master/images/CloneGitHubRepo.png)

4.クローンしたファイルを見つけるには、`cd HyperledgerFabric-on-LinuxOne/code/`を実行し、`ls`を実行してディレクトリにあるファイルを確認します。
![](https://github.com/IBM/hyperledger-fabric-on-linux-one/raw/master/images/MoveToCodeDir.png)

5.`pwd`と入力し、どこのディレクトリにいるか覚えてください。以降のステップで必要になります。
![](https://github.com/IBM/hyperledger-fabric-on-linux-one/raw/master/images/pwd.png)


<b>ここからの手順で、"blockchain-journey”という新しいビジネスネットワークをweb playground上に作ります。（このとき、"admin"というネットワーク管理者ユーザーと、対応するビジネスネットワークカードも作られます）</b>

6.Composer Playgroundが開いているブラウザに戻ります。（Composer PlaygroundはPart.1の手順32で開いています） 閉じた場合は、`xxx.xxx.xx:8080`と入力してブラウザーで開くことができます。xはLinuxゲストのIPアドレスに対応しています。

注意：特定の画面でスクロールできない問題を防ぐには、ブラウザをフルスクリーン（完全拡張）モードで表示する必要があります。
![](https://github.com/IBM/hyperledger-fabric-on-linux-one/raw/master/images/ComposerPlaygroundUI2.png)

7.<I>Connection: Web Browser</I> の下の<b>Deploy a new business network</b>を選択します。
![](https://github.com/IBM/hyperledger-fabric-on-linux-one/raw/master/images/SelectImportReplace.png)

8.基本情報を入力します。
    * あなたの新しいビジネスネットワークに名前をつけます ：blockchain-journey
    * ビジネスネットワークをどのように使用するかを説明してください ：Creating my first blockchain network.
    * 作成するネットワーク管理カードに名前をつけます　:　PeerAdmin@blockchain-journey
![](https://github.com/IBM/hyperledger-fabric-on-linux-one/raw/master/images/basicinfo.png)

9.<I>Choose a Business Network Definition to start with:</I>が見えるまでスクロールし、<b>empty-business-network</b>を選択し、<b>Deploy</b>します。
![](https://github.com/IBM/hyperledger-fabric-on-linux-one/raw/master/images/EmptyBusinessNetwork.png)

10.<I>My Wallet</I>から<b>Connect now</b>を選択し、自分のビジネスネットワークに入ります。
![](https://github.com/IBM/hyperledger-fabric-on-linux-one/raw/master/images/ConnectNow.png)

<b>ここからサンプルからファイルをインポートします。<b>

11.<b>Add a File</b>を選択します。
![](https://github.com/IBM/hyperledger-fabric-on-linux-one/raw/master/images/AddFile.png)

12.<I>Add a file</I>ポップアップダイアログから<b>browse</b>を選択します。
![](https://github.com/IBM/hyperledger-fabric-on-linux-one/raw/master/images/SelectBrowse.png)

13.ファイルエクスプローラウィンドウで、ファイルをダウンロードした場所に移動します。 この場所を見つけるヒントが必要な場合は、手順5を参照してください。 README.mdを<b>選択</b>し、Openを<b>クリック</b>します。
![](https://github.com/IBM/hyperledger-fabric-on-linux-one/raw/master/images/SelectREADME.png)

14.<i>add</i>を<b>選択</b>します。
![](https://github.com/IBM/hyperledger-fabric-on-linux-one/raw/master/images/AddREADME.png)

<P>15. <code>Replace</code>を選択すると、現在のファイルが置き換えられます。
 </P>
![alt](https://github.com/IBM/hyperledger-fabric-on-linux-one/blob/master/images/READMEReplace.png?raw=true)


<P>16. Composer Playgroundにファイルを追加していきましょう。
<strong>手順11〜15を繰り返して、次のファイルを追加します。</strong></P>
- org.acme.sample.cto - これはmodelsフォルダにあります。 この演習では、このファイルを使用して、資産とトランザクションのモデルを作成します。 このファイルに参加者を作成することもできます。これは、Javaクラスの作成と、クラス内で必要なものの定義に似ています。

- logic.js - これはlibフォルダにあります。 これは、アプリケーションの中心になるJavaScriptファイルです。 このファイルには、トランザクションの発生方法を定義するスマートコントラクトのコードがあります。 これはJavaメソッドに似ています。

- <strong>最後に</strong>：permissions.acl - これは、ブロックチェーンネットワークの参加者のアクセス許可を制限するものです。

- <strong>Model.ctoを削除します：</strong> - これは、サンプルに付属の空のモデルファイルです。 潜在的な問題を避けるために削除します。
	- model.ctoをクリック
	- ごみ箱のアイコンをクリックして削除します。
	![alt](https://github.com/IBM/hyperledger-fabric-on-linux-one/blob/master/images/RemoveModelCTO.png?raw=true)



<P>17. ファイルはすべてComposer Playgroundに読み込まれます。 ブラウザの左側にある[DeployChanges]をクリックします。</P>
![alt](https://github.com/IBM/hyperledger-fabric-on-linux-one/blob/master/images/InitialDeploy.png?raw=true)

**ブロックチェーンアプリケーションの作成**


<P>18. <strong>Model File</strong>をクリックします。</P>
![alt](https://github.com/IBM/hyperledger-fabric-on-linux-one/blob/master/images/SelectModelFile.png?raw=true)

<P>19. 右のエディタを<strong>クリック</strong>すると、モデルの作成が始まります。</P>
- <strong>注</strong> ：演習が終わるまでnamespaceは変更しないでください。

![alt](https://github.com/IBM/hyperledger-fabric-on-linux-one/blob/master/images/ClickEditor.png?raw=true)

<P>20. 新しい行で、<code>Sensor</code> に次の属性を与えます。</P>
- 注：小文字 "o"がモデルの箇条書きとして使用されます。
- <code>o String teamID</code> - これはあなたに割り当てられた値になります。（自動付与されます）
- <code>o String teamName</code> - これは何でもかまいません！ 任意の名前をつけてください。
- <code>o Double sensorTemp</code> - センサーの温度がここに保存されます。
- <code>o Double thermostatTemp</code> - サーモスタットの温度を作成します。
- <code>o String recommendation</code> - これはCompareWeatherトランザクションに基づいて設定されます。
- <strong>Deploy Changes</strong> をクリックして変更を保存します。
![alt](https://github.com/IBM/hyperledger-fabric-on-linux-one/blob/master/images/SensorModel.png?raw=true)

<P>21. <code>SetSensorTemp</code>の最初のトランザクションモデルを作成します。 次の属性を入力しましょう。</P>
- <code>--> Sensor gauge</code> — トランザクションでは、<code>Sensor</code>資産にデータを格納する必要があります。これにより、アセットへの参照が渡され、トランザクションのロジックでアセットを処理できます。

- <code>o Double newSensorValue</code> — これは、Node-Redセンサーから温度を引き上げるためにトランザクションに渡される温度によって設定される変数です。

- <strong>Deploy Changes</strong> をクリックして変更を保存します。
![alt](https://github.com/IBM/hyperledger-fabric-on-linux-one/blob/master/images/SetSensorTempModel.png?raw=true)
22.`ChangeThermostatTemp` トランザクションモデルに以下を追記します。

* `--> Sensor thermostat` — このトランザクションでは、サーモスタットの`Sensor`アセットにデータを格納する必要があります。これにより、アセットへ参照が渡され、トランザクションのロジック内でアセットを処理できます。
* `o Double newThermostatValue` — この設定により、あらたに取得した値をトランザクションに送信することができます。`logic`タブでは、この値をゲージの表示と比較し、サーモスタット値を調整する必要があるかを決定します。
* `Deploy Changes`をクリックして変更を保存します。
<img src="https://github.com/IBM/hyperledger-fabric-on-linux-one/blob/master/images/ChangeThermostatModel.png?raw=true"width=100%>

23.`CompareWeather` トランザクションモデルに以下を追記します。

* `--> Sensor recommend` — このトランザクションでは、`Sensor`アセットにデータを格納する必要があります。これにより、アセットへ参照が渡され、トランザクションのロジック内でアセットを処理できます。
* `o Double outsideTemp` — 気象情報については、[WeatherUnderground.com API](https://www.wunderground.com/weather/api/d/docs?d=data/conditions)を見れば、呼び出しに返されるすべてのデータを確認することができます。これらのデータを基に、実際の外気温と体感温度を取得してサーモスタットの推奨値を決定します。この変数は、Weather.comの外気温をNodeRed経由で取得します。APIページのモデルには、データが摂氏または華氏のどちらで返されるか、およびその変数型が表示されます。 この演習では摂氏を使用します。
* `o Double feelsLike` — Weather.comのfeelslikeの値を格納します。
* `Deploy Changes`をクリックして保存します。
<img src="https://github.com/IBM/hyperledger-fabric-on-linux-one/blob/master/images/CompareWeatherModel.png?raw=true"width=100%>

24.`Script File`を選択します。
<img src=https://raw.githubusercontent.com/IBM/hyperledger-fabric-on-linux-one/master/images/ClickScriptFile.png width=100%>
(項番が飛びますが、[オリジナルサイト](https://github.com/IBM/hyperledger-fabric-on-linux-one#part-2--creating-a-blockchain-application-and-generating-api-1)の通りです)
26.エディターでコードを確認します。`Model File`で定義した変数名と一致しているかを検査します。※大文字小文字の違いはエラーの原因になります。
<img src=https://raw.githubusercontent.com/IBM/hyperledger-fabric-on-linux-one/master/images/ReviewScriptFile.png width=100%>
27.上部にある**`Test`** タブをクリックして、コードをテストしましょう。
<img src=https://raw.githubusercontent.com/IBM/hyperledger-fabric-on-linux-one/master/images/ClickTest.png width=100%>
28.このケースではPeerがいないため、テストタブの左側にアセットメニューが開かれています。
トランザクションを実行するには、アセットが必要なので、 **`+ Create New Asset`**をクリックします。
<img src=https://raw.githubusercontent.com/IBM/hyperledger-fabric-on-linux-one/master/images/CreateNewAsset.png width=100%>
29\. 以下の情報を入力して、コードのテスト用のアセットを作ります。

- `"teamID": "**xxx**"` — 作成するアセットのTeam IDを指定します。__\*\*xxx\*\*__ には任意の数字を入力します。
- `"teamName":""` — 任意のTeam名を入力できます。入力は必須ではありません。 
- `"sensorTemp": **0**` — センサーの温度を指定します。__\*\*0\*\*__ には任意の値を入力します。NodeRedを使用する場合は、温度は摂氏として扱われます。
- `"thermostatTemp": **0**` — サーモスタットの設定温度を指定します。__\*\*0\*\*__ には任意の値を入力します。ここではサーモスタットの設定値を初期化します。稼働させたい温度を入力してください。
- `"recommendation": ""` — ここはそのままにします。
- 上記で**で囲まれた `teamID` と `sensorTemp` 、 `thermostatTemp` に入力した値は、忘れないようにメモに残しておいてください。
<img src="https://github.com/IBM/hyperledger-fabric-on-linux-one/raw/master/images/NewAssetValues.png"width=100%>

30\. __Create New__ をクリックします。
<img src="https://github.com/IBM/hyperledger-fabric-on-linux-one/raw/master/images/ClickCreateNew.png"width=100%>

31\. __Team__ のアセットが作成されると、登録した内容が以下のように表示されるはずです。
<img src="https://github.com/IBM/hyperledger-fabric-on-linux-one/raw/master/images/Team01Asset.png"width=100%>

32\. トランザクションを実行する準備ができました。__Submit Transaction__ をクリックします。
<img src="https://github.com/IBM/hyperledger-fabric-on-linux-one/raw/master/images/ClickSubmitTransaction.png"width=100%>

33\. __Submit Transaction__ ダイアログが開きます。

- センサーの温度を更新する `SetSensorTemp` トランザクションを実行します。
 - __Transaction Type__ は `SetSensorTemp` を選択します。
 - JSON Dataの `"gauge": "resource:org.acme.sample.Sensor#xxxx"` を修正します。— __JSON Data Preview__ にはサンプルのJSONデータが表示されるので、これを修正してトランザクションデータを作成できます。xxxxには先程作成したアセットのTeam IDを入力します。
 - JSON Dataの `"newSensorValue": 0` を修正します。— 更新するセンサーの温度を入力します。
 - __Submit__ をクリックします。
<img src="https://github.com/IBM/hyperledger-fabric-on-linux-one/raw/master/images/SetSensorTempTran.png"width=100%>

34\. 正しくTeam IDを入力しトランザクションを実行すると、_All Transactions_ の画面で実行されたトランザクションを確認できるはずです。__view record__ をクリックして、前のステップで入力したデータを確認してください。おめでとうございます！これでトランザクションが完了しました。👍
<img src="https://github.com/IBM/hyperledger-fabric-on-linux-one/raw/master/images/TransactionRegistry.png"width=100%>

35\. `SetSensorTemp` トランザクションが `sensorTemp` の値を更新したかどうかを確認します。__Sensor__ をクリックします。
<img src="https://github.com/IBM/hyperledger-fabric-on-linux-one/raw/master/images/ClickSensor.png"width=100%>

36\. `sensorTemp` の値を確認します。`SetSensorTemp` トランザクションで指定した値に変わったことを確認できます。
<img src="https://github.com/IBM/hyperledger-fabric-on-linux-one/raw/master/images/VerifySensorTemp.png"width=100%>

37\. 別のトランザクションを実行します。__Submit Transaction__ をクリックします。
<img src="https://github.com/IBM/hyperledger-fabric-on-linux-one/raw/master/images/SubmitTransaction2.png"width=100%>

38\. 次はサーモスタットの温度を変更する `ChangeThermostatTemp` トランザクションを実行します。

- __Transaction Type__ ドロップダウンで `ChangeThermostatTemp`を選択します。
<img src="https://github.com/IBM/hyperledger-fabric-on-linux-one/raw/master/images/SelectChangeThermostat.png"width=100%>

- JSON Dataの `"thermostat": "resource:org.acme.sample.Sensor#xxxx"` を修正します。— xxxxにTeam IDを入力します。
- JSON Dataの`"newThermostatValue": 0`を修正します。— 設定したいサーモスタットの温度を入力します。
- __Submit__ をクリックします。
<img src="https://github.com/IBM/hyperledger-fabric-on-linux-one/raw/master/images/ChangeThermostatTran.png"width=100%>

- 入力するサーモスタットの温度は、 `sensorTemp` の現行値から±3℃以内の値を指定しなければなりません。±3℃より離れた値を入力すると、次のようなエラーが表示されます。このメッセージが表示された場合、他の値を入力しSubmitをクリックしてください。
<img src="https://github.com/IBM/hyperledger-fabric-on-linux-one/raw/master/images/ChangeThermostatError.png"width=100%>

- サーモスタットの温度を調整する権限があれば、トランザクション登録画面に戻り、実行したトランザクションデータを確認することができます。
<img src="https://github.com/IBM/hyperledger-fabric-on-linux-one/raw/master/images/TransactionRegistry2.png"width=100%>

- もしTeam IDを修正するのを忘れたり、誤ったTeam IDを入力してしまった場合は、次のようなエラーが表示されます。正しいTeam IDを確認して再実行してください。
<img src="https://github.com/IBM/hyperledger-fabric-on-linux-one/raw/master/images/TeamIDError.png"width=100%>

39\. 最後に実行したトランザクションの更新内容を確認します。__Sensor__ をクリックしてください。
<img src="https://github.com/IBM/hyperledger-fabric-on-linux-one/raw/master/images/ClickSensor2.png"width=100%>

40\. `thermostatTemp` の値が `ChangeThermostatTemp` トランザクションで指定した値に更新されていることを確認します。

- 以下の図では、初めに20に設定したサーモスタットの温度が、現在は16に設定されていることを確認できます。
<img src="https://github.com/IBM/hyperledger-fabric-on-linux-one/raw/master/images/VerifyThermostatTemp.png"width=100%>

41\. 次は `CompareWeather` トランザクションを実行します。__Submit Transaction__ をクリックしてください。
<img src="https://github.com/IBM/hyperledger-fabric-on-linux-one/raw/master/images/SubmitTransaction3.png"width=100%>

42\. __Transaction Type__ ドロップダウンで `CompareWeather`を選択します。
<img src="https://github.com/IBM/hyperledger-fabric-on-linux-one/raw/master/images/Part1_Step36.png"width=100%>

43\. `CompareWeather` トランザクションを実行します。このトランザクションを実行すると、外気温（温度計が示す温度）や体で感じる気温をもとに、サーモスタットの設定温度が推奨値に更新されます。

- JSON Dataの `recommend": "resource:org.acme.sample.Sensor#xxxx` を修正します。— xxxxにTeam IDを入力します。
- JSON Dataの`"outsideTemp": 0`を修正します。— 外気温を入力します。
- JSON Dataの`"feelsLike": 0`を修正します。— ここには、体で感じる気温を入力します。
- __Submit__ をクリックします。
<img src="https://github.com/IBM/hyperledger-fabric-on-linux-one/raw/master/images/CompareWeatherTran.png"width=100%>

44\. 実行したトランザクションがトランザクション記録に表示されていることを確認します。
<img src="https://raw.githubusercontent.com/IBM/hyperledger-fabric-on-linux-one/master/images/TransactionRegistry3.png"width=100%>

45\. __Sensor__ をクリックします。
<img src="https://raw.githubusercontent.com/IBM/hyperledger-fabric-on-linux-one/master/images/ClickSensor3.png"width=100%>

46\. __Team__ アセットの`recommendation`変数に新しいメッセージが表示され、`thermostatValue`が推奨値に更新されたことを確認します。
<img src="https://raw.githubusercontent.com/IBM/hyperledger-fabric-on-linux-one/master/images/VerifyRecommendation.png"width=100%>

47\. あなたのコントラクトは何をできるのかを理解するためのすべてのシナリオについて、引き続きコードのテストを実行してください。残りのシナリオについてのヒントは以下の通りです：

- ChangeThemostatTemp:
 -  `thermostatValue`がSenserアセットで更新された場合の成功トランザクション
 - サーモスタット値を調整する権限がない場合に、Submit Transactionウィンドウに表示されるエラーメッセージ

- CompareWeather:
 - 気温が高い場合の、`outsideTemp`の値に基づくトランザクション
 - 気温が適温の場合の、`outsideTemp`の値に基づくトランザクション
 - 気温が低い場合の、`outsideTemp`の値に基づくトランザクション
 - 気温が高い場合の、`feelsLike`の値に基づくトランザクション
 - 気温が適温の場合の、`feelsLike`の値に基づくトランザクション
 - 気温が低い場合の、`feelsLike`の値に基づくトランザクション

- 注: これまでの手順と同様に、トランザクション実行後、アセットの値が正しく更新されることを確認してください。

<img src="https://raw.githubusercontent.com/IBM/hyperledger-fabric-on-linux-one/master/images/ClickSensor3.png"width=100%>

アプリケーションをHyperledger Fabricにデプロイする
48\. Hyperledger Composer Playgroundを実行しているブラウザに戻り、__Define__ タブをクリックし、コードをPC上に保存するため__Export__ をクリックします。これは安全な方法です。ExportはPart2の初めからImportしたすべての個別ファイルを、business network archive (.bna)と呼ばれる圧縮ファイルに保存します。
<img src="https://raw.githubusercontent.com/IBM/hyperledger-fabric-on-linux-one/master/images/ClickExport.png"width=100%>

49\. ポップアップダイアログでbnaファイルのエクスポート先ディレクトリーを選択し、__Save__ をクリックします。
<img src="https://raw.githubusercontent.com/IBM/hyperledger-fabric-on-linux-one/master/images/SaveFile2.png"width=100%>

50\. ブラウザ右上の__Admin__ を選択し、__My Business Networks__ をクリックします。
<img src="https://raw.githubusercontent.com/IBM/hyperledger-fabric-on-linux-one/master/images/ClickLogout.png"width=100%>

51\. ページ中央Connection: hlfv1の下の__Deploy a new business network__ をクリックします。
<img src="https://raw.githubusercontent.com/IBM/hyperledger-fabric-on-linux-one/master/images/DeployNetwork.png"width=100%>

52\. BASIC INFORMATIONの下の入力欄に以下のとおり入力し、__Drop here to upload or browse__ をクリックします。

- Business Network: hlfv1-blockchain-journey
- Description: "Blockchain Journey network deployed to hlfv1"
- Network Admin Card: admin@hlfv1-blockchain-journey
<img src="https://raw.githubusercontent.com/IBM/hyperledger-fabric-on-linux-one/master/images/DeployToHLFV1.png"width=100%>

53\. 手順49.でblockchain-journey.bnaファイルを保存したディレクトリに移動してblockchain-journey.bnaファイルを選択し、__Open__ をクリックします。 
<img src="https://raw.githubusercontent.com/IBM/hyperledger-fabric-on-linux-one/master/images/OpenBlockchainJourney.png"width=100%>

54\. ページの一番下まで画面をスクロールし、以下のとおり入力します：

- __ID and Secret__ を選択
- `admin`の__Enrollment ID__ を作成
- `adminpw`の__Enrollment Secret__ を作成
- 注：もし異なるEnrollment IdとEnrollment Secretを作成した場合、そのID用にネットワークカードを作成・インポートする必要があります。詳しくは[Hyperledger Composer documentation for more information](https://hyperledger.github.io/composer//reference/composer.card.create)を参照ください。 
<img src="https://raw.githubusercontent.com/IBM/hyperledger-fabric-on-linux-one/master/images/IDCardCreds.png"width=100%>

55\. ページの一番上まで画面をスクロールし、右側にある__Deploy__ をクリックします。
<img src="https://raw.githubusercontent.com/IBM/hyperledger-fabric-on-linux-one/master/images/ClickDeploy2.png"width=100%>

56\. Connection: hlfv1の下で、新しくデプロイしたhlfv1-blockchain-journeyネットワークの__Connect now__ をクリックします。
<img src="https://raw.githubusercontent.com/IBM/hyperledger-fabric-on-linux-one/master/images/journeydeploy.png"width=100%>

57\. ターミナルに戻り、`docker ps -a`と入力します。Composer PlaygroundがHyperledger Fabricにコードをデプロイした新しいコンテナを確認できます。
<img src="https://raw.githubusercontent.com/IBM/hyperledger-fabric-on-linux-one/master/images/PlaygroundContainer.png"width=100%>

58\. おめでとうございます！！:clap: これでブロックチェーンアプリケーションをHyperledger Fabricでデプロイできました。



**ここからは、REST APIを起動して、swaggerUIにアクセスし、APIのテストを行います。**
63. API rest serverを開始するためにターミナルから次のコマンドを発行してください。(項番が飛びますが、[オリジナルサイト](https://github.com/IBM/hyperledger-fabric-on-linux-one#part-2--creating-a-blockchain-application-and-generating-api-1)の通りです)　
・ `mkdir /data/linux1/playground`
・ `nohup composer-rest-server -c admin@hlfv1-blockchain-journey -n always -w true>/data/linux1/playground/rest.stdout 2>/data/linux1/playground/rest.stderr & disown`
![StartRestServer.png](https://qiita-image-store.s3.amazonaws.com/0/273603/2e0ad6c3-4af0-1781-fa74-12c81b951563.png)
64. rest serverのプロセスが起動していることを次のコマンドで確認してください。
・`ps -ef|grep rest`
![StartRestServer.png](https://qiita-image-store.s3.amazonaws.com/0/273603/b7146473-0849-5b10-c50a-16810bbcc877.png)
65. APIを確認するために、ブラウザーに戻って、新しいタブかウィンドウを開いて、アドレスバーに以下のurlを入れてください。xはLinuxゲストのIPアドレスです。
・`http://xxx.xxx.x.x:3000/explorer`
以下のようなページが表示されるはずです。
![RestAPI.png](https://qiita-image-store.s3.amazonaws.com/0/273603/3b0eef7e-3b28-5a17-4139-3eedc2e70f38.png)
66. 色々なメソッドを展開して、REST APIを通じて作成できるさまざまな呼び出しとパラメータを確認します。
![TestAPI.png](https://qiita-image-store.s3.amazonaws.com/0/273603/f2619507-4a0b-599a-0675-145c05edb758.png)
67. おめでとうございます！:clap:　これで、動作可能なブロックチェーンアプリケーションとブロックチェーンアプリケーションを呼び出すためのAPIが作成されました。







Part3に続く
[IBMのメインフレームでBlockchainを動かしてみた。(Hyperledger Fabric and Hyperledger Composer on LinuxONE) Part3](https://qiita.com/truepot/private/e59a8da65dc5395144f2)