目次


IBM Blockchain VSCode 拡張機能を使用して商業手形スマート・コントラクトを実行する

新しく登場した拡張機能と Hyperledger Fabric の最新機能を利用してブロックチェーン・アプリとスマート・コントラクトを容易に開発する

Comments

新しく登場した IBM Blockchain Platform VSCode 拡張機能と Hyperledger Fabric の最新機能を利用すれば、ブロックチェーン・アプリケーションとスマート・コントラクトの開発がこれまでになく単純になります!VSCode 拡張機能は、開発者がスマート・コントラクトのディスカバリーから、コーディング、テスト、デバッグ、パッケージ化、そしてブロックチェーン・ネットワークへのデプロイに至るまでのすべての作業を 1 箇所で行える直観的なツールです。実際に使ってみれば、いかに直観的なツールであるか実感できます!このツールの詳細は、このリンク先の紹介記事で確認できます。さらに、このチュートリアルでセットアップするローカル Fabric 環境で作業を進めれば、作成したサンプル・アプリを皆さん独自の IBM Blockchain Platform Cloud インスタンスにあっという間にデプロイできるようになります。

このチュートリアルでは、IBM Blockchain Platform VSCode 拡張機能を使用してサンプルの商業手形スマート・コントラクトを Fabric ブロックチェーンにデプロイする方法を説明した後、サンプル・スマート・コントラクトを実際に実行します。また、単純なコマンド・ライン・アプリケーションを使用して、デプロイ済みのコントラクトとやり取りし、トランザクションを実行する方法も説明します。サンプルは、このリンク先の GitHub から入手できます。

注: : このチュートリアルは、全 3 回からなるチュートリアル・シリーズの第 1 回です。第 2 回 では、今回のチュートリアルでデプロイするコントラクトにいくつかのクエリーを追加し、レジャー内に保管されている商業手形の完全なトランザクション履歴を取得できるようにします。

図 1. 「Papernet」— このチュートリアル・シリーズで使用する商業手形に関与する組織の概要
このチュートリアル・シリーズで使用する商業手形に関与する組織の概要図
このチュートリアル・シリーズで使用する商業手形に関与する組織の概要図

背景

商業手形は少なくとも 19 世紀から存在しています。商業手形とは何でしょうか?このリンク先の最新の Fabric「Developing Applications」ドキュメントで興味深いシナリオに沿ってわかりやすく説明されていますが、簡単に言うと、商業手形とは大規模な機関が短期借入債務を支払うための資金を得る方法のことです。例えば、MagnetoCorp という会社が 4 月 1 日に額面価格 100 万ドルの商業手形 (「CP」) を発行したとします。この CP は、この金額を 6 カ月以内 (10 月 1 日が支払期限) に持参人 (「手形」は譲渡可能なので転売される可能性もあります) に支払うことを約束しています。けれども 5 月 1 日に、この CP は投資銀行 (DigiBank) に 96 万ドルで売却されました (6 カ月で 100 万ドルの価格だったところ、割引額で売却されたわけです)。DigiBank がこの CP を (投資リスクに対処しつつ) 支払期限まで保持し、支払期限になった時点で持参人として CP を換金すれば、MagnetoCorp から額面価格 (100 万ドル) を受け取ることができます。つまり、40,000 ドルの利益を得られるわけです。これは実質的に、6 カ月間にわたる 96 万ドルの投資に対する受取利息ということになります。商業手形市場においては、投資者のほとんどが手形を支払期限まで保持しますが、手形の市場、売買選択権、戦略はさまざまに異なります。その多様性の大きさは、ここで説明する範囲を遥かに超えています。

前提条件

この拡張機能を使用するには、次のソフトウェアがインストールされた環境が必要です。

次のコマンドを使用すると、バージョンを確認できます。

  • node --version
  • npm --version
  • yo --version
  • docker --version
  • docker-compose --version

所要時間

使用する環境にすべての前提条件がインストールされている状態であれば、このチュートリアルを完了するのに必要な時間は約 45 分です。

準備

手順を開始する前に、少々のハウスキーピングが必要です。次のコマンドを実行して、古くなったコンテナーやアクティブなコンテナーをすべてキルします。

docker rm -f $(docker ps -aq)

キャッシュされているネットワークとボリュームをすべてクリアします。

docker network prune ; docker volume prune

最後に、すでにこのチュートリアルに取り組んだか、取り組もうとしたことがある場合は、商業手形スマート・コントラクトの基礎となるチェーンコード・イメージを削除する必要もあります。初めてこのコンテンツに取り組むのであれば、このチェーンコード・イメージはシステム上に存在していません (したがって、次の手順を行う必要はありません)。次のコマンドを使用してコンテナー ID を取得します。

