IBM Developer Japan Webサイトは2021年3月15日をもって終了となり、日本語コンテンツの一部は、オープンソースとして、提供予定です。 URLはこちら

基本的なブロックチェーン・ネットワークのセットアップ手順を学ぶ

IBM Blockchain Platform は、ネットワーク・コンポーネントのすべてを柔軟かつスケーラブルにデプロイして制御できる、サービスとしてのブロックチェーン・オファリングです。IBM Blockchain Platform では、Hyperledger Fabric 1.4.x コード・ベースを使用して、ユーザーが管理および制御する IBM Cloud Kubernetes Service にコンポーネントをデプロイします。ブロックチェーン・ネットワークのコンポーネントをデプロイする際は、そのプロセスを単純化して加速するユーザー・インターフェースを使用できます。このチュートリアルでは、IBM Blockchain Platform を利用して基本的なブロックチェーン・ネットワークをセットアップする手順を説明します。

前提条件

このチュートリアルに取り組むための前提条件は以下のとおりです。

  • Blockchain Basics: Hyperledger Fabric: ブロックチェーン・ネットワークとそのコンポーネントについての基礎知識が必要です。Hyperledger Fabric ネットワークの基礎を理解するには、この記事が役立ちます。
  • IBM Cloud アカウント: IBM Cloud Lite アカウントでは、IBM Cloud Kubernetes サービス・インスタンスを作成できません。
  • VS Code バージョン 1.38 以降
  • IBM Blockchain Platform VS Code 拡張機能 IBM Blockchain Platform VS Code 拡張機能
  • 任意のサンプル Go/Node.js チェーンコード
  • Go 1.12.x 以降 (Go チェーンコードを使用する場合)
  • Node v8.x または v10.x と npm v6.x 以降 (Node.js チェーンコードを使用する場合)

所要時間

IBM Blockchain Platform のセットアップにかかる時間とは別に、Kubernetes クラスターをデプロイするには約 25 ~ 30 分の時間が必要です。既存の Kubernetes クラスターがある場合、このチュートリアルの所要時間は約 60 分です。

手順

ブロックチェーン・ソリューションを設計する際の最初のステップとして、ブロックチェーン・コンソーシアム (別の言葉で言い換えると、ブロックチェーン・ネットワークの参加者) を決定する必要があります。ブロックチェーン・ネットワークのコンポーネントを決定したら (組織の数、各組織内のピアの数、順序付けサービス組織、認証局 (CA) など)、クラウド上でのネットワークのセットアップに取り掛かることができます。ブロックチェーン・ネットワークの構造が以下の図に示すようになっている場合は、ここに示されている以下のコンポーネントを作成する必要があります。

  • 3 つの CA
  • 3 つのメンバーシップ・サービス・プロバイダー (MSP)
  • 2 つのピア
  • 1 つの順序付けサービス組織
  • 2 つのピア組織と 1 つの順序付けサービス組織が参加する 1 つのチャネル

ブロックチェーン・ネットワーク構造を示す図

このチュートリアルで説明する手順では、CA、MSP、ピア・ノードなどのコンポーネントをそれぞれ 1 つ作成します。ネットワーク構造に応じて同じ手順を繰り返してください。

IBM Blockchain Platform コンソールで以下の手順に従って、ブロックチェーン・ネットワークをデプロイします。

1

IBM Cloud Kubernetes Service インスタンスを作成する

適切なプラン、Kubernetes のバージョン、フレーバーなどを選択した後、IBM Cloud 上で IBM Cloud Kubernetes Service (IKS) インスタンスを作成します。Kubernetes Service クラスターが完全にデプロイされていることを確認してください。

2

IBM Cloud 上で IBM Blockchain Platform サービス・インスタンスを作成する

IBM Cloud カタログ上で IBM Blockchain Platform サービスを検索し、このサービスをクリックします。リージョンを選択し、サービス名とリソース・グループを指定してから「Create (作成)」をクリックします。

IBM Blockchain Platform サービスを検索する画面のスクリーン・キャプチャー

