目次


ブロックチェーンでピザの配送を追跡する

冷凍ピザのサプライ・チェーン用ブロックチェーンに Python アプリを接続する

Comments

注: 現在、IBM Blockchain Platform では、エンドツーエンドの開発に Hyperledger Fabric を使用するようになっています。ユーザーは任意で Hyperledger Composer を使用することもできますが、その場合、IBM は Hyperledger Composer のサポートを提供しません。

ブロックチェーンは世間を大きく騒がせている 2018 年の流行語で、誰もがビットコインなどの暗号通貨にブロックチェーンが与える影響を話題にしています。けれども、実際にブロックチェーンを使用してアプリケーションを構築するにはどうすればよいでしょうか?エンタープライズ対応のブロックチェーン・アプリケーションを開発するためのプラットフォームとしては、Hyperledger Fabric があります。これは、Linux Foundation が開始した多数のオープンソース・ブロックチェーン・プロジェクトのうちの 1 つです。Hyperledger Fabric は、開発者や事業主がビジネス問題を解決するためのアプリケーションを作成できるよう、ビジネス・ネットワークの構築を容易にすることを目的に設計されています。この Hyperledger Fabric をベースとする Hyperledger Composer は、ビジネス・ネットワークを設計して構築するプロセスを促進し、単純化するためのフレームワークです。Hyperledger Composer では、開発者が JavaScript を使用してトランザクション処理機能の関数を作成できるようになっていて、Hyperledger Fabric 自体を使用する場合よりも遥かに迅速にブロックチェーン・アプリケーション全体を構築できます。

学習の目的

この入門チュートリアルを完了すると、以下の方法がわかるようになります。

  • コンピューター上に Hyperledger Fabric 環境をセットアップする
  • Hyperledger Composer を使用して資産、参加者、トランザクションをモデル化し、ビジネス・ネットワークを構築する
  • ビジネス・ネットワーク・アーカイブ (.bna) ファイルを Fabric にデプロイし、LoopBack を使用して REST サーバーを起動し、UI に接続する

前提条件

  • Unix ベースのオペレーティング・システム。Hyperledger Fabric 環境をセットアップできるのは、Unix 環境上のみです。したがって、Windows ユーザーは仮想マシンをインストールして環境をセットアップする必要があります。このデモでは、VirtualBox 上に Ubuntu OS をセットアップします。
  • コンピューター上にインストールされた Hyperledger Fabric 環境。
  • Ubuntu ユーザーの場合
    • Hyperledger Composer と Hyperledger Fabric を実行するには、4GB 以上のメモリーを確保することを推奨します。
    • 必要な開発ツールをインストールするための前提条件は次のとおりです。
      Operating Systems: Ubuntu Linux 14.04 / 16.04 LTS (both 64-bit), or Mac OS 10.12
      Docker Engine: Version 17.03 or higher
      Docker-Compose: Version 1.8 or higher
      Node: 8.9 or higher (note version 9 is not supported)
      npm: v5.x
      git: 2.9.x or higher
      Python: 2.7.x
      A code editor of your choice, we recommend VSCode.
    • Linux を使用して Hyperledger Composer をインストールする場合は、次のアドバイスに留意してください。
      Login as a normal user, rather than root.
      Do not su to root.
      When installing prerequisites, use curl, then unzip using sudo.
      Run prereqs-ubuntu.sh as a normal user. It may prompt for root password as some of it's actions are required to be run as root.
      Do not use npm with sudo or su to root to use it.
      Avoid installing node globally as root.**
    • Ubuntu 上で実行する場合、次のコマンドを使用して前提条件をダウンロードできます。

    curl -O https://hyperledger.github.io/composer/prereqs-ubuntu.shchmod u+x prereqs-ubuntu.sh

    • 次に、上記でダウンロードしたスクリプトを実行します (このスクリプトの実行中、短時間 sudo が使用されるため、パスワードの入力を求めるプロンプトが出されます)。

    ./prereqs-ubuntu.sh

  • Mac ユーザーの場合

所要時間

このガイドに従って完全なブロックチェーン・アプリケーションを Hyperledger Fabric 上で稼動させるまでの所要時間は、約 45 分です。

手順

開発環境をインストールする

