はじめに
和訳第二弾。
Developer tutorial for creating a Hyperledger Composer solution の和訳です。
ガバガバ和訳でも英語読むよりマシという方は御覧ください。
関連チュートリアルに関しても(たぶん)上げます。
当方 Hyperledger Composer について学び始めたばかりであるため、指摘等大歓迎です。
本チュートリアルでは、Hyperledger Composer におけるブロックチェーンソリューションの構築を一から行います。数時間のうちに、実際の Hyperledger Fabric ブロックチェーンネットワークに対してのトランザクションの実行、ブロックチェーンネットワークとやり取りを行う Angular 2 1 アプロケーションの生成・実行までを行うことができます。
また、本チュートリアルでは自身のユースケースに適用できるテクニックとリソースの概要を説明します。
NOTE: 本チュートリアルは、下記に参照されている Ubuntu 上に構築された Hyperledger Fabric v1.2 を利用する最新版 Hyperledger Composer 向けに書かれています。Mac 上でもテストを行っています。
必要事項
チュートリアル実行前に以下の項目を行ってください。
- 開発環境の構築
- エディタのインストール(例:VSCode、Atom)
Step 1. ビジネスネットワーク構造の作成
Hyperledger Composer のキーコンセプトは、business network definition (BND) です。これは、ブロックチェーンソリューションに対するデータモデル、トランザクションロジック、アクセス制御ルールを定義するものです。BND を作成するために、適切なプロジェクト構造を作成する必要があります。
最も簡単な方法は、Yeoman ジェネレータを利用し、ビジネスネットワークの骨組みを作成することです。Yeoman によってビジネスネットワークのすべてのコンポーネントが含まれたディレクトリが作成されます。
-
Yeoman を用いてビジネスネットワークの骨組みを作成します。このコマンドには以下の項目が必要です。
yo hyperledger-composer:businessnetwork
- ビジネスネットワーク名
- ネットワークの説明
- 作者名
- 作者のEmailアドレス
- ライセンス
- ネームスペース
-
ネットワーク名として tutorial-network を入力します。また、説明、名前、Email を適切に入力します。
-
ライセンスは Apache-2.0 を入力します(デフォルトが Apache-2.0)。
-
ネームスペースとして org.example.mynetwork を入力します。
-
空のネットワークを作成するかどうか訊かれた場合 No を選択します。
Step 2. ビジネスネットワークの定義
ビジネスネットワークは、資産、参加者、トランザクション、アクセス制御ルール、オプションであるイベントとクエリで構成されます。Step 1. で作成したネットワークの骨組みには、ネットワークにおけるすべての資産、参加者、トランザクションのクラス定義を含んだ model(.cto)ファイルが存在しています。骨組みには、基本的なアクセス制御ルールが記述されたアクセス制御(permissions.acl)ファイル、トランザクション処理機能が記述されたスクリプト(logic.js)ファイル、ネットワークのメタデータが記述された package.json ファイルも含まれています。
資産、参加者、トランザクションのモデリング
最初に更新するファイルは model ファイル(.cto)です。このファイルは Hyperledger Composer モデリング言語 によって記述されています。モデルファイルには資産、参加者、トランザクション、イベントのクラスが含まれています。これは、モデリング言語のドキュメントに記載されている Hyperledger Composer のシステムモデルを暗黙的に拡張しています。
-
org.example.mynetwork.cto model ファイルを開きます。
-
下記の内容に書き換えます。
org.example.mynetwork.cto/** * My commodity trading network */ namespace org.example.mynetwork asset Commodity identified by tradingSymbol { o String tradingSymbol o String description o String mainExchange o Double quantity --> Trader owner } participant Trader identified by tradeId { o String tradeId o String firstName o String lastName } transaction Trade { --> Commodity commodity --> Trader newOwner }
-
org.example.mynetwork.cto に変更を保存します。
JavaScript によるトランザクションロジックの実装
model ファイルで Trade トランザクションが定義され、資産と参加者の関係が特定されています。トランザクション処理関数ファイルには、model ファイルで定義されたトランザクションを実行するための JavaScript が記述されています。
Trade トランザクションは、取引されている Commodity と新しいオーナーとして設定する Trader を単に受け入れることを目的としています。
-
lib/logic.js スクリプトファイルを開きます。
-
下記の内容に書き換えます。
logic.js/** * Track the trade of a commodity from one trader to another * @param {org.example.mynetwork.Trade} trade - the trade to be processed * @transaction */ async function tradeCommodity(trade) { trade.commodity.owner = trade.newOwner; let assetRegistry = await getAssetRegistry('org.example.mynetwork.Commodity'); await assetRegistry.update(trade.commodity); }
-
lib/logic.js に変更を保存します。
アクセス制御の追加
-
permissions.acl ファイルを開きます。
-
下記の内容に書き換えます。
permission.acl/** * Access control rules for tutorial-network */ rule Default { description: "Allow all participants access to all resources" participant: "ANY" operation: ALL resource: "org.example.mynetwork.*" action: ALLOW } rule SystemACL { description: "System ACL to permit all access" participant: "ANY" operation: ALL resource: "org.hyperledger.composer.system.**" action: ALLOW }
-
permission.acl に変更を保存します。
Step 3. ビジネスネットワークアーカイブの作成
ビジネスネットワークの定義が完了したので、デプロイ可能なビジネスネットワークアーカイブ(.bna)ファイルとしてパッケージングします。
-
コマンドラインを使用し、tutorial-network へ移動します。
-
下記のコマンドを実行します。
composer archive create -t dir -n .
コマンド実行完了後、tutorial-network ディレクトリに tutorial-network@0.0.1.bna ファイルが作成されます。
Step 4. ビジネスネットワークのデプロイ
.bna ファイルを作成したので、ビジネスネットワークを Hyperledger Fabric のインスタンス上にデプロイ可能となりました。通常、チェーンコードをピアにインストールする権限と、チェーンコードを composerchannel チャネル上で開始する権限を持つ PeerAdmin ID の作成には、Fabric 管理者からの情報が必要となります。今回は開発環境インストールの一環として、既に PeerAdmin ID が作成されています。
ビジネスネットワークのインストール後、ネットワークが起動可能となります。ベストプラクティスとしては、デプロイ後にビジネスネットワークを管理するための新しい ID を作成するべきです。この ID はネットワーク管理者と呼ばれます。
正しい資格情報を取得する
正しい資格情報の PeerAdmin ネットワークカードが開発環境インストールの一環として作成されています。
ビジネスネットワークのデプロイ
Hyperledger Fabric へのビジネスネットワークのデプロイには、Hyperledger Composer ビジネスネットワークをピアにインストールしてからビジネスネットワークを起動し、新規参加者、ID、関連カードを作成してネットワーク管理者にする必要があります。最後に、ネットワーク管理者カードを利用するためにはインストールが必要です。その後、ネットワークに ping を実行して応答することを確認できます。
-
ビジネスネットワークをインストールするために、tutorial-network ディレクトリで下記のコマンドを実行します。composer network install コマンドには以下のオプションが必要です。
composer network install --card PeerAdmin@hlfv1 --archiveFile tutorial-network@0.0.1.bna
- --card:PeerAdmin カード(今回は事前に作成及びインポートされています)
- --archiveFile:ビジネスネットワークを定義する .bna のファイルパス
-
ビジネスネットワークを起動するために、下記のコマンドを実行します。composer network start コマンドには以下のオプションが必要です。
composer network start --networkName tutorial-network --networkVersion 0.0.1 --networkAdmin admin --networkAdminEnrollSecret adminpw --card PeerAdmin@hlfv1 --file networkadmin.card
- --networkName:ビジネスネットワークの名前
- --networkVersion:ビジネスネットワークのバージョン
- --networkAdmin:ビジネスネットワークの管理者の名前
- --networkAdminEnrollSecre:ビジネスネットワークの管理者のシークレット
- --card:PeerAdmin カード
- --file:ビジネスネットワークカードとしてインポートされるために作成されるファイルの名前
-
ネットワーク管理者 ID を使用可能なビジネスネットワークカードとしてインストールするために、下記のコマンドを実行します。composer card import コマンドには以下のオプションが必要です。
composer card import --file networkadmin.card
- --file:composer network start コマンドでカード作成のために指定されたファイル名
-
ビジネスネットワークのデプロイが完了したかを確認するために、下記のコマンドを実行し、pingを飛ばします。composer network ping コマンドには以下のオプションが必要です。
composer network ping --card admin@tutorial-network
- --card:ping を飛ばすネットワークを特定するためのビジネスネットワークカード
Step 5. RESTサーバの生成
Hyperledger Composer は、ビジネスネットワークをもとにオーダーメイドの REST API を生成できます。ウェブアプリケーションを開発するために、REST API は言語に依存しない有用な抽象化レイヤを提供します。
-
tutorial-network ディレクトリに移動し、REST API 作成のために下記のコマンドを実行します2。
composer-rest-server
-
カードネームとして admin@tutorial-network を入力します。
-
API でネームスペースを使用するかどうかは、 never use namespace を選択します。
-
API を保護するかどうかは、 No を選択します。
-
パスポートを使用して認証を行うかどうかは、 No を選択します。
-
explorer テストインターフェイスを使用するかどうかは、 Yes を選択します。
-
ダイナミックロギングは設定しません。
-
イベントの発行を有効にするかどうかは、 Yes を選択します。
-
TLS を有効にするかどうかは、 No を選択します。
生成された API はデプロイされたブロックチェーンとビジネスネットワークに接続されています。
Step 6. アプリケーションの生成
Hyperledger Composer は、REST API に対して実行される Angular 4 アプリケーションも生成可能です。
-
Angular 4 アプリケーションを作成するために、tutorial-network ディレクトリで下記のコマンドを実行します。
yo hyperledger-composer:angular
-
実行されているビジネスネットワークに接続するかどうかを尋ねられたら、Yes を選択します。
-
標準の package.json の質問に回答してください3。
-
ネットワークカードとして admin@tutorial-network を入力します
-
Connect to an existing REST API を選択します。
-
REST サーバのアドレスとして http://localhost を入力します。
-
REST サーバのポートとして 3000 を入力します。
-
Namespaces are not used を選択します。
Angular ジェネレータはプロジェクトの足場を作成し、すべての依存関係をインストールします。アプリケーションの実行には、Angular プロジェクトのディレクトリへ移動し npm start4 を実行します。これにより、REST API に対して http://localhost:4200 で実行される Angular 4 アプリケーションが起動されます。
NOTE: Yo Angular アプリケーションジェネレータは、シンプルで基本的なビジネスネットワークの定義(ここでは、取引ネットワークモデル)に基づいて、スケルトン web アプリケーションを生成することを目的としています。Writing Web Applications で Angular ジェネレータの詳細を参照してください。