すべてのプロダクト
Search
ドキュメントセンター

Blockchain as a Service:チェーンコードのデプロイ

最終更新日:Jan 19, 2025

Hyperledger Fabric フレームワークでは、チェーンコードはスマートコントラクトを実装します。 チェーンコードは Node.js、Go、または Java で記述できます。 今後、さらに多くの言語がサポートされる予定です。 このトピックでは、チャネルにチェーンコードをデプロイする方法について説明します。

説明

この章は、Fabric V2.2 または V2.5 のインスタンスを購入したユーザーに適用されます。 Fabric V1.4 のインスタンスを購入した場合は、「チェーンコードの管理 (V1.4)」のチェーンコードのデプロイに関するセクションをご参照ください。

チェーンコードのパッケージ化

チェーンコードをデプロイする前に、Hyperledger Fabric の開発環境でチェーンコードを開発、テスト、およびパッケージ化する必要があります。

  • チェーンコードを開発します。

  • チェーンコードをテストした後、peer lifecycle chaincode package コマンドを実行してチェーンコードをパッケージ化します。 必要な依存関係をパッケージに含めることをお勧めします。 次の例は、必要な依存関係を Go チェーンコードの vendor ディレクトリに配置する方法を示しています。

    1. govendor を使用して依存関係を読み込みます。

      1. 次のコマンドを実行して govendor をインストールします。

        go get -u -v github.com/kardianos/govendor
      2. チェーンコードのプロジェクトディレクトリに移動し、次のコマンドを実行して vendor ディレクトリを初期化します。

        govendor init
      3. 次のコマンドを実行して、このプロジェクトで使用されている依存関係を GOPATH から vendor ディレクトリに自動的に移動します。

        govendor add +external
    2. go mod コマンドを実行して依存関係を読み込みます。

      1. 次のコマンドを実行して go mod を初期化します。

        go mod init
      2. 次のコマンドを実行して、依存関係を vendor フォルダに自動的にパッケージ化します。

        go mod vendor
  • パッケージ化コマンドの詳細については、「peer lifecycle chaincode commands」をご参照ください。 注意:

    1. Go チェーンコードの場合は、-p オプションに $GOPATH/src 内のメインパッケージディレクトリの相対パスを指定します。 Java チェーンコードの場合は、-p オプションにチェーンコードのプロジェクトディレクトリを指定します。 Node.js チェーンコードの場合は、-p オプションに package.json ファイルを含むチェーンコードプロジェクトのルートディレクトリを指定します。 -p オプションには、./xxx 形式の相対パスを指定しないでください。

    2. Go で記述されたチェーンコードの場合は、-l オプションを無視できます。 Node.js の場合は、-l node を指定します。 Java の場合は、-l java を指定します。

    3. --label を使用して、デフォルトのチェーンコード名とバージョンを指定します。

  • 次の例では、$GOPATH/src/github.com/hyperledger/fabric-samples/chaincode/sacc ディレクトリにある Go チェーンコードが、チェーンコードラベル sacc_1_0 を使用して sacc.tar.gz パッケージに圧縮されます。

    peer lifecycle chaincode package -p github.com/hyperledger/fabric-samples/chaincode/sacc --label sacc_1_0 -l golang sacc.tar.gz

    peer パッケージ:

  • Mac: hyperledger-fabric-darwin-amd64-2.2.0.tar.gz

  • Linux: hyperledger-fabric-linux-amd64-2.2.0.tar.gz


チェーンコードをデプロイするには、次の 3 つのステップを実行します。 チャネル内の既存のチェーンコードをアップグレードする方法の詳細については、「チェーンコードのアップグレード」をご参照ください。

  1. チェーンコードをアップロードする

  2. チェーンコードをインストールする

  3. チェーンコード定義を送信する

チェーンコードのアップロード

  1. Alibaba Cloud Blockchain as a Service (BaaS) コンソール にログインします。

  2. 概要ページの 所属組織 セクションで、管理する組織を見つけ、組織の名前をクリックします。

  3. 表示されるページで、チェーンコードパッケージの管理 タブをクリックします。

  4. チェーンコードパッケージの管理チェーンコードのアップロード タブで、 をクリックします。

  5. 表示されるパネルで、開発環境でパッケージ化したチェーンコードをアップロードします。 チェーンコードをパッケージ化する方法の詳細については、「チェーンコードのパッケージ化」セクションをご参照ください。

  6. [OK] をクリックします。

    image.png

    チェーンコードがアップロードされると、チェーンコードパッケージの管理ラベル タブのチェーンコード リストに表示されます。 列に表示されるチェーンコード名は、チェーンコードをパッケージ化するときに指定した名前です。

チェーンコードのインストール

前提条件

チェーンコードがアップロードされていること。

手順

  1. Alibaba Cloud BaaS コンソール にログインします。

  2. 概要ページの 所属組織 セクションで、管理する組織を見つけ、組織の名前をクリックします。

  3. 表示されるページで、チェーンコードパッケージの管理 タブをクリックします。

  4. チェーンコード パッケージ管理インストールアクション タブで、インストールするチェーンコードを見つけ、 列の をクリックして、現在の組織にチェーンコードをインストールします。

    インストール中に、チェーンコードは自動的にプリコンパイルされ、チェーンコード パッケージに潜在的な問題がないかチェックされます。

    Precompilation

プリコンパイルには、チェーンコードの依存関係の複雑さに応じて数秒から数分かかる場合があります。インストールが完了すると、[ステータス] 列のチェーンコードステータスが [未インストール] から [インストール済み] に変わり、[アクション] 列のボタンが [インストール] から [定義を送信] に変わります。