docker rmi $(docker images -q dev*)

これで、前にインスタンス化された papercontract コンテナー (dev-peer0 というプレフィックスが付いたコンテナー) 関連の残存するコンテナー・イメージがすべて削除されます。

シナリオ

MagnetoCorp が商業手形を発行します。手形発行を担当するのは、MagnetoCorp の従業員 Isabella です。発行された商業手形は、投資銀行である DigiBank が (同行のトレーダーを介して) 購入します。DigiBank はしばらく手形を保持した後、多少の利益を得るために、手形を額面価格で MagnetoCorp と換金します。この商業手形の例について詳しくは、このリンク先の Hyperledger Fabric ドキュメントのチュートリアルを参照してください。

手順

ステップ 1. 商業手形のサンプルを入手する

ターミナル・ウィンドウから次のコマンドを実行して、Fabric サンプル・リポジトリー (具体的には「マスター」ブランチ) を $HOME ディレクトリーにコピーします。

git clone https://github.com/hyperledger/fabric-samples

ステップ 2. VSCode を起動して、IBM Blockchain Platform VSCode 拡張機能をインストールする

タスク・バーから VSCode を起動します。または、ターミナル・ウィンドウ内で code と入力して起動することもできます。

次は、IBM Blockchain Platform VSCode 拡張機能をインストールします。それには、最新バージョンの VSCode がインストールされている必要があります。最新のバージョンを使用しているかどうかを確認するには、「Help (ヘルプ)」 > 「Check for updates (アップデートを確認)」を表示します。この時点で VSCode がインストールされている場合、それは最新のバージョンではない可能性が高いことを意味します。最新バージョンでない場合は、VSCode を (前に記載したリンクを使用して) 更新してください。更新が完了したら、画面左側にあるサイドバーで「extensions (拡張機能)」をクリックします。サイドバーの最上部で、拡張機能マーケットプレイスを検索して「IBM Blockchain Platform」を見つけます。検索結果として表示された IBM Blockchain Platform の「Install (インストール)」をクリックします。ステータスが「Installing (インストール中)」として表示され、最終的に「Installed (インストール済み)」になります。このステータスになったら、「reload (再ロード)」をクリックします。

図 2. VSCode マーケットプレイスから拡張機能を検索してインストールする
拡張機能を検索してインストールする操作を示す動画
拡張機能を検索してインストールする操作を示す動画

ステップ 3. 商業手形コントラクトを開く

  1. VSCode 内で、「File (ファイル)」 > 「Open Folder (フォルダーを開く)」の順に選択し、$HOME/fabric-samples/commercial-paper/organization/magnetocorp ディレクトリーにナビゲートして contracts フォルダーを選択します。これが、このチュートリアルで使用するプロジェクトの最上位フォルダーです。
  2. Explorer (エクスプローラー)」アイコン (左上) をクリックし、$HOME/fabric-samples/commercial-paper/organization/magnetocorp/ 内にある contract フォルダーを開きます。
    図 3. VSCode 内でサンプル商業手形プロジェクトを開く
    サンプル商業手形プロジェクトを開いた VSCode 画面のスクリーンショット
    サンプル商業手形プロジェクトを開いた VSCode 画面のスクリーンショット
  3. lib サブフォルダー内に置かれている papercontract.js ファイルの内容を調べます。このファイルは実質的に、さまざまなスマート・コントラクトのトランザクション機能 (発行、購入、換金など) のロジックをオーケストレーションするファイルで、レジャーとのやり取りに不可欠な (サンプル・コントラクト内の) コア関数が土台になっています。このチュートリアルの冒頭のセクションに記載されているリンク先のドキュメントで、商業手形のシナリオに従ってコントラクトを作成する際の概念、テーマ、プログラム的アプローチについて説明しています。先に進む前に、時間をかけてその説明を読んでください。
  4. VSCode エクスプローラー内で、左側に示されているフォルダー名をクリックして contract フォルダーに戻ります。次のステップに進む前に、この作業を行っておくことが重要です。
    図 4. contract フォルダーを選択する
    contract フォルダーを選択する画面のスクリーンショット
    contract フォルダーを選択する画面のスクリーンショット

