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フロントエンドを作成して、ネットワークとインターフェイスする
- Blockchain Operatorは、IBM Blockchain Platformサービスをセットアップします
- IBM Blockchain Platformを使用すると、IBM Kubernetes Service上にHyperledger Fabricネットワークを作成でき、ネットワーク上にFabcarスマートコントラクトをインストールしてインスタンス化できます。
- Node.jsアプリケーションサーバーは、Fabric sdkを使用して、IBM Blockchain Platformにデプロイされたネットワークとやり取りし、Webクライアント用のAPIを作成します
- 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アプリケーションを構築するためのフロントエンドフレームワークです。
- IBM Cloud account
- Node v8.x or v10.x and npm v6.x or greater
- VSCode version 1.38.0 or greater
- IBM Blockchain Platform Extension for VSCode
次の手順に従って、このコードパターンをセットアップして実行します。 手順の詳細は以下のとおりです。
ローカルネットワークで実行する場合は こちら を参照して下さい。
- リポジトリのクローン
- スマートコントラクトのパッケージ
- IBM Cloud サービスの作成
- ネットワークのビルド
- FabCarスマートコントラクトのネットワークへのデプロイ
- アプリケーションのネットワークへの接続
- アプリケーションの実行
こちらのリポジトリを任意のローカロフォルダへクローンします:
git clone https://github.com/IBM/fabcar-blockchain-sample.git
cd fabcar-blockchain-sample
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ネットワークを構成し、このネットワークを使用してアプリケーションを実行するために、必要ないろいろなサービスのセットアップを開始します。
- 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クラスターにデプロイされると、コンソールを起動してブロックチェーンネットワークでの運用を開始できます。
IBM Blockchain Platformが提供するネットワークを構築します ドキュメント 。 これには、独自のMSPとCA(認証局)を持つ単一のピア組織と、独自のMSPとCAを持つ注文者組織とのチャネルの作成が含まれます。 ピアを展開してノードを操作するために、それぞれのIDを作成します。
- 認証局の追加をクリックします。
- IBM Cloud 認証局の作成を選択し次へをクリックします。
- CA 表示名に
Org1 CA
を記述します。 - CA 管理者登録 IDに
admin
を、CA 管理者登録秘密事項にadminpw
を記述します。
- 作成したOrg1 CA認証局が実行中であることを確認し、選択します。(タイルの右上のボックスが緑色になってることを確認)
- 最初に、アイデンティティの関連付けを行います。アイデンティティの関連付けボタンをクリックします。
- サイドパネルで、登録ID を選択します。
- 登録IDに
admin
を、登録秘密事項にadminpw
を指定します。ID表示名にはOrg1 CA Identity
を使用します。 - アイデンティティの関連付けをクリックします。ウォレットにアイデンティティを追加し、管理者のアイデンティティを Org1 CA に関連付けます。
- Org1 CA 認証局を選択し、CA用に作成された
admin
identityがテーブルに表示されていることを確認します。 - 組織
org1
の管理者を登録します。ユーザーの登録ボタンをクリックします。登録IDにorg1admin
を、登録秘密事項にorg1adminpw
を指定し、次へをクリックします。このIDのTypeをadmin
に設定します。 ルートアフィリエーションを使用を指定するか、このフィールドのチェックを外して、ドロップダウンリストから関連組織のいずれかを選択できます。最大登録数フィールドは空白のままにします。 次へ]をクリックします。 - このユーザーには属性を追加しません。 ユーザーを登録をクリックします。
- 再度ピアのIDを作成するプロセスを行います。ユーザーの登録ボタンをクリックします。登録IDに
peer1
を、秘密の登録登録秘密事項にpeer1pw
を指定し、次へをクリックします。このIDのTypeをpeer
に設定します。 ルートアフィリエーションを使用を指定するか、このフィールドのチェックを外して、ドロップダウンリストから関連組織のいずれかを選択できます。 次へをクリックします。 - このユーザーには属性を追加しません。 ユーザーを登録をクリックします。
- 左側のナビゲーションの組織タブに移動し、MSP定義の作成をクリックします。
- MSP表示名に
Org1 MSP
と入力し、MSP IDにOrg1msp
を入力します。 - ルート認証局の詳細の下で、組織のルートCAとして
Org1 CA
を作成したピアCAを指定します。 - 組織管理者のの登録IDに、
org1admin
を、登録秘密事項に、org1adminpw
を指定します。 次に、ID名Org1 Admin
を指定します。 - 生成ボタンをクリックして、このIDを組織の管理者として登録し、IDをウォレットにエクスポートします。 エクスポートをクリックして、管理者証明書をファイルシステムにエクスポートします。 最後に、MSP定義の作成をクリックします。
- ノードページで、ピアの追加をクリックします。
- 新しいピアの作成の下のIBM Cloudおよび次をクリックします。
- ピアに
Peer Org1
の表示名を付けます。 - 次の画面で、認証機関として
Org1 CA
を選択します。次に、ピア用に作成したピアIDの登録ID および登録秘密事項をpeer1
、peer1pw
で指定します。次に、ドロップダウンリストから管理者証明書(MSPから)、Org1 MSP
を選択し、次をクリックします。 - TLS登録IDに、
admin
、およびTLS登録秘密事項に、adminpw
を指定します。作成時に指定した登録IDと登録秘密事項と同じです CA。 TLS CSRホスト名は空白のままにします。 - 最後のサイドパネルでは、IDを関連付けるように求められ、ピアの管理者になります。ピア管理ID
Org1 Admin
を選択します。 - 概要を確認し、ピアの追加をクリックします。
- 認証局の追加をクリックします。
- IBM Cloud認証局の作成を選択し次へをクリックします。
- CA 表示名 に
Orderer CA
を入力します。 - CA 管理者登録 IDに
admin
を、CA 管理者登録機密事項にadminpw
を設定します。
- ノードタブで、作成した認証局Orderer CAが実行中なのを確認し選択します。(タイルの右上のボックスが緑色になってることを確認)
- 最初に、アイデンティティの関連付けを行います。アイデンティティの関連付けボタンをクリックします。
- サイドパネルで、登録ID を選択します。
- 登録IDに
admin
を、登録秘密事項にadminpw
を指定します。ID表示名にはOrderer CA Identity
を使用します。 - アイデンティティの関連付けをクリックします。ウォレットにアイデンティティを追加し、管理者のアイデンティティをOrderer CAに関連付けます。
- Orderer CA認証局を選択し、CA用に作成された
admin
identityがテーブルに表示されていることを確認します。 - 組織
org1
の管理者を登録します。ユーザーの登録ボタンをクリックします。登録IDにordereradmin
を、登録秘密事項にordereradminpw
を指定し、次へをクリックします。このIDのTypeをadmin
に設定します。 ルートアフィリエーションを使用を指定するか、このフィールドのチェックを外して、ドロップダウンリストから関連組織のいずれかを選択できます。最大登録数フィールドは空白のままにします。 次へ]をクリックします。 - このユーザーには属性を追加しません。 ユーザーを登録をクリックします。
- 再度ピアのIDを作成するプロセスを行います。ユーザーの登録ボタンをクリックします。登録IDに
orderer1
を、秘密の登録登録秘密事項にorderer1pw
を指定し、次へをクリックします。このIDのTypeをorderer
に設定します。 ルートアフィリエーションを使用を指定するか、このフィールドのチェックを外して、ドロップダウンリストから関連組織のいずれかを選択できます。 次へをクリックします。 - このユーザーには属性を追加しません。 ユーザーを登録をクリックします。
- 左側のナビゲーションの組織タブに移動し、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と登録秘密事項をorderer1
、orderer1pw
で指定します。次に、組織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にします。
- チャネル作成者の組織セクションで、チャネル作成者の MSPに
Org1 MSP (Org1MSP)
を、アイデンティティにOrg1 Admin
を選択します。 - チャネルの作成をクリックします。
- 作成したmychannelのタイルをクリックして、サイドパネルを起動します。
Peer Org1(Org1MSP)
を選択して、チャネルへの結合
をクリックします。
- 左側のナビゲーションのスマートコントラクトタブに移動し、スマートコントラクトのインストールをクリックします。
- Visual Studioコード用のIBM Blockchain Platform Extensionを使用し、事前にパッケージ化したFabcarスマートコントラクトパッケージファイル(おそらく
[email protected]
という名前)のBlockchainの場所を参照します。 - ファイルの追加をクリックして、パッケージ化されたスマートコントラクトを見つけます。
- スマートコントラクトがアップロードされたら、インストールをクリックします。
- スマートコントラクトタブで、ピアにインストールされているリストからスマートコントラクトを見つけ、行の右側のオーバーフローメニューからインスタンス化をクリックします。
- 開いたサイドパネルで、スマートコントラクトをインスタンス化するチャネル
mychannel
を選択します。次へをクリックします。 - ポリシーに、組織メンバー
Org1MSP
を選択します。 次へを2回クリックします。 - 機能名に
initLedger
を指定し、引数を空白のままにします。 - スマートコントラクトのインスタンス化をクリックします。
- インスタンス化されたスマート・コントラクトの下で、リストで「fabcar」コントラクトを見つけます。 行の右側のオーバーフローメニューから
SDKを使用した接続
をクリックします。 - 接続用のMSPのドロップダウンから
Org1MSP
を選択します。 - 認証局ドロップダウンから
Org1 CA
を選択します。 - 下にスクロールして接続プロファイルのダウンロードをクリックして、接続プロファイルをダウンロードします。これにより、Node.js WebアプリケーションとBlockchain Network間の接続を確立するために使用する接続JSONがダウンロードされます。
- ダウンロードが完了したら、閉じるをクリックします。
- 左側のバーのノードタブに移動し、認証局で組織のCAであるOrg1 CAを選択します。
- ユーザーの登録をクリックします。
- 登録IDと登録機密事項に
app-admin
とapp-adminpw
を指定します。このIDのTypeをclient
として設定します。 ルートアフィリエーションを使用を指定するか、このフィールドのチェックを外して、ドロップダウンリストから関連組織のいずれかを選択できます。最大登録数フィールドは空白のままにします。次へをクリックします。 - 属性で、属性の追加をクリックします。属性を
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 }
}
-
-
最初に
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クライアントフォルダーを開き、依存関係をインストールします。
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 thegatewayDiscovery
properly in yourconfig.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.