このチュートリアル用の Kubernetes クラスターはすでにセットアップされているはずです。したがって、「Link a Kubernetes clusteron IBM Cloud (IBM Cloud 上の Kubernetes クラスターをリンク)」項目をクリックし、「Let’s get setup! (セットアップを開始!)」をクリックします。既存のクラスターの名前を指定して「Next (次へ)」をクリックします (まだ Kubernetes クラスターを作成していなければ、「Create a Kubernetes cluster on IBM Cloud (IBM Cloud 上で Kubernetes クラスターを作成)」を選択してください)。

IBM Blockchain Platform サービス・インスタンスを作成する画面のスクリーン・キャプチャー

3

プラットフォームを起動する

IBM Blockchain Platform サービス・インスタンスがクラスターに正常にデプロイされたら、プラットフォームを起動できます。

IBM Blockchain Platform を起動する画面のスクリーン・キャプチャー

Launch the IBM Blockchain Platform console (IBM Blockchain Platform コンソールを起動)」をクリックします。IBM Blockchain Platform ページで、「Let’s get started (開始する)」をクリックします。強調表示された情報アイコンをクリックすると、そのノード/ステップに関する詳細情報を確認できます。こうした情報は、IBM Blockchain Platform をデプロイする際の各ステップで利用できます。

IBM Blockchain Platform 起動後の画面のスクリーン・キャプチャー

4

認証局 (CA) を追加する

ブロックチェーンへのエントリー・ポイントとして、MSP 組織を作成する必要があります。それには、組織管理者のユーザー ID が必要になります。組織の定義に加え、組織に属するすべての ID と証明書を作成するのは、CA の役目です。したがって、ブロックチェーン・ネットワークをセットアップするには、まず、CA を作成しなければなりません。

  1. まず始めに、ネットワークに CA を設定します。「Add Certificate Authority (認証局の追加)」をクリックします。「Create a Certificate Authority (認証局の作成)」セクションを選択してから「Next (次へ)」をクリックします。 認証局を追加する画面のスクリーン・キャプチャー

  2. CA の名前 (例:「Org1CA」)、CA 管理者の登録 ID、登録シークレットを入力してから (例えば、ID として「admin」、シークレットとして「adminpw」を入力)、「Next (次へ)」をクリックします。

  3. サマリーを確認してから「Add Certificate Authority (認証局を追加)」をクリックします。

5

ユーザーを登録する

前のステップで作成した CA を使用してユーザーを登録します。

  1. 以下に示されているように、作成した CA をクリックします。 CA を作成する画面のスクリーン・キャプチャー

  2. Associate identity (ID を関連付ける)」をクリックします。これで、CA 管理者 ID が CA ノードに関連付けられます。(ステップ 4 で使用したものと同じ) CA の登録 ID と登録シークレットを入力します。ID の表示名は変更できます。または、割り当てられたデフォルト名のまま先に進めてもかまいません。「Associate identity (ID を関連付ける)」をクリックします。

  3. Register user (ユーザーを登録)」をクリックし、組織の管理者を登録します。 ユーザーを登録する画面のスクリーン・キャプチャー

    登録 ID と登録シークレットを入力します (例えば、ID として「org1admin」、シークレットとして「org1adminpw」を入力)。この ID のタイプとして 「admin」を設定します。このタイプに設定された ID は、組織管理者としてコンソールを使用してノードを操作できます。残りの属性「Maximum enrollments (最大登録数)」は省略できるので、空のままにして「Next (次へ)」をクリックします。 ユーザーを登録する画面のスクリーン・キャプチャー

  4. 次に、属性を追加するよう求められます。これらの属性はリソースに対する役割ベースのアクセス制御に使用されるものですが、このチュートリアルには必要ありません。「Register user (ユーザーを登録)」をクリックしてユーザーを登録します。

  5. ステップ 1 から 4 まで繰り返して、peer タイプの ID を設定した別のユーザーを登録します。このタイプの ID では、ピアをデプロイすることができます。

6

組織の MSP 定義を作成する