ステップ 4. スマート・コントラクトをパッケージ化する

  1. エクスプローラーのパレット内で package.json ファイルをクリックし、“name” フィールドを編集して名前を「papercontract」に変更します。
    図 5. package.json ファイルを編集する
    package.json ファイルを編集する画面のスクリーンショット
    package.json ファイルを編集する画面のスクリーンショット
  2. 「dependencies」セクションで、以下の既存のエントリーを (必要に応じて) 編集し、以下の内容になるようにします。
      "fabric-contract-api": "~1.4.0",
     "fabric-shim": "~1.4.0"

    ファイルを保存 (CTRL + S キーを押下) します。
  3. IBM Blockchain Platform サイドバー・アイコンをクリックします。このアイコンを初めてクリックする場合、出力ペイン内に拡張機能が「アクティブ化中」であることを伝えるメッセージが表示されます。
  4. 「Smart Contract packages (スマート・コントラクト・パッケージ)」パネルで、「+」記号 (「Package a Smart Contract (スマート・コントラクトのパッケージ化)」) をクリックして商業手形スマート・コントラクトをパッケージ化し、ピアにインストールできる状態にします。パッケージには「papercontract@0.0.1」のような名前が付けられます。

ステップ 5. 稼動中の Fabric にスマート・コントラクトをインストールする

  1. IBM Blockchain Platform の左側にあるサイドバーを使用して、ローカルの開発用 Fabric ランタイム環境を起動します。便利なことに、IBM Blockchain Platform VSCode 拡張機能はローカルでの開発でのオペレーション (起動、停止、切断、再起動など) を自動的に行ってくれます。IBM Blockchain Platform VSCode 拡張機能が有効な Fabric 開発環境です (つまり、この拡張機能によって最近起動された環境) がすでに稼動している場合は、その環境を使用することもできます。「Local Fabric Ops (ローカルl Fabric オペレーション)」セクション内にある省略記号 (「…」) をクリックし、「Start Fabric Runtime (Fabric ランタイムの起動)」をクリックします。下部にある 「Output (出力)」 ターミナル・ペインに、チャネル参加のプロポーザルが正常に送信されたことを伝えるメッセージが表示されるはずです。このメッセージを確認できたら、先に進めます。
  2. 「Smart Contracts (スマート・コントラクト)」 サイドバー・パネルの下にある 「+ Install (インストール)」 項目をクリックします。上部に表示されるポップアップ画面内に、コントラクトをインストールするピアを選択するよう求めるメッセージが表示されるので、選択肢の中からピアを選択します。
  3. インストールするコントラクトとして、papercontract バージョン 0.0.1 を選択します (ポップアップ画面を参照)。「Output (出力)」ペイン内に、正常にインストールされたことを伝えるメッセージが表示されます。
  4. IBM Blockchain Platform の 「Fabric Local Ops (Fabric ローカル・オペレーション)」 サイドバーで、「mychannel」チャネルを選択してから右クリックし、「instantiate a smart contract (スマート・コントラクトをインスタンス化)」を選択します。
  5. インスタンス化するコントラクトとして papercontract バージョン 0.01 を選択します。
  6. 呼び出す関数の名前を入力するよう求められたら、文字列「org.papernet.commercialpaper:instantiate」を貼り付けて Enter キーを押します。
  7. 引数を入力するよう求められたら、Enter キーを押して空白のままにします (必要な引数はありません)。

しばらくすると、コントラクト・インスタンス化の進捗状況を伝えるメッセージが右下に表示されます。「Output (出力)」ペインで、コントラクトが正常にインスタンス化されたことを確認します。

ステップ 6. クライアント・アプリケーション MagnetoCorp および DigiBank から商業手形スマート・コントラクトを実行する

これまでの作業で、ブロックチェーン上でスマート・コントラクトをインストールしてインスタンス化しました。次は、スマート・コントラクトのトランザクションを試してみましょう。

商業手形のシナリオで説明しているのは、MagnetoCorp と DigiBank という 2 つの異なる組織それぞれの従業員によって実行されるコントラクトのトランザクションです。このチュートリアルでは、VSCode 拡張機能に含まれているデフォルトのアイデンティティーを使用して、いくつかのトランザクションを順に実行します。図 6 に、それぞれの従業員がクライアント・アプリケーションとウォレット (各会社組織の従業員として提供されています) を使用してブロックチェーン・ネットワークとやり取りする方法を要約します。

図 6. 「Papernet」 - トランザクション・フローの概要
トランザクションのフロー図
トランザクションのフロー図

トランザクション 1: Isabella@MagnetoCorp として issue トランザクションを実行する

  1. IBM Blockchain Platform の「VSCode」サイドバー・ペインに含まれる「Fabric Gateways (Fabric ゲートウェイ)」サブパネルを見つけて、「local_fabric」の下にある「Admin (管理者)」アイデンティティーをクリックします。
  2. 「mychannel」ツイスティー、「papercontract」ツイスティーの順に展開します。トランザクション名のリストが表示されます。その中に、「issue」というトランザクションがあります。
  3. 「issue」トランザクションを強調表示してから「Submit Transaction (トランザクションの送信)」を右クリックします。上部にポップアップ・ウィンドウが表示されます。
  4. パラメーターを入力するよう求められたら、以下のパラメーターをコピーして貼り付けます (各パラメーターは単一引用符で囲まれていて、コンマで区切られていることに注意してください)。
