Skip to content

Latest commit

 

History

History
484 lines (357 loc) · 32 KB

README-ja.md

File metadata and controls

484 lines (357 loc) · 32 KB

See this lab in English

FabCar Blockchain Sample

Hyperledger Fabric sample Fabcar on IBM Blockchain Platform

このコードパターンは、IBM Blockchain Platformでネットワークを設定し、Fabcarスマートコントラクトをネットワークに展開する方法を示しています。 次に、IDを含むネットワークとやり取りしてスマートコントラクトでトランザクションを送信するようにアプリケーションをセットアップします。 アプリケーションは、Fabric Node SDKを使用してネットワークへのリクエストを処理するNode.jsサーバーと、Webインターフェースを起動するAngularクライアントでセットアップされます。

このコードパターンを完了すると、次のことができるようになります:

  • IBM Blockchain PlatformでHyperledger Fabricネットワークをセットアップする
  • IBM Blockchain Platformを介してスマートコントラクトをインストールおよびインスタンス化する
  • Hyperledger Fabric SDKを使用してNode.jsサーバーを開発し、展開されたネットワークと対話する
  • WebアプリのAngularフロントエンドを作成して、ネットワークとインターフェイスする

アプリケーション構成図

  1. Blockchain Operatorは、IBM Blockchain Platformサービスをセットアップします
  2. IBM Blockchain Platformを使用すると、IBM Kubernetes Service上にHyperledger Fabricネットワークを作成でき、ネットワーク上にFabcarスマートコントラクトをインストールしてインスタンス化できます。
  3. Node.jsアプリケーションサーバーは、Fabric sdkを使用して、IBM Blockchain Platformにデプロイされたネットワークとやり取りし、Webクライアント用のAPIを作成します
  4. AngularクライアントはNode.jsアプリケーションAPIを使用してネットワークと対話します 5.ユーザーは、Fabcar Angular Webインターフェースと対話して、ブロックチェーン台帳と状態を更新および照会します

必要なコンポーネント

  • IBM Blockchain Platform は、デプロイ手順を簡素化および加速できるユーザーインターフェイスを使用して、ブロックチェーンネットワークを完全に制御できます。また、IBM Cloud Kubernetes Serviceでブロックチェーンコンポーネントを管理します。
  • IBM Cloud Kubernetes Service は、コンピュートホストのクラスターを作成し、高可用性コンテナーを展開します。 Kubernetesクラスターを使用すると、アプリケーションを迅速にデプロイ、更新、スケーリングするために必要なリソースを安全に管理できます。
  • IBM Blockchain Platform Extension for VS Code は、Hyperledger Fabric環境への接続を含む、スマートコントラクトの開発、テスト、および展開においてユーザーを支援するように設計されています。

利用技術

  • Hyperledger Fabric v1.4 は、高度な機密性、弾力性、柔軟性、およびスケーラビリティを提供するモジュール式アーキテクチャに支えられた分散型台帳ソリューションのプラットフォームです。
  • Node.js は、サーバー側のJavaScriptコードを実行するオープンソースのクロスプラットフォームJavaScriptランタイム環境です。
  • Express.js は、Webおよびモバイルアプリケーションに堅牢な機能セットを提供する、最小限で柔軟なNode.js Webアプリケーションフレームワークです。
  • Angular.io これは、Webアプリケーションを構築するためのフロントエンドフレームワークです。

事前準備

アプリケーションの実行

次の手順に従って、このコードパターンをセットアップして実行します。 手順の詳細は以下のとおりです。

ステップ

ローカルネットワークで実行する場合は こちら を参照して下さい。

  1. リポジトリのクローン
  2. スマートコントラクトのパッケージ
  3. IBM Cloud サービスの作成
  4. ネットワークのビルド
  5. FabCarスマートコントラクトのネットワークへのデプロイ
  6. アプリケーションのネットワークへの接続
  7. アプリケーションの実行

1. リポジトリのクローン

こちらのリポジトリを任意のローカロフォルダへクローンします:

git clone https://github.com/IBM/fabcar-blockchain-sample.git
cd fabcar-blockchain-sample

2. スマートコントラクトのパッケージ