ピアの公式の組織定義は、MSP と呼ばれます。これまでの手順で組織の CA とユーザーを作成したので、次は MSP 定義を作成します。

  1. 左側のパネルで「Organizations (組織)」タブにナビゲートし、「Create MSP definition (MSP 定義を作成)」をクリックします (以下の図を参照)。 「Create MSP definition (MSP 定義を作成)」ボタンのスクリーン・キャプチャー

  2. 必要なすべての情報を入力します。

    • MSP details (MSP 詳細):「MSP display name (MSP 表示名)」と「MSP ID」に値を入力します。

    • Root Certificate Authority details (ルート認証局詳細):「Root Certificate Authority (ルート認証局)」(ステップ 4 で作成した、組織のルート CA) を選択し、ID 名を入力します。

    • Admin certificates (管理者証明書): 組織の管理者 ID として作成した登録 ID (例: org1admin) を選択し、登録シークレットと ID 名を入力します。

  3. Generate (生成)」をクリックします。組織の管理者としての ID が生成されて、ウォレットに追加されます。 新しい ID を生成する画面のスクリーン・キャプチャー

  4. 公開鍵と秘密鍵を失くさないよう、この時点で鍵をエクスポートしてから「Next (次へ)」をクリックします。最後に、「Create MSP definition (MSP 定義を作成)」をクリックします。

7

ピア・ノードを作成する

ピアは、レジャーとスマート・コントラクトをホストする、ネットワークの基本要素です。

  1. Nodes (ノード)」タブにナビゲートして「Add peer (ピアを追加)」をクリックします。「Create a peer (ピアを作成)」を選択してから「Next (次へ)」をクリックします。 ピアを追加する画面のスクリーン・キャプチャー

  2. ピアの表示名を入力します。デプロイのための詳細設定はデフォルト値のままにして「Next (次へ)」をクリックします。

  3. 次に表示される画面で、ステップ 4 で作成した CA を選択します。また、ステップ 5 の最後で作成したピアの登録 ID とピア ID を選択し、対応するシークレットを入力します。続いて「Organization MSP (組織 MSP)」と Fabric のバージョンをドロップダウン・リストから選択し、「Next (次へ)」をクリックします。 ピアの情報を入力する画面のスクリーン・キャプチャー

  4. 次の画面では、ピアの管理者にする ID を関連付けるよう求められます。このチュートリアルの場合、組織管理者 (org1 msp admin) を選択して「Next (次へ)」をクリックします。

  5. サマリーを確認してから「Add Peer (ピアを追加)」をクリックします。同じ組織にさらにピアを追加する場合は、ステップ 5 で登録したピア ID を使って新しいユーザーを登録し、この手順を繰り返します。

注: ステップ 4 から 7 を繰り返して、必要なだけ組織とピアを作成してください。

8

順序付けサービス・ノードを作成する

順序付けサービス・ノードは、ネットワーク内でトランザクション配信を保証する通信サービスを実行します。

  1. 順序付けサービス・ノードを作成するには、その前に順序付けサービス CA を作成する必要があります。ステップ 4 で行ったのと同じ手順に従って、順序付けサービス CA を作成します。

  2. 次に、順序付けサービス CA を使用して順序付けサービス・ユーザー ID を登録します。ステップ 5 の手順を最初から最後まで繰り返して、管理者 ID のユーザーと順序付けサービス ID のユーザーを登録します。

  3. ステップ 6 で行ったのと同じ方法で順序付けサービス MSP 定義を作成します。ルート認証局には必ず順序付けサービス CA を選択してください。

  4. 次は、順序付けサービス・ノードを作成します。「Nodes (ノード)」タブにナビゲートして「Add ordering service (順序付けサービスを追加)」をクリックします。

    Create an ordering service (順序付けサービスを作成)」を選択してから「Next (次へ)」をクリックします。「Ordering service display name (順序付けサービス表示名)」を入力します。「Number of ordering nodes (順序付けサービス・ノードの数)」には 1 を指定するのでかまいません (デプロイとテストの目的では、1 つの順序付けサービス・ノードで十分です)。設定が完了したら「Next (次へ)」をクリックします。 順序付けサービス・ノードを作成する画面のスクリーン・キャプチャー

  5. ステップ 7 で説明した必要な情報を入力します。ただし、今回は適切な順序付けサービス CA と順序付けサービス MSP を選択してください。入力し終わったら「Next (次へ)」をクリックします。

  6. 順序付けサービス管理者 ID を関連付けてから「Next (次へ)」をクリックします。

  7. サマリーを確認してから「Add ordering service (順序付けサービスを追加)」をクリックします。

