0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【和訳】Hyperledger Composer ソリューションを構築するための開発者向けチュートリアル

Last updated at Posted at 2019-02-21

はじめに

和訳第二弾。

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 上でもテストを行っています。

必要事項

チュートリアル実行前に以下の項目を行ってください。

Step 1. ビジネスネットワーク構造の作成

Hyperledger Composer のキーコンセプトは、business network definition (BND) です。これは、ブロックチェーンソリューションに対するデータモデル、トランザクションロジック、アクセス制御ルールを定義するものです。BND を作成するために、適切なプロジェクト構造を作成する必要があります。

最も簡単な方法は、Yeoman ジェネレータを利用し、ビジネスネットワークの骨組みを作成することです。Yeoman によってビジネスネットワークのすべてのコンポーネントが含まれたディレクトリが作成されます。

  1. Yeoman を用いてビジネスネットワークの骨組みを作成します。このコマンドには以下の項目が必要です。

    yo hyperledger-composer:businessnetwork
    
    1. ビジネスネットワーク名
    2. ネットワークの説明
    3. 作者名
    4. 作者のEmailアドレス
    5. ライセンス
    6. ネームスペース
  2. ネットワーク名として tutorial-network を入力します。また、説明、名前、Email を適切に入力します。

  3. ライセンスは Apache-2.0 を入力します(デフォルトが Apache-2.0)。

  4. ネームスペースとして org.example.mynetwork を入力します。

  5. 空のネットワークを作成するかどうか訊かれた場合 No を選択します。

Step 2. ビジネスネットワークの定義

ビジネスネットワークは、資産、参加者、トランザクション、アクセス制御ルール、オプションであるイベントとクエリで構成されます。Step 1. で作成したネットワークの骨組みには、ネットワークにおけるすべての資産、参加者、トランザクションのクラス定義を含んだ model(.cto)ファイルが存在しています。骨組みには、基本的なアクセス制御ルールが記述されたアクセス制御(permissions.acl)ファイル、トランザクション処理機能が記述されたスクリプト(logic.js)ファイル、ネットワークのメタデータが記述された package.json ファイルも含まれています。

資産、参加者、トランザクションのモデリング

最初に更新するファイルは model ファイル(.cto)です。このファイルは Hyperledger Composer モデリング言語 によって記述されています。モデルファイルには資産、参加者、トランザクション、イベントのクラスが含まれています。これは、モデリング言語のドキュメントに記載されている Hyperledger Composer のシステムモデルを暗黙的に拡張しています。

  1. org.example.mynetwork.cto model ファイルを開きます。

  2. 下記の内容に書き換えます。

    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
    }
    
  3. org.example.mynetwork.cto に変更を保存します。

JavaScript によるトランザクションロジックの実装

model ファイルで Trade トランザクションが定義され、資産と参加者の関係が特定されています。トランザクション処理関数ファイルには、model ファイルで定義されたトランザクションを実行するための JavaScript が記述されています。

Trade トランザクションは、取引されている Commodity と新しいオーナーとして設定する Trader を単に受け入れることを目的としています。

  1. lib/logic.js スクリプトファイルを開きます。

  2. 下記の内容に書き換えます。

    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);
    }
    
  3. lib/logic.js に変更を保存します。

アクセス制御の追加

  1. permissions.acl ファイルを開きます。

  2. 下記の内容に書き換えます。

    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
    }
    
  3. permission.acl に変更を保存します。

Step 3. ビジネスネットワークアーカイブの作成