MagnetoCorp,00001,2020-05-31,2020-11-30,5000000
  1. Enter キーを押します。その後、トランザクションが正常に送信されたことを伝えるメッセージが 「Output (出力)」 ペインに表示されるはずです。

トランザクション 2: Balaji@DigiBank として buy トランザクションを実行する

  1. 次は、トランザクション・リストに含まれている buy トランザクションを強調表示してからTransaction (トランザクションの送信)」を右クリックします。ポップアップ・ウィンドウが表示されます。
  2. パラメーターを入力するよう求められたら、以下のパラメーターをコピーして貼り付けます。
MagnetoCorp,00001,MagnetoCorp,DigiBank,4900000,2020-05-31
  1. Enter キーを押します。その後、トランザクションが正常に送信されたことを伝えるメッセージが 「Output (出力)」 ペインに表示されるはずです。

トランザクション 3: 6 か月後、Balaji@DigiBank として redeem トランザクションを実行する

この商業手形のライフサイクルで、所有者 (DigiBank) が手形を額面価格で換金して、投資支出を埋め合わせる時期がきました。redeem.js という名前のクライアント・アプリケーションが Balaji の (彼のウォレットに入っている) 証明書を使用して、このタスクを実行します。

  1. 最後に、トランザクション・リストに含まれている redeem トランザクションを強調表示してからTransaction (トランザクションの送信)」を右クリックします。ポップアップ・ウィンドウが表示されます。
  2. パラメーターを入力するよう求められたら、以下のパラメーターをコピーして貼り付けます。
MagnetoCorp,00001,DigiBank,2020-11-30
  1. Enter キーを押します。その後、トランザクションが正常に送信されたことを伝えるメッセージが 「Output (出力)」 ペインに表示されるはずです。

お見事です!このチュートリアルに従って、スマート・コントラクトと正常にやり取りすることができました。これで、ブロックチェーン上での商業手形インスタンスの単純なライフサイクルを理解できたはずです。

まとめ

このチュートリアルでは、単純ながらも実質的なサンプル商業手形スマート・コントラクトを Fabric ブロックチェーン・ネットワークにデプロイする方法を学びました。具体的には、Hyperledger Fabric の最新プログラミング・モデルに従って開発されたスマート・コントラクトを作成、パッケージ化、インストール、インスタンス化する方法を説明しました (この拡張機能によって開発者は開発/デバッグ/テストのライフサイクルでさらに多くの機能を使用できるようになることは明確ですが、それについては、このチュートリアルの範囲を超えています)。

次回のチュートリアルでは、アプリケーションの別の観点に焦点を当てます。それは、例えば特定の資産のトランザクション履歴を取得するといった、レジャーのクエリーです。クエリーによって、次のような質問の答えを明かにします。

  • 「ペーパー」トレイルは何か (おわかりですか)?
  • トランザクションを実行したのは誰か (どのアイデンティティーが関わったのか)?
  • トランザクションが実行された日時はいつか?
  • 履歴に含まれる各トランザクションでどのような変更が行われたか (差分は何か)?

つまり、クエリー機能をスマート・コントラクトに追加するとともに、トランザクション履歴から適切な情報を取得するための「getter」をいくつか追加するということです。クエリー結果は、該当するアプリケーション・クライアントに返されます。

次回のチュートリアル (全 3 回のうちのパート 2) に取り組むには、GitHub からいくつかの成果物 (コード、スクリプト・ファイルなど) を複製する必要があります。それには、ターミナル・ウィンドウを開き、ターゲット・ディレクトリーの場所を指定して、次のコマンドを貼り付けてください。

cd $HOME
git clone https://github.com/mahoney1/commpaper

これで、リポジトリーが正常に複製されるので、次のステージに進むことができます。

Horea Porutiu による優れた入門チュートリアル「IBM Blockchain VSCode 拡張機能を使用してスマート・コントラクトを開発する」をまだ読んでいない場合は、この入門チュートリアルで独自の小さなスターター・スマート・コントラクトの作成に取り組むことをお勧めします。

最後までお付き合いいただいて、ありがとうございます!


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


関連トピック


コメント

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

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Cloud computing
ArticleID=1065886
ArticleTitle=IBM Blockchain VSCode 拡張機能を使用して商業手形スマート・コントラクトを実行する
publish-date=05302019