9

順序付けサービスで組織をコンソーシアム・メンバーとして追加する

  1. Nodes (ノード)」タブにナビゲートし、ステップ 8 で作成した順序付けサービス・ノードをクリックします。

  2. Consortium members (コンソーシアム・メンバー)」セクションで「Add organization (組織を追加)」をクリックします。

  3. Existing MSP ID (既存の MSP ID)」を選択します。ドロップダウン・リストから、ステップ 6 で作成した組織の MSP を選択し (この MSP はピア組織を表します)、「Add organization (組織を追加)」をクリックします。

  4. このコンソーシアムのメンバーにするすべての組織について、このステップを繰り返します。

10

チャネルを作成する

チャネルは、ブロックチェーン・ネットワーク内の一連のコンポーネントが通信してトランザクションを行うために使用するメカニズムです。

  1. 左側のナビゲーションで「Channels (チャネル)」タブにナビゲートして「Create channel (チャネルを作成)」をクリックします。「Next (次へ)」をクリックします。 チャネルを作成する画面のスクリーン・キャプチャー

  2. Channel details (チャネルの詳細)」に、チャネルの名前を入力します。「Ordering service (順序付けサービス)」ドロップダウン・リストから、前に作成した順序付けサービスを選択します。「Next (次へ)」をクリックします。

  3. 組織をチャネルに追加します。チャネルに属するチャネル・メンバーとして、一度に 1 つずつ組織 (組織の MSP) を選択して「Add (追加)」をクリックします。それぞれの組織に適切な権限 (オペレーター/書き込み組織/閲覧組織) を選択します。この手順を繰り返して、必要なすべての組織をチャネルに追加したら、「Next (次へ)」をクリックします。 チャネルを作成する画面のスクリーン・キャプチャー

  4. 選択可能な項目から適切なチャネル更新ポリシーを選択し、「Next(次へ)」をクリックします。

  5. 次は、チャネル作成組織です。ドロップダウン・リストから、チャネルを作成する組織を識別する「Channel Creator MSP (チャネル作成組織 MSP)」を選択します。次に、その組織に有効な管理者 ID を関連付けて、「Next (次へ)」をクリックします。

  6. 以上の手順をすべて完了したら、チャネルの情報を確認してから「Create channel (チャネルを作成)」をクリックします。

11

チャネルに参加する

  1. 左側のナビゲーションで「Channels (チャネル)」タブにナビゲートして「Join Channel (チャネルに参加)」をクリックします。
  2. 順序付けサービスを選択し、「Next (次へ)」をクリックします。
  3. ステップ 10 で作成したチャネルの名前を入力し、「Next (次へ)」をクリックします。
  4. チャネルに参加させるピアを選択し、「Join Channel (チャネルに参加)」をクリックします。
12

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

  1. スマート・コントラクトが Golang で作成されている場合は、$HOME/go/src/<chaincode_folder>/<chaincode_file>.go としてスマート・コントラクトを配置します。「GOPATH」には $HOME/go を、「GOROOT」には <go install directory> を設定し、PATH の末尾に $GOROOT/bin を付加します。

  2. VS Code 内でフォルダーを開きます。このフォルダーに格納されているのは Go/Node.js で作成されたスマート・コントラクトのみ でなければなりません。スマート・コントラクト・ファイル以外のファイルが格納されていると、スマート・コントラクトをパッケージ化する際にエラーが発生する可能性があります。

  3. F1 キーを押して、VS Code のさまざまな機能を表示し、「IBM Blockchain Platform: Package Open Project (IBM Blockchain Platform: オープン・プロジェクトのパッケージ化)」を選択します。このステップを開始する前に、Node、NPM、Go がインストール済みで、それぞれに対応するパスが設定されていることを確認してください。 スマート・コントラクトをパッケージ化する画面のスクリーン・キャプチャー

  4. パッケージ名とバージョンを入力するよう求められます。スマート・コントラクトをアップグレードして新しいバージョンをデプロイできるよう、正しいバージョンを入力することが重要です。この情報を入力した後、スマート・コントラクト・パッケージが作成されます。

  5. 左側のナビゲーション・パネルで「IBM Blockchain Platform」をクリックします。スマート・コントラクト・パッケージの下に <package name>@<version> というファイル名形式の .cds ファイルが示されていることを確認します。

  6. パッケージを右クリックして「Export Package (パッケージのエクスポート)」をクリックし、ファイルを保存します。