以下に示す URL にアクセスし、そこで説明している手順に従って Hyperledger Composer 開発ツール (主に、ビジネス・ネットワークを作成するために使用するツール) を入手します。その上で、Hyperledger Fabric (主に、ビジネス・ネットワークをローカルで実行/デプロイするために使用するプラットフォーム) を立ち上げます。これから作成するビジネス・ネットワークは、クラウド・プラットフォームなどの他の環境内にある Hyperledger Fabric ランタイムにデプロイすることもできます。https://hyperledger.github.io/composer/installing/development-tools.html

  • 「Deploy a Business Network (ビジネス・ネットワークをデプロイ)」を選択します。
  • 「Model Network Starter Template (モデル・ネットワーク・スターター・テンプレート)」で「browse (参照)」を選択し、このリポジトリーから pizza-on-the-blockchain@0.0.1.bna ファイルを選択します。
  • 「Deploy (デプロイ)」を選択します。
  • 「Connect Now (今すぐ接続)」を選択します。

次に示す画面が表示されます。

  • 右側のペインにある「Model File (モデル・ファイル)」をクリックします。このセクションで、ビジネス・ネットワークをモデル化できます。このチュートリアルの例では、冷凍ピザの配送を、工場から卸売販売業者、卸売販売業者から小売業者、小売業者から顧客まで追跡します。前提となるのは、各エンティティー (工場など) がピザに関する情報を保存するために RFID タグを利用し、次のエンティティーがピザを受領する際にそのタグをスキャンすることです。エンティティーがタグに保存するタイムスタンプ、日付、状態 (製造、冷凍中、梱包中、販売) などの状態が、ブロックチェーン上で保管されます。

Entity タイプの複数のインスタンス (工場など) を作成します。

以下のコードでは、ブロックチェーン上で行われるトランザクションを定義しています (ピザの状態とピザを所有するエンティティーの変更など)。

  • 左側ペインで「Script File (スクリプト・ファイル)」を選択します。ここでは、トランザクション処理機能の関数を定義します。ここで定義する関数が、トランザクションの起動時に実行されます。

ChangeStateToProduction 関数は、現在のピザの状態を「production (製造)」に変更します。

他の 3 つの状態でも、この関数が適用されます。

ChangeOwner 関数は、ピザの所有者を新しい所有者に変更します。

  • 左側のペインで「Access Control (アクセス制御)」を選択します。このセクションで、ビジネス・ネットワークのどの参加者に、どの資産とトランサクションへのアクセスを許可するかを決定できます。
  • 最上部のペインにある「Test (テスト)」を選択します。
  • このセクションで、モデル・ファイル内に定義したトランザクションをテストできます。左上にある「+ Create New Participant (新しい参加者を作成)」を選択し、作成するエンティティーの一意の ID を入力します。
  • 「Create New (新規作成)」を選択します。新しく作成されたエンティティーが表示されます。左側のペインにある「Assets (資産)」で、「Pizza (ピザ)」を選択します。「+ Create New Asset (新しい資産を作成)」を選択します。ピザの詳細を入力し、「Create New (新規作成)」を選択します (状態としては、「production (製造)」、「freezing (冷凍中)」、「packaging (梱包中)」、「distribution (販売)」の中から選択します)。「Owner (所有者)」フィールドには、先ほど作成したエンティティーの ID を選択します。

新しく作成された「Pizza (ピザ)」資産が表示されます。

  • 左下にある「Submit Transaction (トランザクションを送信)」を選択します。トランザクション・タイプとして「ChangeStateToFreezing (状態を冷凍中に変更)」トランザクションを選択し、“pizza” フィールドで、ピザ資産の作成時に作成した ID を渡します。
  • 「Submit (送信)」を選択します。

「Submit Transaction Successful (トランザクションが正常に送信されました)」という通知メッセージがポップアップ表示されます。トランザクションが正常に送信されたことをダブルチェックするには、左側のペインで「Transactions (トランザクション)」の下にある「All Transactions (すべてのトランザクション)」を選択します。

  • ChangeStateToFreezing トランザクションを表示する画面で「view record (レコードを表示)」を選択すると、トランザクション関連のすべての情報を確認できます。

これで完了です!次は、ビジネス・ネットワークを Hyperledger Fabric にデプロイする作業を開始します。