チェーンコード定義の送信

前提条件

チェーンコードがアップロードされ、インストールされていること。

手順

  1. Alibaba Cloud BaaS コンソール にログインします。

  2. 概要ページの 所属組織 セクションで、管理する組織を見つけ、組織の名前をクリックします。

  3. 表示されるページで、チェーンコード パッケージ管理 タブをクリックします。

  4. チェーンコードパッケージ管理定義を送信アクション タブで、定義を送信するチェーンコードを見つけ、 列の をクリックします。

  5. 表示されるパネルで、手順に基づいてパラメーターを設定します。

    image.png

パラメーター

説明

[名前]

チェーンコードをパッケージ化するときにチェーンコードに指定した名前。 名前をそのまま使用することも、チェーンコードに新しい名前を付けることもできます。

注: 別のチェーンコードですでに使用されている名前のチェーンコードの定義を送信することはできません。

[バージョン]

チェーンコード定義を送信するときに定義するバージョン。

[デプロイチャネル]

チェーンコードをデプロイするチャネル。 チェーンコードがデプロイされると、このチャネル内のすべての組織でチェーンコードが表示されます。 チャネルを作成する方法の詳細については、「チャネルの作成」をご参照ください。

[初期化するかどうか]

チェーンコードを初期化するかどうかを指定します。 有効な値:

  • サポートサポート: チェーンコードが Init メソッドを実装している場合は、SDK を使用して特別な初期化トランザクションを送信した後にのみチェーンコードを呼び出すことができます。 この場合は、 を選択してチェーンコードを初期化します。

  • サポートされていません: チェーンコードに Init メソッドが含まれていない場合は、チェーンコードを初期化する必要はありません。この場合は、[サポートされていません] を選択します。

[エンドースメントポリシー]

トランザクションを有効とみなすために、チェーンコードを実行し、実行結果をエンドースする必要があるチャネル上のピアのセットを指定するポリシー。 例:

  • OR ('org0MSP.peer','org1MSP.peer') は、チャネル内の 2 つの組織のいずれかがチェーンコードトランザクションをエンドースする必要があることを示します。

  • AND ('org0MSP.peer','org1MSP.peer') は、このチャネル内の 2 つの組織がチェーンコードトランザクションをエンドースする必要があることを示します。

  • OutOf (a,'org0MSP.member','org1MSP.member','org2MSP.member'): a1 に設定されている場合、チャネル内の 3 つの組織のいずれかがチェーンコードトランザクションをエンドースする必要があります。 a2 に設定されている場合、少なくとも 2 つのチャネルの組織がチェーンコードトランザクションをエンドースする必要があります。 a が組織の数と等しい場合、チャネル内のすべての組織がチェーンコードトランザクションをエンドースする必要があります。

説明

*.peer* は、前の図の MSP ID によって決定されます。

[上位]

[Superior] をクリックすると、[プライバシー設定の構成] フィールドに、チェーンコードの非公開データコレクションの JSON データを入力できます。チェーンコードで非公開データを使用しない場合は、この手順をスキップできます。非公開データコレクションの JSON データの例: [{"name": "collectionName", "policy": "OR('org0MSP.peer')", "memberOnlyRead": false, "requiredPeerCount": 0, "maxPeerCount": 3, "blockToLive": 0}] は、チェーンコードが collectionName という名前の非公開データ名前空間を必要とすることを示しています。組織 Org0 内のピアのみがこの名前空間の非公開データを取得できます。

説明

プライベートデータコレクションの name パラメータまたは blockToLive パラメータを設定した後、後のアップグレードで変更することはできません。 詳細については、Fabric でのプライベートデータの使用に関するドキュメントをご参照ください。

  1. [送信] をクリックします。

    その後、チェーンコードチャネルの状態コンセンサスで組織内のステータス処理完了承認の詳細アクション タブでチェーンコードのステータスを確認できます。チェーンコード定義を送信すると、 列のステータスが に変わり、 列のステータスが に変わります。 列の をクリックすると、チェーンコードの基本情報を確認できます。

    View the status information

  2. チャネル内の他の組織がチェーンコード定義を確認して送信するまで待ちます。

    説明

    デフォルトでは、チェーンコード定義は、チャネル内の組織の 50% によって確認された後にのみ送信できます。

    1. 別の組織のメンバーとして、Alibaba Cloud BaaS コンソール にログオンします。

    2. 組織概要 ページの セクションで、管理する組織を見つけ、組織名をクリックします。

    3. 表示されたページで、チェーンコードチェーンコードハンドルアクション タブをクリックします。 タブで、管理するチェーンコードを見つけ、 列の をクリックします。

    4. [チェーンコード処理] パネルで、送信された定義が要件を満たしていることを確認し、定義を確認する場合は [送信] をクリックします。

      チャネル内の組織の 50% が定義を確認すると、チェーンコードがデプロイされます。 チェーンコードチャネルの状態コンセンサスで実行中アップグレードログの表示アクション タブの 列のステータスが から に変わります。 列に と が表示されます。

      Deployed

      説明

      送信したチェーンコード定義が要件を満たしていない場合、他の組織はチェーンコード定義を処理しないことを選択できます。 チェーンコード パッケージをアップロードし、チェーンコードをインストールし、チェーンコード定義を再送信する必要があります。 この場合、送信するパラメーターは元のパラメーターとは異なり、[チェーンコード] タブには複数のコンセンサス レコードが表示されます。 ある組織が 1 つのコンセンサス レコードを処理すると、チェーンコードの他のコンセンサス レコードは表示されなくなります。

次のステップ

ユーザーの管理ブロックチェーンネットワークへのアクセス