IBM Blockchain Platform拡張機能を使用して、Fabcarスマートコントラクトをパッケージ化します。

  • Visual Studioコードを開き、事前にCloneした fabcar-blockchain-sample リポジトリから contract フォルダーを開きます。 ** fabcar-blockchain-sample ディレクトリ全体ではなく、 contract フォルダーを開くことが重要です。そうしないと、使用しているプログラミング言語が理解できないというエラーが表示されます。**

  • いろいろなVS Code オプションを表示するには、 F1キーを押します。 IBM Blockchain Platform:Package Open Project を選択します。

  • 左側の IBM Blockchain Platform 拡張ボタンをクリックします。 これにより、パッケージ化されたコントラクトが上部に、ブロックチェーン接続が下部に表示されます。

  • 次に、スマートコントラクトをエクスポートするために、パッケージ化されたコントラクトを右クリックして(この場合は[email protected]を選択)、 Export Package を選択します。

  • ローカルマシン上の場所を選択し、 .cds ファイルを保存します。 このパッケージ化されたスマートコントラクトを後で使用して、IBM Blockchain Platformサービスにデプロイします。

次に、IBM Cloud上でHyperledger Fabricネットワークを構成し、このネットワークを使用してアプリケーションを実行するために、必要ないろいろなサービスのセットアップを開始します。

3. IBM Cloud サービスの作成

  • IBM Cloud Kubernetes Service を作成します。 サービスは カタログ で見つけることができます。 このコードパターンでは、 Free(無料) クラスターを使用して名前を付けることができます。IBM Cloudでは、30日後に有効期限が切れる無料クラスターのインスタンスを1つ許可しています。 注:IBM Cloud Kubernetes Serviceのセットアップが完了するまで20分かかる場合があります


  • IBM Cloud上に IBM Blockchain Platform サービスを作成します。このサービスは カタログ から見つけることができ、任意の名前を付与できます。


  • Kubernetesクラスターが稼働したら、クラスターにIBM Blockchain Platformをデプロイできます。IBM Blockchain Platformサービスを作成するステップの中で、サービスをデプロイするIBM Cloud上のクラスターを選択します。


  • ブロックチェーンプラットフォームがKubernetesクラスターにデプロイされると、コンソールを起動してブロックチェーンネットワークでの運用を開始できます。

4. ネットワークのビルド

IBM Blockchain Platformが提供するネットワークを構築します ドキュメント 。 これには、独自のMSPとCA(認証局)を持つ単一のピア組織と、独自のMSPとCAを持つ注文者組織とのチャネルの作成が含まれます。 ピアを展開してノードを操作するために、それぞれのIDを作成します。

組織 CA のピアを作成します

  • 認証局の追加をクリックします。
  • IBM Cloud 認証局の作成を選択し次へをクリックします。
  • CA 表示名Org1 CA を記述します。
  • CA 管理者登録 IDadmin を、CA 管理者登録秘密事項adminpw を記述します。


組織ピアのCA管理IDを関連付ける

  • 作成したOrg1 CA認証局が実行中であることを確認し、選択します。(タイルの右上のボックスが緑色になってることを確認)
  • 最初に、アイデンティティの関連付けを行います。アイデンティティの関連付けボタンをクリックします。
  • サイドパネルで、登録ID を選択します。
  • 登録IDadmin を、登録秘密事項adminpw を指定します。ID表示名には Org1 CA Identity を使用します。
  • アイデンティティの関連付けをクリックします。ウォレットにアイデンティティを追加し、管理者のアイデンティティを Org1 CA に関連付けます。


ピア組織CAを使用して、ピアおよびorg1管理者IDを登録します

  • Org1 CA 認証局を選択し、CA用に作成された admin identityがテーブルに表示されていることを確認します。
  • 組織org1の管理者を登録します。ユーザーの登録ボタンをクリックします。登録IDorg1admin を、登録秘密事項org1adminpw を指定し、次へをクリックします。このIDのTypeadmin に設定します。 ルートアフィリエーションを使用を指定するか、このフィールドのチェックを外して、ドロップダウンリストから関連組織のいずれかを選択できます。最大登録数フィールドは空白のままにします。 次へ]をクリックします。
  • このユーザーには属性を追加しません。 ユーザーを登録をクリックします。
  • 再度ピアのIDを作成するプロセスを行います。ユーザーの登録ボタンをクリックします。登録IDpeer1 を、秘密の登録登録秘密事項 peer1pw を指定し、次へをクリックします。このIDのTypepeer に設定します。 ルートアフィリエーションを使用を指定するか、このフィールドのチェックを外して、ドロップダウンリストから関連組織のいずれかを選択できます。 次へをクリックします。
  • このユーザーには属性を追加しません。 ユーザーを登録をクリックします。


