#はじめに
この記事はIBMのメインフレームでBlockchainを動かしてみた。Part1の続きです。
最初にこちらのページを参照してください。
#Part 2 — ブロックチェーンアプリケーションの作成とAPIの生成
ブロックチェーンアプリケーションのコンポーネントのインポート
手順の1〜5はゲストOSから一旦離れて、各自のPC(Mac OS)での作業になります。後のステップでPCに保管したファイルをブラウザーを介して読み込んだり、作成したアプリケーションをPCのファイルに保管したりします。
Windows端末の場合は事前にこちらのサイトからダウンロードして(下図参照)展開し、手順6から進めてください。
1.コンピュータの端末で、ホームディレクトリに移動します。 cd $HOME
2.まだインストールされていない場合は、システムにGitをインストールしてください。
3.Gitがインストールされたら、以下のコマンドを実行して、このエクササイズに必要なマテリアルをクローンします。
git clone https://github.com/IBM/HyperledgerFabric-on-LinuxOne.git
4.クローンしたファイルを見つけるには、cd HyperledgerFabric-on-LinuxOne/code/
を実行し、ls
を実行してディレクトリにあるファイルを確認します。
5.pwd
と入力し、どこのディレクトリにいるか覚えてください。以降のステップで必要になります。
ここからの手順で、"blockchain-journey”という新しいビジネスネットワークをweb playground上に作ります。(このとき、"admin"というネットワーク管理者ユーザーと、対応するビジネスネットワークカードも作られます)
6.Composer Playgroundが開いているブラウザに戻ります。(Composer PlaygroundはPart.1の手順32で開いています) 閉じた場合は、xxx.xxx.xx:8080
と入力してブラウザーで開くことができます。xはLinuxゲストのIPアドレスに対応しています。
注意:特定の画面でスクロールできない問題を防ぐには、ブラウザをフルスクリーン(完全拡張)モードで表示する必要があります。
7.Connection: Web Browser の下のDeploy a new business networkを選択します。
8.基本情報を入力します。
* あなたの新しいビジネスネットワークに名前をつけます :blockchain-journey
* ビジネスネットワークをどのように使用するかを説明してください :Creating my first blockchain network.
* 作成するネットワーク管理カードに名前をつけます : PeerAdmin@blockchain-journey
9.Choose a Business Network Definition to start with:が見えるまでスクロールし、empty-business-networkを選択し、Deployします。
10.My WalletからConnect nowを選択し、自分のビジネスネットワークに入ります。
ここからサンプルからファイルをインポートします。
12.Add a fileポップアップダイアログからbrowseを選択します。
13.ファイルエクスプローラウィンドウで、ファイルをダウンロードした場所に移動します。 この場所を見つけるヒントが必要な場合は、手順5を参照してください。 README.mdを選択し、Openをクリックします。
15. Replace
を選択すると、現在のファイルが置き換えられます。
16. Composer Playgroundにファイルを追加していきましょう。 手順11〜15を繰り返して、次のファイルを追加します。
- org.acme.sample.cto - これはmodelsフォルダにあります。 この演習では、このファイルを使用して、資産とトランザクションのモデルを作成します。 このファイルに参加者を作成することもできます。これは、Javaクラスの作成と、クラス内で必要なものの定義に似ています。-
logic.js - これはlibフォルダにあります。 これは、アプリケーションの中心になるJavaScriptファイルです。 このファイルには、トランザクションの発生方法を定義するスマートコントラクトのコードがあります。 これはJavaメソッドに似ています。
-
最後に:permissions.acl - これは、ブロックチェーンネットワークの参加者のアクセス許可を制限するものです。
-
Model.ctoを削除します: - これは、サンプルに付属の空のモデルファイルです。 潜在的な問題を避けるために削除します。
17. ファイルはすべてComposer Playgroundに読み込まれます。 ブラウザの左側にある[DeployChanges]をクリックします。
![alt](https://github.com/IBM/hyperledger-fabric-on-linux-one/blob/master/images/InitialDeploy.png?raw=true)ブロックチェーンアプリケーションの作成
18. Model Fileをクリックします。
![alt](https://github.com/IBM/hyperledger-fabric-on-linux-one/blob/master/images/SelectModelFile.png?raw=true)19. 右のエディタをクリックすると、モデルの作成が始まります。
- 注 :演習が終わるまでnamespaceは変更しないでください。20. 新しい行で、Sensor
に次の属性を与えます。
o String teamID
- これはあなたに割り当てられた値になります。(自動付与されます)
- o String teamName
- これは何でもかまいません! 任意の名前をつけてください。
- o Double sensorTemp
- センサーの温度がここに保存されます。
- o Double thermostatTemp
- サーモスタットの温度を作成します。
- o String recommendation
- これはCompareWeatherトランザクションに基づいて設定されます。
- Deploy Changes をクリックして変更を保存します。
![alt](https://github.com/IBM/hyperledger-fabric-on-linux-one/blob/master/images/SensorModel.png?raw=true)
21. SetSensorTemp
の最初のトランザクションモデルを作成します。 次の属性を入力しましょう。
--> Sensor gauge
— トランザクションでは、Sensor
資産にデータを格納する必要があります。これにより、アセットへの参照が渡され、トランザクションのロジックでアセットを処理できます。
-
o Double newSensorValue
— これは、Node-Redセンサーから温度を引き上げるためにトランザクションに渡される温度によって設定される変数です。 -
Deploy Changes をクリックして変更を保存します。
22.ChangeThermostatTemp
トランザクションモデルに以下を追記します。
-
--> Sensor thermostat
— このトランザクションでは、サーモスタットのSensor
アセットにデータを格納する必要があります。これにより、アセットへ参照が渡され、トランザクションのロジック内でアセットを処理できます。 -
o Double newThermostatValue
— この設定により、あらたに取得した値をトランザクションに送信することができます。logic
タブでは、この値をゲージの表示と比較し、サーモスタット値を調整する必要があるかを決定します。 -
Deploy Changes
をクリックして変更を保存します。
23.CompareWeather
トランザクションモデルに以下を追記します。
-
--> Sensor recommend
— このトランザクションでは、Sensor
アセットにデータを格納する必要があります。これにより、アセットへ参照が渡され、トランザクションのロジック内でアセットを処理できます。 -
o Double outsideTemp
— 気象情報については、WeatherUnderground.com APIを見れば、呼び出しに返されるすべてのデータを確認することができます。これらのデータを基に、実際の外気温と体感温度を取得してサーモスタットの推奨値を決定します。この変数は、Weather.comの外気温をNodeRed経由で取得します。APIページのモデルには、データが摂氏または華氏のどちらで返されるか、およびその変数型が表示されます。 この演習では摂氏を使用します。 -
o Double feelsLike
— Weather.comのfeelslikeの値を格納します。 -
Deploy Changes
をクリックして保存します。
24.Script File
を選択します。
(項番が飛びますが、オリジナルサイトの通りです)
26.エディターでコードを確認します。Model File
で定義した変数名と一致しているかを検査します。※大文字小文字の違いはエラーの原因になります。
27.上部にある**Test
** タブをクリックして、コードをテストしましょう。
28.このケースではPeerがいないため、テストタブの左側にアセットメニューが開かれています。
トランザクションを実行するには、アセットが必要なので、 **+ Create New Asset
**をクリックします。
29. 以下の情報を入力して、コードのテスト用のアセットを作ります。
-
"teamID": "**xxx**"
— 作成するアセットのTeam IDを指定します。**xxx** には任意の数字を入力します。 -
"teamName":""
— 任意のTeam名を入力できます。入力は必須ではありません。 -
"sensorTemp": **0**
— センサーの温度を指定します。**0** には任意の値を入力します。NodeRedを使用する場合は、温度は摂氏として扱われます。 -
"thermostatTemp": **0**
— サーモスタットの設定温度を指定します。**0** には任意の値を入力します。ここではサーモスタットの設定値を初期化します。稼働させたい温度を入力してください。 -
"recommendation": ""
— ここはそのままにします。 - 上記で**で囲まれた
teamID
とsensorTemp
、thermostatTemp
に入力した値は、忘れないようにメモに残しておいてください。
31. Team のアセットが作成されると、登録した内容が以下のように表示されるはずです。
32. トランザクションを実行する準備ができました。Submit Transaction をクリックします。
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 をクリックします。
34. 正しくTeam IDを入力しトランザクションを実行すると、All Transactions の画面で実行されたトランザクションを確認できるはずです。view record をクリックして、前のステップで入力したデータを確認してください。おめでとうございます!これでトランザクションが完了しました。👍
35. SetSensorTemp
トランザクションが sensorTemp
の値を更新したかどうかを確認します。Sensor をクリックします。
36. sensorTemp
の値を確認します。SetSensorTemp
トランザクションで指定した値に変わったことを確認できます。
37. 別のトランザクションを実行します。Submit Transaction をクリックします。
38. 次はサーモスタットの温度を変更する ChangeThermostatTemp
トランザクションを実行します。
-
JSON Dataの
"thermostat": "resource:org.acme.sample.Sensor#xxxx"
を修正します。— xxxxにTeam IDを入力します。 -
JSON Dataの
"newThermostatValue": 0
を修正します。— 設定したいサーモスタットの温度を入力します。 -
入力するサーモスタットの温度は、
sensorTemp
の現行値から±3℃以内の値を指定しなければなりません。±3℃より離れた値を入力すると、次のようなエラーが表示されます。このメッセージが表示された場合、他の値を入力しSubmitをクリックしてください。
-
サーモスタットの温度を調整する権限があれば、トランザクション登録画面に戻り、実行したトランザクションデータを確認することができます。
-
もしTeam IDを修正するのを忘れたり、誤ったTeam IDを入力してしまった場合は、次のようなエラーが表示されます。正しいTeam IDを確認して再実行してください。
39. 最後に実行したトランザクションの更新内容を確認します。Sensor をクリックしてください。
40. thermostatTemp
の値が ChangeThermostatTemp
トランザクションで指定した値に更新されていることを確認します。
41. 次は CompareWeather
トランザクションを実行します。Submit Transaction をクリックしてください。
42. Transaction Type ドロップダウンで CompareWeather
を選択します。
43. CompareWeather
トランザクションを実行します。このトランザクションを実行すると、外気温(温度計が示す温度)や体で感じる気温をもとに、サーモスタットの設定温度が推奨値に更新されます。
- JSON Dataの
recommend": "resource:org.acme.sample.Sensor#xxxx
を修正します。— xxxxにTeam IDを入力します。 - JSON Dataの
"outsideTemp": 0
を修正します。— 外気温を入力します。 - JSON Dataの
"feelsLike": 0
を修正します。— ここには、体で感じる気温を入力します。 -
Submit をクリックします。
44. 実行したトランザクションがトランザクション記録に表示されていることを確認します。
46. Team アセットのrecommendation
変数に新しいメッセージが表示され、thermostatValue
が推奨値に更新されたことを確認します。
47. あなたのコントラクトは何をできるのかを理解するためのすべてのシナリオについて、引き続きコードのテストを実行してください。残りのシナリオについてのヒントは以下の通りです:
-
ChangeThemostatTemp:
-
thermostatValue
がSenserアセットで更新された場合の成功トランザクション -
サーモスタット値を調整する権限がない場合に、Submit Transactionウィンドウに表示されるエラーメッセージ
-
CompareWeather:
-
気温が高い場合の、
outsideTemp
の値に基づくトランザクション -
気温が適温の場合の、
outsideTemp
の値に基づくトランザクション -
気温が低い場合の、
outsideTemp
の値に基づくトランザクション -
気温が高い場合の、
feelsLike
の値に基づくトランザクション -
気温が適温の場合の、
feelsLike
の値に基づくトランザクション -
気温が低い場合の、
feelsLike
の値に基づくトランザクション -
注: これまでの手順と同様に、トランザクション実行後、アセットの値が正しく更新されることを確認してください。
アプリケーションをHyperledger Fabricにデプロイする
48. Hyperledger Composer Playgroundを実行しているブラウザに戻り、Define タブをクリックし、コードをPC上に保存するため__Export__ をクリックします。これは安全な方法です。ExportはPart2の初めからImportしたすべての個別ファイルを、business network archive (.bna)と呼ばれる圧縮ファイルに保存します。
49. ポップアップダイアログでbnaファイルのエクスポート先ディレクトリーを選択し、Save をクリックします。
50. ブラウザ右上の__Admin__ を選択し、My Business Networks をクリックします。
51. ページ中央Connection: hlfv1の下の__Deploy a new business network__ をクリックします。
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
53. 手順49.でblockchain-journey.bnaファイルを保存したディレクトリに移動してblockchain-journey.bnaファイルを選択し、Open をクリックします。
54. ページの一番下まで画面をスクロールし、以下のとおり入力します:
- ID and Secret を選択
-
admin
の__Enrollment ID__ を作成 -
adminpw
の__Enrollment Secret__ を作成 - 注:もし異なるEnrollment IdとEnrollment Secretを作成した場合、そのID用にネットワークカードを作成・インポートする必要があります。詳しくはHyperledger Composer documentation for more informationを参照ください。
55. ページの一番上まで画面をスクロールし、右側にある__Deploy__ をクリックします。
56. Connection: hlfv1の下で、新しくデプロイしたhlfv1-blockchain-journeyネットワークの__Connect now__ をクリックします。
57. ターミナルに戻り、docker ps -a
と入力します。Composer PlaygroundがHyperledger Fabricにコードをデプロイした新しいコンテナを確認できます。
58. おめでとうございます!! これでブロックチェーンアプリケーションをHyperledger Fabricでデプロイできました。
ここからは、REST APIを起動して、swaggerUIにアクセスし、APIのテストを行います。
63. API rest serverを開始するためにターミナルから次のコマンドを発行してください。(項番が飛びますが、オリジナルサイトの通りです)
・ 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
64. rest serverのプロセスが起動していることを次のコマンドで確認してください。
・ps -ef|grep rest
65. APIを確認するために、ブラウザーに戻って、新しいタブかウィンドウを開いて、アドレスバーに以下のurlを入れてください。xはLinuxゲストのIPアドレスです。
・http://xxx.xxx.x.x:3000/explorer
以下のようなページが表示されるはずです。
66. 色々なメソッドを展開して、REST APIを通じて作成できるさまざまな呼び出しとパラメータを確認します。
67. おめでとうございます! これで、動作可能なブロックチェーンアプリケーションとブロックチェーンアプリケーションを呼び出すためのAPIが作成されました。
Part3に続く
IBMのメインフレームでBlockchainを動かしてみた。(Hyperledger Fabric and Hyperledger Composer on LinuxONE) Part3