ビジネス・ネットワークを Hyperledger Fabric にデプロイする

  • .bna ファイルを作成します。

    環境のセットアップが完了したら、ネットワーク要素のすべてを .bna ファイルにパッケージ化します。ここではそのために、Yeoman ジェネレーターを使用してビジネス・ネットワークのスケルトンを作成します。そのスケルトンに含まれるモデル・ファイル、スクリプト・ファイル、アクセス制御ファイルを、このチュートリアルで作成したファイルで置き換えます。

    • Yeoman を使用してビジネス・ネットワークのスケルトンを作成します。このコマンドによって、ビジネス・ネットワークの名前、説明、作成者名、作成者の e-メール・アドレス、ライセンス、名前空間を指定するよう求められます。

    yo hyperledger-composer:businessnetwork

    • ネットワークの名前として「pizza-on-the-blockchain」と入力します。説明、作成者名、作成者の e-メール・アドレスには、それぞれ適切な情報を入力します。
    • ライセンスとして「Apache-2.0」を選択します。
    • 名前空間として「org.acme.biznet」を選択します。
    • cd を使用して、カレント・ディレクトリーを上記のコマンドで作成したフォルダーに変更します。このフォルダー内にある /pizza-on-the-blockchain/lib/org.example.biznet.cto の内容を、チュートリアルで生成したモデル・ファイルの内容で置き換えます。
    • /pizza-on-the-blockchain/lib/logic.js の内容は、チュートリアルで生成したスクリプト・ファイルの内容で置き換えます。
    • pizza-on-the-blockchain フォルダー内に permissions.acl という名前の新しいファイルを作成し、このファイル内に、チュートリアルで生成したアクセス制御ファイルの内容を貼り付けます。

    これで、ビジネス・ネットワークは完成です。完成したビジネス・ネットワークを .bna ファイルにパッケージ化しましょう。pizza-on-the-blockchain ディレクトリー内で、次のコマンドを入力します。

    composer archive create -t dir -n .

    このコマンドの実行が完了すると、tutorial-network ディレクトリー内に pizza-on-the-blockchain@0.0.1.bna という名前のビジネス・ネットワーク・アーカイブ・ファイルが作成されているはずです。

ビジネス・ネットワークをデプロイする

.bna ファイルを作成した後は、ビジネス・ネットワークを Hyperledger Fabric のインスタンスにデプロイできます。通常は、Fabric 管理者から入手した情報を使用して PeerAdmin アイデンティティーを作成し、チェーンコードをピアにデプロイする権限を付与する必要がありますが、このチュートリアルの場合、開発環境のインストールの一環として、PeerAdmin アイデンティティーはすでに作成されています。

ランタイムがインストール済みになっていれば、ビジネス・ネットワークをピアにデプロイできます。ベスト・プラクティスとして、デプロイ後のビジネス・ネットワークを管理する新しいアイデンティティーを作成することを推奨します。このアイデンティティーは、ネットワーク管理者と呼ばれます。

開発環境のインストールの一環として、正しい資格情報が設定された PeerAdmin ビジネス・ネットワーク・カードもすでに作成されています。

ビジネス・ネットワークを Hyperledger Fabric にデプロイするには、Hyperledger Composer チェーンコードをピア上にインストールしてから、ビジネス・ネットワーク・アーカイブ (.bna) をピア、新しい参加者、アイデンティティーに送信し、関連するカードをネットワーク管理者として作成する必要があります。続いて、作成したネットワーク管理者ビジネス・ネットワーク・カードをインポートして使用できるようにします。ここまでの作業が完了したら、ネットワークに対して ping を実行し、ネットワークが応答しているかどうかを確認できます。

  • Composer ランタイムをインストールするには、次のコマンドを実行します。

composer runtime install --card PeerAdmin@hlfv1 --businessNetworkName pizza-on-the-blockchain

composer runtime install コマンドには、PeerAdmin ビジネス・ネットワーク・カード (この例では、前もって作成されてインポートされたもの) とビジネス・ネットワークの名前を指定する必要があります。

  • ビジネス・ネットワークをデプロイするには、pizza-on-the-blockchain ディレクトリーから次のコマンドを実行します。

composer network start --card PeerAdmin@hlfv1 --networkAdmin admin --networkAdminEnrollSecret adminpw --archiveFile pizza-on-the-blockchain@0.0.1.bna --file networkadmin.card

composer network start コマンドには、ビジネス・ネットワーク・カードならびにビジネス・ネットワーク管理者アイデンティティーの名前、.bna ファイルのパス、ビジネス・ネットワーク・カードとしてインポートするために作成するファイルの名前を指定する必要があります。

  • ネットワーク管理者アイデンティティーを、使用可能なビジネス・ネットワーク・カードとしてインポートするには、次のコマンドを実行します。