13

スマート・コントラクトをインストールする

  1. Smart contracts (スマート・コントラクト)」タブにナビゲートして「Install smart contract (スマート・コントラクトをインストール)」をクリックします。 スマート・コントラクトをインストールする画面のスクリーン・キャプチャー

  2. Upload package (パッケージのアップロード)」セクションで「Add file (ファイルを追加)」をクリックし、アップロードするスマート・コントラクト・パッケージ・ファイル (.cds) を指定します。ステップ 12 で VS Code 拡張機能を使用してパッケージ化したファイルを選択してください。 パッケージをアップロードする画面のスクリーン・キャプチャー

  3. スマート・コントラクトがアップロードされたら、「Install smart contract (スマート・コントラクトをインストール)」をクリックします。

14

スマート・コントラクトをインスタンス化する

  1. Smart contracts (スマート・コントラクト)」タブにナビゲートします。このタブには、インストール済みスマート・コントラクトのリストが表示されます。このリストから、ピアにインストールしたスマート・コントラクトを見つけて、行の右側にあるオーバーフロー・メニューから「Instantiate (インスタンス化)」を選択します。 スマート・コントラクトをインスタンス化する画面のスクリーン・キャプチャー

  2. サイド・パネルでスマート・コントラクトをインスタンス化するチャネルを選択してから、「Next (次へ)」をクリックします。

  3. 次は、エンドースメント・ポリシーをセットアップする必要があります。エンドースメント・ポリシーに含める組織メンバーを選択してから「Next (次へ)」をクリックします。

  4. この時点でプライベート・データ収集をセットアップすることもできますが、このステップは省略できるので今回はスキップします。「Next (次へ)」をクリックします。

  5. スマート・コントラクトの初期化関数の名前を入力し、必要な引数を設定してから、「Instantiate smart contract (スマート・コントラクトをインスタンス化)」をクリックします。インスタンス化が完了するまで待ちます。 関数名を入力する画面のスクリーン・キャプチャー

  6. インスタンス化が完了すると、「Smart contracts (スマート・コントラクト)」タブのリストにインスタンス化済みスマート・コントラクトの 1 つとして表示されます。

15

接続プロファイルをダウンロードする

ネットワークが正常に作成されて、ネットワーク上でスマート・コントラクトがインスタンス化されたら、任意の Fabric SDK (Node.js/Java) を使用してブロックチェーン・ネットワークと相互作用するクライアント・アプリケーションの作成を開始できます。この SDK は接続プロファイルを使用してネットワークに接続します。接続プロファイルを作成してダウンロードするには、「Organizations (組織)」タブにナビゲートして組織 MSP タイルをクリックし、「Create connection profile (接続プロファイルを作成)」をクリックします。接続プロファイルに含めるピアを選択し、ダウンロードします。

まとめ

このチュートリアルでは、IBM Blockchain Platform コンソールを使用してブロックチェーン・ネットワークを作成する方法、ネットワーク上にスマート・コントラクトをデプロイする方法、ネットワークの接続プロファイルをダウンロードする方法を説明しました。IBM Blockchain Platform は柔軟にカスタマイズできるプラットフォームです。ネットワーク内でインスタンス化したスマート・コントラクトをテスト、デバッグ、アップグレードすることさえ可能です。次のステップとしては、スマート・コントラクトを呼び出してブロックチェーン・レジャー上の資産を作成、譲渡、更新するクライアント・アプリケーションを作成できます。その方法について詳しくは、IBM Developer Blockchain コード・パターンを参照してください。

最後の注意事項: ネットワークにコンポーネントを追加できるかどうかは、クラスター内のリソースの可用性によって決まります。さらにコンポーネント (ピアや組織など) を追加する必要がある場合は、Kubernetes クラスターのサイズをスケーリングしなければならない可能性があります。