LoginSignup
6
1

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-11-08

はじめに

この記事はIBMのメインフレームでBlockchainを動かしてみた。Part1の続きです。
最初にこちらのページを参照してください。

Part 2 — ブロックチェーンアプリケーションの作成とAPIの生成

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

手順の1〜5はゲストOSから一旦離れて、各自のPC(Mac OS)での作業になります。後のステップでPCに保管したファイルをブラウザーを介して読み込んだり、作成したアプリケーションをPCのファイルに保管したりします。
Windows端末の場合は事前にこちらのサイトからダウンロードして(下図参照)展開し、手順6から進めてください。
image.png

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を選択し、自分のビジネスネットワークに入ります。

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

11.Add a Fileを選択します。

12.Add a fileポップアップダイアログからbrowseを選択します。

13.ファイルエクスプローラウィンドウで、ファイルをダウンロードした場所に移動します。 この場所を見つけるヒントが必要な場合は、手順5を参照してください。 README.mdを選択し、Openをクリックします。

14.add選択します。

15. Replaceを選択すると、現在のファイルが置き換えられます。

alt

16. Composer Playgroundにファイルを追加していきましょう。 手順11〜15を繰り返して、次のファイルを追加します。

  • org.acme.sample.cto - これはmodelsフォルダにあります。 この演習では、このファイルを使用して、資産とトランザクションのモデルを作成します。 このファイルに参加者を作成することもできます。これは、Javaクラスの作成と、クラス内で必要なものの定義に似ています。

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

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

  • Model.ctoを削除します: - これは、サンプルに付属の空のモデルファイルです。 潜在的な問題を避けるために削除します。

    • model.ctoをクリック
    • ごみ箱のアイコンをクリックして削除します。 alt

17. ファイルはすべてComposer Playgroundに読み込まれます。 ブラウザの左側にある[DeployChanges]をクリックします。

alt

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

18. Model Fileをクリックします。

alt

19. 右のエディタをクリックすると、モデルの作成が始まります。

  • :演習が終わるまでnamespaceは変更しないでください。

alt

20. 新しい行で、Sensor に次の属性を与えます。

  • 注:小文字 "o"がモデルの箇条書きとして使用されます。
  • o String teamID - これはあなたに割り当てられた値になります。(自動付与されます)
  • o String teamName - これは何でもかまいません! 任意の名前をつけてください。
  • o Double sensorTemp - センサーの温度がここに保存されます。
  • o Double thermostatTemp - サーモスタットの温度を作成します。
  • o String recommendation - これはCompareWeatherトランザクションに基づいて設定されます。
  • Deploy Changes をクリックして変更を保存します。 alt

21. SetSensorTempの最初のトランザクションモデルを作成します。 次の属性を入力しましょう。

  • --> Sensor gauge — トランザクションでは、Sensor資産にデータを格納する必要があります。これにより、アセットへの参照が渡され、トランザクションのロジックでアセットを処理できます。

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

  • Deploy Changes をクリックして変更を保存します。
    alt
    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": "" — ここはそのままにします。
  • 上記で**で囲まれた teamIDsensorTempthermostatTemp に入力した値は、忘れないようにメモに残しておいてください。

30. Create New をクリックします。

31. Team のアセットが作成されると、登録した内容が以下のように表示されるはずです。

32. トランザクションを実行する準備ができました。Submit Transaction をクリックします。

33. Submit Transaction ダイアログが開きます。

  • センサーの温度を更新する SetSensorTemp トランザクションを実行します。
    • Transaction TypeSetSensorTemp を選択します。
    • 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 トランザクションを実行します。

  • Transaction Type ドロップダウンで ChangeThermostatTempを選択します。

  • JSON Dataの "thermostat": "resource:org.acme.sample.Sensor#xxxx" を修正します。— xxxxにTeam IDを入力します。

  • JSON Dataの"newThermostatValue": 0を修正します。— 設定したいサーモスタットの温度を入力します。

  • Submit をクリックします。

  • 入力するサーモスタットの温度は、 sensorTemp の現行値から±3℃以内の値を指定しなければなりません。±3℃より離れた値を入力すると、次のようなエラーが表示されます。このメッセージが表示された場合、他の値を入力しSubmitをクリックしてください。

  • サーモスタットの温度を調整する権限があれば、トランザクション登録画面に戻り、実行したトランザクションデータを確認することができます。

  • もしTeam IDを修正するのを忘れたり、誤ったTeam IDを入力してしまった場合は、次のようなエラーが表示されます。正しいTeam IDを確認して再実行してください。

39. 最後に実行したトランザクションの更新内容を確認します。Sensor をクリックしてください。

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

  • 以下の図では、初めに20に設定したサーモスタットの温度が、現在は16に設定されていることを確認できます。

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. 実行したトランザクションがトランザクション記録に表示されていることを確認します。

45. Sensor をクリックします。

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 を選択
  • adminEnrollment ID を作成
  • adminpwEnrollment 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. おめでとうございます!!:clap: これでブロックチェーンアプリケーションを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
StartRestServer.png
64. rest serverのプロセスが起動していることを次のコマンドで確認してください。
ps -ef|grep rest
StartRestServer.png
65. APIを確認するために、ブラウザーに戻って、新しいタブかウィンドウを開いて、アドレスバーに以下のurlを入れてください。xはLinuxゲストのIPアドレスです。
http://xxx.xxx.x.x:3000/explorer
以下のようなページが表示されるはずです。
RestAPI.png
66. 色々なメソッドを展開して、REST APIを通じて作成できるさまざまな呼び出しとパラメータを確認します。
TestAPI.png
67. おめでとうございます!:clap: これで、動作可能なブロックチェーンアプリケーションとブロックチェーンアプリケーションを呼び出すためのAPIが作成されました。

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

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1