composer card import --file networkadmin.card

composer card import コマンドには、composer network start コマンドで指定した、カードを作成するためのファイル名を指定する必要があります。

  • ビジネス・ネットワークが正常にデプロイされたことを確認します。それには、次のコマンドを実行してネットワークを ping します。

composer network ping --card admin@pizza-on-the-blockchain

composer network ping コマンドには、ping を実行する対象のネットワークを識別するビジネス・ネットワーク・カードを指定する必要があります。

REST サーバーを生成する

Hyperledger Composer では、ビジネス・ネットワークに応じてカスタマイズされた REST API を生成することができます。Web アプリケーションを開発する際、この REST API は言語に依存しない抽象層として役立ちます。

  • REST API を作成するには、カレント・ディレクトリーを pizza-on-the-blockchain に変更し、次のコマンドを実行します。

composer-rest-server

  • カード名として「admin@pizza-on-the-blockchain」と入力します。
  • 生成された API 内で名前空間を使用するかどうか選択するよう求められたら、「never use namespaces (名前空間を使用しない)」を選択します。
  • 生成された API をセキュリティーで保護するかどうか選択するよう求められたら、「No (いいえ)」を選択します。
  • イベントの公開を有効にするかどうか選択するよう求められたら、「Yes (はい)」を選択します。
  • TLS セキュリティーを有効にするかどうか選択するよう求められたら、「No (いいえ)」を選択します。

これで、API が生成されてデプロイ済みのブロックチェーンとビジネス・ネットワークに接続されます。

REST サーバーが稼動中になったら、https://localhost:3000/explorer にアクセスします。

以下のようなページが表示されるはずです。

アプリケーションを実行する

  • 目的

この Python Flask Web アプリケーションは、Hyperledger Fabric 上で稼動するブロックチェーン・ネットワークのインターフェースとして作成されています。このアプリケーションは (Composer REST サーバーを使用して生成された) REST API を利用してブロックチェーン・ネットワークに接続し、GET、POST、および PUT リクエストを実行します。

  • テクノロジー

このアプリケーションは Flask マイクロフレームワークを使用して作成されています。アプリケーションの UI は、MaterializeCSS という Material Design ベースのフロントエンド・フレームワークを使用して作成されています。

  • 実行方法
  1. コマンド pip install -r requirements.txt を使用して、前提条件をインストールします。
  2. python application.py としてアプリケーションを実行します。
  3. Web ブラウザーでアドレス localhost:<port> を指します。
  • ヘルプ

不明な点やコメントがある場合は、ご遠慮なく私に連絡してください。

  • アプリケーションのナビゲーション

アプリケーションが起動すると、次に示すページが表示されるはずです。

「Factory (工場)」ページまでナビゲートして、ピザの状態として「Production (製造)」を選択してから「Submit (送信)」をクリックします。

「Current Status (現在のステータス)」が「Production (製造)」に変わったことを確認できます。フォームに入力する際は、「Freezing (冷凍中)」を選択します。「Submit (送信)」をクリックします。

次は、「Packaging (梱包中)」を試します。

最後に「Distribution (販売)」を選択します。

Transfer Ownership (所有権の移譲)」を選択し、ピザの所有権を「Wholesaler (卸売販売業者)」に移します。これにより、「Wholesaler (卸売販売業者)」ページが表示され、ブロックチェーンに対して実行されたトランザクションを確認できます。

再度「Transfer Ownership (所有権の移譲)」を選択します。

さらにもう一度、「Transfer Ownership (所有権の移譲)」を選択します。

「Customer (顧客)」ページが表示されます。ここで、プロセス全体を通してピザを追跡できます。

まとめ

このチュートリアルでは、Hyperledger Composer Playground を使用して単純なビジネス・ネットワークを作成する方法、それをエクスポートしてビジネス・ネットワークのアーカイブ・ファイルを作成する方法、そしてそれを Hyperledger Fabric にデプロイする方法を紹介しました。また、アプリケーションで利用できるように REST サーバーを稼動させる方法も紹介し、Python ベースのアプリケーションをブロックチェーンに接続することで、冷凍ピザのサプライ・チェーンでの使用例を実現できるという事実を実証しました。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Cloud computing
ArticleID=1066103
ArticleTitle=ブロックチェーンでピザの配送を追跡する
publish-date=06202019