使用超级アカウントブックで Fabric ネットワークを構築し、CLI コマンドラインを使用してこの Fabric ネットワークと対話します。このセクションでは、Fabric Samples の別の例である fabcar を学びます。fabcar は、NODE SDK を使用し、スマートコントラクトを持つサンプルです(NODE_SDK は、超級アカウントブック公式の JavaScript ソフトウェア開発キットであり、開発者は NODE_SDK を使用して CLI 以外の方法で Fabric ネットワークと対話できます)。この例を通じて、NODE SDK の使用方法と、NODE SDK と Fabric ネットワークを使用したページ内での対話方法を理解することができます。
この例の開発に入る前に、ブロックチェーンアプリケーションとブロックチェーンネットワークの間の相互作用プロセスをまとめましょう。
Fabric ネットワークでは、アプリケーション(Application)はまず開発者証明書(Application Developer Identity)の確認を必要とし、確認後にスマートコントラクト(Run smart contracts)を実行します。スマートコントラクトはブロックチェーンネットワークのクエリと更新(Receive ledger updates)を行うことができます。ブロックチェーンネットワークの更新が成功したら、アプリケーションに通知されます。図 1 参照。
fabcar は、車両データ管理の機能を実装しており、管理者と一般ユーザーの 2 つの役割が含まれています。管理者は車両データの更新と管理を行い、一般ユーザーはすべての車両データをクエリできます。この例で実装されている具体的な機能は次のとおりです。
●Car の構造体を定義し、車両のデータと所有者情報を保存します。
●テストネットワークを初期化して起動します。
●管理者の登録と登録の機能を持ちます。
●新しいユーザーの登録機能を持ちます。
●車両の情報をクエリおよび更新することができます。
fabcar フォルダに移動すると、シェルスクリプトといくつかの js ファイルが表示されます。図 2 参照。
その中の package.json は、このプロジェクトに必要な JavaScript モジュールとプロジェクトの設定情報(名前、バージョン、ライセンスなど)を定義しています。npm install コマンドを実行すると、この設定ファイルに基づいて必要なモジュールが自動的にダウンロードされ、プロジェクトの実行および開発環境が構成されます。startFabric.sh スクリプトは、Fabric ネットワークを初期化し、ノードを起動し、チャネルを作成し、Chaincode をインスタンス化し、初期の車両情報をブロックチェーンに書き込みます。enrollAdmin.js は管理者を登録するために使用されます。registerUser.js は新しいユーザーを登録するために使用されます。query.js はすべての車両の情報をクエリするために使用されます。invoke.js は Chaincode を呼び出し、その機能を実行するために使用されます。
次に、fabcar アプリケーションの開発とデプロイを開始します。
fabcar の開発とデプロイ#
この例では、まず Fabric ネットワークを起動して初期化し、テストのために管理者と新しいユーザーを作成し、次に NODE SDK を使用してネットワークと対話し、NODE SDK をウェブページに統合します。ユーザーはこの対話ページを使用して超級アカウントブックを操作できます。
- ネットワークの起動とデータの初期化
ステップ 1 では、fabcar フォルダ内の startFabric.sh スクリプトを実行します。このスクリプトファイルの役割は、まずこの基本ネットワークを起動し、次に CLI コンテナを起動し、Chaincode をインスタンス化し、初期の車両情報をロードすることです。図 3 参照。
Chaincode のコードでは、Init()メソッドと Invoke()メソッドも実装する必要があります。Init()メソッドでは、Chaincode の初期化操作と、クエリカー(queryCar)、initLedger のための台帳の初期化、createCar のための新しい車両情報の作成、queryAllCars のためのすべての車両情報のクエリ、changeCarOwner のための車両の所有者の更新など、さまざまなイベントに対応する処理ロジックが実装されています。図 6-31 参照。
図 6-31 Chaincode()メソッドの実装
Invoke()メソッドでは、queryCar(車両情報のクエリ)、initLedger(台帳の初期化)、createCar(新しい車両情報の作成)、queryAllCars(すべての車両情報のクエリ)、changeCarOwner(車両の所有者の更新)などの機能を呼び出すことができます。図 6-32 参照。
startFabric.sh を使用してネットワークを起動した後、正常に実行された場合、成功の出力メッセージ、起動にかかる時間、およびヘルプ情報が表示されます。図参照。
ネットワークの起動に成功した出力メッセージ
ネットワークの起動に成功した後、管理者と新しいユーザーを作成する必要があります。
- 管理者と新しいユーザーの作成
enrollAdmin.js を使用して管理者を作成します。このファイルでは、SDK を呼び出して admin というユーザー名の管理者を作成します。図参照。
admin 管理者の作成
registerUser.js を使用して新しいユーザーを作成します。このファイルでは、SDK を呼び出して user1 というユーザー名の新しいユーザーを作成します。図参照。
user1 新しいユーザーの作成
これらのスクリプトを実行する前に、npm install コマンドを使用して SDK をインストールする必要があります。図参照。
インストールが完了したら、node enrollAdmin.js と node registerUser を使用して管理者と新しいユーザーを登録します。図参照。
次に、特定の車両(CAR3 など)の情報をクエリし、query.js を変更します。図 6-38 参照。
コマンド "node query.js" を実行すると、CAR3 の情報が返されることがわかります。図 6-39 参照。
次に、Chaincode を呼び出して超級アカウントブックの内容を更新してみましょう。invoke.js で Chaincode の createCar を呼び出し、新しい車両情報を作成します。図参照。
コマンド "node invoke.js" を実行します。その後、すべての車両情報をクエリすると、1 つの車両が追加されていることがわかります。
最後に、NODE SDK をウェブページに統合し、ユーザーがウェブページを介して Fabric ネットワークと対話し、超級アカウントブックのクエリ操作を直接行えるようにします。ここでは、express フレームワークを使用して、SDK を表示および呼び出すためのシンプルなページを開発します。Express は、シンプルで柔軟な node.js Web アプリケーションフレームワークであり、さまざまな Web およびモバイルアプリケーションを作成するための強力な機能を提供します。
ウェブサイトの機能は、ホームページにアクセスするとすべての車両情報が返され、対応する車両ページにアクセスすると車両の詳細ページが返されることです。まず、npm install express コマンドを使用して express フレームワークをインストールし、次に server.js という名前のファイルを作成します。このファイルでは、express アプリケーションをロードおよび作成し、ポート 3000 でリッスンし、ポート 3000 にアクセスすると、ステップ 1 でロードされたすべての車両情報をクエリして返します。
主なコードは次のとおりです。
コードが完成したら、node app.js コマンドを使用してアプリケーションを実行します。実行後、ブラウザで 127.0.0.1:3000 にアクセスしてすべての車両情報を表示できます。図参照。