組織ピアのMSP定義を作成します

  • 左側のナビゲーションの組織タブに移動し、MSP定義の作成をクリックします。
  • MSP表示名Org1 MSPと入力し、MSP IDOrg1mspを入力します。
  • ルート認証局の詳細の下で、組織のルートCAとしてOrg1 CAを作成したピアCAを指定します。
  • 組織管理者のの登録IDに、org1adminを、登録秘密事項に、org1adminpwを指定します。 次に、ID名Org1 Adminを指定します。
  • 生成ボタンをクリックして、このIDを組織の管理者として登録し、IDをウォレットにエクスポートします。 エクスポートをクリックして、管理者証明書をファイルシステムにエクスポートします。 最後に、MSP定義の作成をクリックします。


ピアを作成します

  • ノードページで、ピアの追加をクリックします。
  • 新しいピアの作成の下のIBM Cloudおよびをクリックします。
  • ピアにPeer Org1表示名を付けます。
  • 次の画面で、認証機関としてOrg1 CAを選択します。次に、ピア用に作成したピアIDの登録ID および登録秘密事項peer1peer1pw で指定します。次に、ドロップダウンリストから管理者証明書(MSPから)Org1 MSPを選択し、をクリックします。
  • TLS登録IDに、admin、およびTLS登録秘密事項に、adminpwを指定します。作成時に指定した登録IDと登録秘密事項と同じです CA。 TLS CSRホスト名は空白のままにします。
  • 最後のサイドパネルでは、IDを関連付けるように求められ、ピアの管理者になります。ピア管理IDOrg1 Adminを選択します。
  • 概要を確認し、ピアの追加をクリックします。


トランザクションの順序付け(Orderer)用ノードを作成します

  • 認証局の追加をクリックします。
  • IBM Cloud認証局の作成を選択し次へをクリックします。
  • CA 表示名Orderer CA を入力します。
  • CA 管理者登録 IDadmin を、CA 管理者登録機密事項adminpw を設定します。


発注者組織のCA管理者IDを関連付ける

  • ノードタブで、作成した認証局Orderer CAが実行中なのを確認し選択します。(タイルの右上のボックスが緑色になってることを確認)
  • 最初に、アイデンティティの関連付けを行います。アイデンティティの関連付けボタンをクリックします。
  • サイドパネルで、登録ID を選択します。
  • 登録IDadmin を、登録秘密事項adminpw を指定します。ID表示名には Orderer CA Identity を使用します。
  • アイデンティティの関連付けをクリックします。ウォレットにアイデンティティを追加し、管理者のアイデンティティをOrderer CAに関連付けます。


発注者組織CAを使用して、OrdererとOrdererの管理者IDを登録します

  • Orderer CA認証局を選択し、CA用に作成された admin identityがテーブルに表示されていることを確認します。
  • 組織org1の管理者を登録します。ユーザーの登録ボタンをクリックします。登録IDordereradmin を、登録秘密事項ordereradminpw を指定し、次へをクリックします。このIDのTypeadmin に設定します。 ルートアフィリエーションを使用を指定するか、このフィールドのチェックを外して、ドロップダウンリストから関連組織のいずれかを選択できます。最大登録数フィールドは空白のままにします。 次へ]をクリックします。
  • このユーザーには属性を追加しません。 ユーザーを登録をクリックします。
  • 再度ピアのIDを作成するプロセスを行います。ユーザーの登録ボタンをクリックします。登録IDorderer1 を、秘密の登録登録秘密事項orderer1pw を指定し、次へをクリックします。このIDのTypeorderer に設定します。 ルートアフィリエーションを使用を指定するか、このフィールドのチェックを外して、ドロップダウンリストから関連組織のいずれかを選択できます。 次へをクリックします。
  • このユーザーには属性を追加しません。 ユーザーを登録をクリックします。