ビジネスネットワークの定義が完了したので、デプロイ可能なビジネスネットワークアーカイブ(.bna)ファイルとしてパッケージングします。

  1. コマンドラインを使用し、tutorial-network へ移動します。

  2. 下記のコマンドを実行します。

    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 を実行して応答することを確認できます。

  1. ビジネスネットワークをインストールするために、tutorial-network ディレクトリで下記のコマンドを実行します。composer network install コマンドには以下のオプションが必要です。

    composer network install --card PeerAdmin@hlfv1 --archiveFile tutorial-network@0.0.1.bna
    
    1. --card:PeerAdmin カード(今回は事前に作成及びインポートされています)
    2. --archiveFile:ビジネスネットワークを定義する .bna のファイルパス
  2. ビジネスネットワークを起動するために、下記のコマンドを実行します。composer network start コマンドには以下のオプションが必要です。

    composer network start --networkName tutorial-network --networkVersion 0.0.1 --networkAdmin admin --networkAdminEnrollSecret adminpw --card PeerAdmin@hlfv1 --file networkadmin.card
    
    1. --networkName:ビジネスネットワークの名前
    2. --networkVersion:ビジネスネットワークのバージョン
    3. --networkAdmin:ビジネスネットワークの管理者の名前
    4. --networkAdminEnrollSecre:ビジネスネットワークの管理者のシークレット
    5. --card:PeerAdmin カード
    6. --file:ビジネスネットワークカードとしてインポートされるために作成されるファイルの名前
  3. ネットワーク管理者 ID を使用可能なビジネスネットワークカードとしてインストールするために、下記のコマンドを実行します。composer card import コマンドには以下のオプションが必要です。

    composer card import --file networkadmin.card
    
    1. --file:composer network start コマンドでカード作成のために指定されたファイル名
  4. ビジネスネットワークのデプロイが完了したかを確認するために、下記のコマンドを実行し、pingを飛ばします。composer network ping コマンドには以下のオプションが必要です。

    composer network ping --card admin@tutorial-network
    
    1. --card:ping を飛ばすネットワークを特定するためのビジネスネットワークカード

Step 5. RESTサーバの生成

Hyperledger Composer は、ビジネスネットワークをもとにオーダーメイドの REST API を生成できます。ウェブアプリケーションを開発するために、REST API は言語に依存しない有用な抽象化レイヤを提供します。

  1. tutorial-network ディレクトリに移動し、REST API 作成のために下記のコマンドを実行します2

    composer-rest-server
    
  2. カードネームとして admin@tutorial-network を入力します。

  3. API でネームスペースを使用するかどうかは、 never use namespace を選択します。

  4. API を保護するかどうかは、 No を選択します。

  5. パスポートを使用して認証を行うかどうかは、 No を選択します。

  6. explorer テストインターフェイスを使用するかどうかは、 Yes を選択します。

  7. ダイナミックロギングは設定しません。

  8. イベントの発行を有効にするかどうかは、 Yes を選択します。

  9. TLS を有効にするかどうかは、 No を選択します。

生成された API はデプロイされたブロックチェーンとビジネスネットワークに接続されています。

Step 6. アプリケーションの生成

Hyperledger Composer は、REST API に対して実行される Angular 4 アプリケーションも生成可能です。

  1. Angular 4 アプリケーションを作成するために、tutorial-network ディレクトリで下記のコマンドを実行します。

    yo hyperledger-composer:angular
    
  2. 実行されているビジネスネットワークに接続するかどうかを尋ねられたら、Yes を選択します。

  3. 標準の package.json の質問に回答してください3

  4. ネットワークカードとして admin@tutorial-network を入力します

  5. Connect to an existing REST API を選択します。

  6. REST サーバのアドレスとして http://localhost を入力します。

  7. REST サーバのポートとして 3000 を入力します。

  8. Namespaces are not used を選択します。

Angular ジェネレータはプロジェクトの足場を作成し、すべての依存関係をインストールします。アプリケーションの実行には、Angular プロジェクトのディレクトリへ移動し npm start4 を実行します。これにより、REST API に対して http://localhost:4200 で実行される Angular 4 アプリケーションが起動されます。

NOTE: Yo Angular アプリケーションジェネレータは、シンプルで基本的なビジネスネットワークの定義(ここでは、取引ネットワークモデル)に基づいて、スケルトン web アプリケーションを生成することを目的としています。Writing Web Applications で Angular ジェネレータの詳細を参照してください。

  1. おそらく Angular 4 の誤植

  2. カード名、ネームスペース指定後はEnter連打でOK

  3. Project name、Description、License はデフォルトで問題なし、Author name、Author email は自分のものを入力

  4. 自分の環境ではエラーが発生。app.module.js を開き、30行目付近のカンマ、空行等を削除で直った

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?