順序付けサービス組織のMSP定義を作成します

  • 左側のナビゲーションの組織タブに移動し、MSP定義の作成をクリックします。
  • MSP表示名Orderer MSP MSP ID orderermspを入力します。
  • ルート認証局の詳細の下で、組織のルートCAとして、作成したピアCA Orderer CA を指定します。
  • 組織管理者に、ordereradminを、登録ID に、ordereradminpwを指定します。 次に、ID名Orderer Adminを指定します。
  • 生成ボタンをクリックして、このIDを組織の管理者として登録し、IDをウォレットにエクスポートします。エクスポートをクリックして、管理者証明書をファイルシステムにエクスポートします。最後に、MSP定義の作成をクリックします。


順序付けサービスを作成します

  • ノードページで、順序付けサービスの追加をクリックします。

  • IBM Cloud順序付けサービスの作成をクリックして、次へに進みます。

  • 順序付けサービスの表示名Orderer を入力します。

  • 次の画面で、認証機関としてOrderer CAを選択します。次に、注文者用に作成したピアIDの登録ID登録秘密事項orderer1orderer1pw で指定します。次に、組織MSPドロップダウンリストからAdministrator Certificate(from MSP)であるOrderer MSPを選択します。TLS CSRホスト名は空白のままにし、次へをクリックします。

  • 次のステップは、このピアにIDを関連付けて、ピアの管理者にすることです。 ピア管理ID Orderer Admin を選択し、次へをクリックします。

  • 概要を確認し、順序付けサービスの追加をクリックします。



トランザクションのために、順序付けサービスにコンソーシアムメンバー(共同事業体メンバー)として組織を追加します

注文者に組織をコンソーシアムメンバーとして追加して取引します

  • ノードタブに移動し、作成したOrdererをクリックします。
  • 共同事業体メンバーで、組織の追加をクリックします。
  • ドロップダウンリストから Org1 MSP を選択します。これは、ピアの組織Org1を表すMSPであるためです。
  • 組織の追加をクリックします。


チャネルを作成します

  • 左側のナビゲーションタブからチャネルを選択します。
  • チャネルの作成をクリックします。
  • チャネル名に mychannel を設定します。
  • 作成した順序付けサービス Orderer を順序付けサービスリストから選択します。
  • 組織セクションで、組織の下のチャネルメンバー Org1 MSP (Org1MSP) を選択します。
  • ドロップダウンリストからチャネル作成者の組織を識別するMSPを選択します。 これは Org1 MSP (Org1MSP) である必要があります。
  • 組織の横にある追加をクリックします。 組織をOperatorにします。
  • チャネル作成者の組織セクションで、チャネル作成者の MSPOrg1 MSP (Org1MSP) を、アイデンティティOrg1 Admin を選択します。
  • チャネルの作成をクリックします。


ピアをチャネルへ参加させます

  • 作成したmychannelのタイルをクリックして、サイドパネルを起動します。
  • Peer Org1(Org1MSP) を選択して、 チャネルへの結合 をクリックします。


5. FabCarスマートコントラクトのネットワークへのデプロイ

スマートコントラクトをインストールします

  • 左側のナビゲーションのスマートコントラクトタブに移動し、スマートコントラクトのインストールをクリックします。
  • Visual Studioコード用のIBM Blockchain Platform Extensionを使用し、事前にパッケージ化したFabcarスマートコントラクトパッケージファイル(おそらく [email protected] という名前)のBlockchainの場所を参照します。
  • ファイルの追加をクリックして、パッケージ化されたスマートコントラクトを見つけます。
  • スマートコントラクトがアップロードされたら、インストールをクリックします。


スマートコントラクトをインスタンス化します

  • スマートコントラクトタブで、ピアにインストールされているリストからスマートコントラクトを見つけ、行の右側のオーバーフローメニューからインスタンス化をクリックします。
  • 開いたサイドパネルで、スマートコントラクトをインスタンス化するチャネル mychannel を選択します。次へをクリックします。
  • ポリシーに、組織メンバー Org1MSP を選択します。 次へを2回クリックします。
  • 機能名initLedger を指定し、引数を空白のままにします。 - スマートコントラクトのインスタンス化をクリックします。


6. アプリケーションのネットワークへの接続

接続プロファイルを介してSDKに接続します

  • インスタンス化されたスマート・コントラクトの下で、リストで「fabcar」コントラクトを見つけます。 行の右側のオーバーフローメニューから SDKを使用した接続 をクリックします。
  • 接続用のMSPのドロップダウンからOrg1MSPを選択します。
  • 認証局ドロップダウンから Org1 CA を選択します。
  • 下にスクロールして接続プロファイルのダウンロードをクリックして、接続プロファイルをダウンロードします。これにより、Node.js WebアプリケーションとBlockchain Network間の接続を確立するために使用する接続JSONがダウンロードされます。
  • ダウンロードが完了したら、閉じるをクリックします。


アプリ管理者を作成します

  • 左側のバーのノードタブに移動し、認証局で組織のCAであるOrg1 CAを選択します。
  • ユーザーの登録をクリックします。
  • 登録ID登録機密事項app-adminapp-adminpw を指定します。このIDのTypeclient として設定します。 ルートアフィリエーションを使用を指定するか、このフィールドのチェックを外して、ドロップダウンリストから関連組織のいずれかを選択できます。最大登録数フィールドは空白のままにします。次へをクリックします。
  • 属性で、属性の追加をクリックします。属性を hf.Registrar.Roles = * として指定します。 これにより、このIDがレジストラとして機能し、アプリのIDが発行されます。属性の追加をクリックします。
  • 登録をクリックします。


アプリケーション接続を更新します

  • ダウンロードした接続プロファイルをサーバーフォルダーにコピーします
  • config.jsonファイルを次のように更新します。
    • ダウンロードした接続jsonファイル名。
    • アプリ管理者のenroll idおよびenroll secret。事前にapp-adminおよびapp-adminpwとして作成しました。
    • Org1MSPとして提供したorgMSP ID。
    • organizations->Org1MSP-> certificateAuthoritiesの下の接続jsonファイルにあるcaName。これはIPアドレスとポートのようなものです。
    • 登録するユーザー名。
    • IBM Blockchain Platformに接続するために、ゲートウェイ検出を {enabled:true、asLocalhost:false}に更新。

デフォルト設定では、VS Codeからローカルファブリックインスタンスに接続するようになっています。

{
    "connection_file": "mychannel_fabcar_profile.json",
    "appAdmin": "app-admin",
    "appAdminSecret": "app-adminpw",
    "orgMSPID": "Org1MSP",
    "caName": "169.46.208.151:30404",
    "userName": "user1",
    "gatewayDiscovery": { "enabled": true, "asLocalhost": false }
}

7. アプリケーションの実行

  • 管理者を登録する

    • 最初に web-app ディレクトリに移動し、ノードの依存関係をインストールします。

      cd web-app/server
      npm install
    • enrollAdmin.js を実行します。

      node enrollAdmin.js
    • ターミナルに次のように表示されれば成功です。

      msg: Successfully enrolled admin user app-admin and imported it into the wallet
  • ユーザーを登録する

    • registerUser.js を実行します。

      node registerUser.js
    • ターミナルに次のように表示されれば成功です。

      Successfully registered and enrolled admin user user1 and imported it into the wallet
  • アプリケーションサーバーの起動

    • server ディレクトリからサーバーを開始します。
      npm start
  • Webクライアントの開始

    • 新しいターミナルで、Webクライアントフォルダーを開き、依存関係をインストールします。

      cd web-app/client
      npm install
    • クライアントアプリを開始します。

      npm start

http://localhost:4200/ にアクセスし、実行されているアプリを確認することができます。



IBM Blockchain Platformコンソールにアクセスしてユーザーを監視し、追加されたブロックを含むチャンネルに関する情報を取得できます。



トラブルシューティング

  • If you encounter an error discover error: access denied, you need to set the gatewayDiscovery properly in your config.json file. This is REQUIRED You must set it as follows to connect to IBP:

               `"gatewayDiscovery": {"enabled": true, "asLocalhost": false }`
    

リンク

ライセンス(英語)

This code pattern is licensed under the Apache Software License, Version 2. Separate third-party code objects invoked within this code pattern are licensed by their respective providers pursuant to their own separate licenses. Contributions are subject to the Developer Certificate of Origin, Version 1.1 (DCO) and the Apache Software License, Version 2.

Apache Software License (ASL) FAQ