Enabling the new chaincode lifecycle

v1.4.x から v2.x にアップグレードした場合、新しいライフサイクルの機能を有効にするために、チャネル設定を編集する必要があります。このプロセスは channel configuration updates に関連しているので、必要に応じて確認してください。

新しいチェーンコードライフサイクルを動作させるためには、アプリケーションチャネルの ChannelApplicationcapabilities を、 V2_0 に更新する必要があります。より詳しい情報は、 Considerations for getting to 2.0 を参照してください。

チャネル設定の更新は、大まかに3ステップあります。この更新は各チャネルに対して実施してください。

  1. 最新のチャネル設定の取得
  2. 修正したチャネル設定の作成
  3. 設定更新トランザクションの作成

enable_lifecycle.json を使用してチャネル設定を更新します。このファイルは、チャネル設定で変更する箇所の全てを含みます。本番環境の設定に関しては、複数のユーザがチャネル更新のリクエストを送信することになります。しかし、単純化のために、ここでは単一のファイルを使用して更新する方法を説明します。

Create enable_lifecycle.json

enable_lifecycle.json を使用することに加えて、このチュートリアルでは jq を使用します。これは、修正内容をファイルに適用するために使用します。また修正するファイルは、(プルし、トランスレイトし、スコープした後に)手動で編集することも可能です。関連する情報は、 sample channel configuration を参照してください。

ここで説明するJSONファイルと jq の様なツールを使用したプロセスは、スクリプタブルで数多くののチャネルを更新することに適しており、チャネル設定を編集するためのプロセスとして推奨されています。

また、ここで説明する enable_lifecycle.json は、 org1PoliciesOrg1ExampleCom の様なサンプル値を使用します。これらは、使用する環境に合わせて設定してください。

{
  "org1Policies": {
      "Endorsement": {
           "mod_policy": "Admins",
           "policy": {
               "type": 1,
               "value": {
               "identities": [
                  {
	                 "principal": {
	           	         "msp_identifier": "Org1ExampleCom",
	           	         "role": "PEER"
	                 },
	                 "principal_classification": "ROLE"
	              }
              	],
              	"rule": {
                  "n_out_of": {
			           "n": 1,
			           "rules": [
			           	{
			           		"signed_by": 0
			           	}
			           ]
			       }
              	},
              	"version": 0
              }
           },
           "version": "0"
      }
   },
  "org2Policies": {
      "Endorsement": {
           "mod_policy": "Admins",
           "policy": {
               "type": 1,
               "value": {
               "identities": [
                  {
	                 "principal": {
	           	         "msp_identifier": "Org2ExampleCom",
	           	         "role": "PEER"
	                 },
	                 "principal_classification": "ROLE"
	              }
              	],
              	"rule": {
                  "n_out_of": {
			           "n": 1,
			           "rules": [
			           	{
			           		"signed_by": 0
			           	}
			           ]
			       }
              	},
              	"version": 0
              }
           },
           "version": "0"
      }
   },
   "appPolicies": {
 		"Endorsement": {
			"mod_policy": "Admins",
			"policy": {
				"type": 3,
				"value": {
					"rule": "MAJORITY",
					"sub_policy": "Endorsement"
				}
			},
			"version": "0"
		},
		"LifecycleEndorsement": {
			"mod_policy": "Admins",
			"policy": {
				"type": 3,
				"value": {
					"rule": "MAJORITY",
					"sub_policy": "Endorsement"
				}
			},
			"version": "0"
		}
   },
   "acls": {
		"_lifecycle/CheckCommitReadiness": {
			"policy_ref": "/Channel/Application/Writers"
		},
		"_lifecycle/CommitChaincodeDefinition": {
			"policy_ref": "/Channel/Application/Writers"
		},
		"_lifecycle/QueryChaincodeDefinition": {
			"policy_ref": "/Channel/Application/Readers"
		},
		"_lifecycle/QueryChaincodeDefinitions": {
			"policy_ref": "/Channel/Application/Readers"
		}
   }
}

注釈:新しいポリシーの"role"フィールドに関して、 NodeOUs が組織で有効になっている場合は 'PEER' 、そうでない場合は 'MEMBER' を設定する必要があります。

Edit the channel configurations

System channel updates

新しいライフサイクルを有効にするシステムチャネルへの設定変更は、チャネル設定に含まれるピア組織の設定パラメータにだけ関連するので、編集された各ピア組織は関連するチャネル設定の更新に署名する必要があります。

しかしデフォルトでは、システムチャネル管理者によってのみシステムチャネルは編集されます。(典型的なシステムチャネル管理者は、ピア組織ではなくオーダリングサービス組織の管理者です。)これは、コンソーシアム内のピア組織への設定更新はシステムチャネル管理者によって提案され、署名が必要なピア組織に送信されます。

また、以下の環境変数をエクスポートする必要があります:

  • CH_NAME: 更新するシステムチャネルの名称
  • CORE_PEER_LOCALMSPID: チャネルの更新を提案した組織のMSP ID(オーダリングサービス組織の1つのMSP IDになります。)
  • CORE_PEER_MSPCONFIGPATH: 対象組織のMSPへの絶対パス
  • TLS_ROOT_CA: システムチャネルの更新を提案した組織が持つルートCA証明書への絶対パス
  • ORDERER_CONTAINER: オーダリングノードコンテナの名称(どのオーダリングサービスのノードを対象としても良いです。自動的にリーダーに転送されます。)
  • ORGNAME: 更新する対象組織の名称
  • CONSORTIUM_NAME: 更新するコンソーシアムの名称

環境変数を設定した後は、 Step 1: Pull and translate the config を参照してください。

その後に、 enable_lifecycle.json にある様なライフサイクル組織ポリシーを、以下のコマンドを使用して modified_config.json に追加してください:

jq -s ".[0] * {\"channel_group\":{\"groups\":{\"Consortiums\":{\"groups\": {\"$CONSORTIUM_NAME\": {\"groups\": {\"$ORGNAME\": {\"policies\": .[1].${ORGNAME}Policies}}}}}}}}" config.json ./enable_lifecycle.json > modified_config.json

そして、 Step 3: Re-encode and submit the config を参照してください。

前述した様に、これらの更新はシステムチャネル管理者によって提案され、署名が必要なピア組織に送信されます。

Application channel updates

Edit the peer organizations

全てのアプリケーションチャネル上の全組織に対して、同様のセットの編集をする必要があります。

システムチャネルとは異なり、ピア組織はアプリケーションチャネルに対して設定更新のリクエストを作成できます。自組織の設定に変更を加えたい場合、他組織の署名なしに変更することが可能です。しかし、異なる組織の設定に変更を加える場合、当該組織が変更を承認する必要があります。

また、以下の環境変数をエクスポートする必要があります:

  • CH_NAME: 更新するアプリケーションチャネルの名称
  • ORGNAME: 更新する対象組織の名称
  • TLS_ROOT_CA: オーダリングノードのTLS証明書への絶対パス
  • CORE_PEER_MSPCONFIGPATH: 対象組織のMSPへの絶対パス
  • CORE_PEER_LOCALMSPID: チャネルの更新を提案した組織のMSP ID(ピア組織のMSP IDになります。)
  • ORDERER_CONTAINER: オーダリングノードコンテナの名称(どのオーダリングサービスのノードを対象としても良いです。自動的にリーダーに転送されます。)

環境変数を設定した後は、 Step 1: Pull and translate the config を参照してください。

Then, add the lifecycle organization policy (as listed in enable_lifecycle.json) to a file called modified_config.json using this command:

その後に、 enable_lifecycle.json にある様なライフサイクル組織ポリシーを、以下のコマンドを使用して modified_config.json に追加してください:

jq -s ".[0] * {\"channel_group\":{\"groups\":{\"Application\": {\"groups\": {\"$ORGNAME\": {\"policies\": .[1].${ORGNAME}Policies}}}}}}" config.json ./enable_lifecycle.json > modified_config.json

そして、 Step 3: Re-encode and submit the config を参照してください。

Edit the application channels

updated to include V2_0 capabilities に沿って全てのアプリケーションチャネルのケーパビリティを更新した後、新しいチェーンコードライフサイクル向けの各アプリケーションチャネルのエンドースメントポリシーを更新してください。

ピア組織を更新する際、同じ環境変数を設定することができます。この場合、設定ファイル内の組織の設定を更新できないので、 ORGNAME の環境変数は使用できません。

環境変数を設定した後は、 Step 1: Pull and translate the config を参照してください。

その後に、 enable_lifecycle.json にある様なライフサイクル組織ポリシーを、以下のコマンドを使用して modified_config.json に追加してください:

jq -s '.[0] * {"channel_group":{"groups":{"Application": {"policies": .[1].appPolicies}}}}' config.json ./enable_lifecycle.json > modified_config.json

そして、 Step 3: Re-encode and submit the config を参照してください。

チャネルの更新が承認されるためには、設定に含まれる Channel/Application セクションの変更のためのポリシーを満たす必要があります。デフォルトでは、チャネルのピア組織の 過半数 を得る必要があります。

Edit channel ACLs (optional)

enable_lifecycle.json に含まれる以下の Access Control List (ACL) は、新しいライフサイクルのためのデフォルト値です。ユースケースに応じて、それらを変更してください。

"acls": {
 "_lifecycle/CheckCommitReadiness": {
   "policy_ref": "/Channel/Application/Writers"
 },
 "_lifecycle/CommitChaincodeDefinition": {
   "policy_ref": "/Channel/Application/Writers"
 },
 "_lifecycle/QueryChaincodeDefinition": {
   "policy_ref": "/Channel/Application/Readers"
 },
 "_lifecycle/QueryChaincodeDefinitions": {
   "policy_ref": "/Channel/Application/Readers"

アプリケーションチャネルを編集したときと同様に、環境変数を設定します。

環境変数を設定した後は、 Step 1: Pull and translate the config を参照してください。

その後、 enable_lifecycle.json にある様なACLを、以下のコマンドを使用して modified_config.json に追加してください:

jq -s '.[0] * {"channel_group":{"groups":{"Application": {"values": {"ACLs": {"value": {"acls": .[1].acls}}}}}}}' config.json ./enable_lifecycle.json > modified_config.json

そして、 Step 3: Re-encode and submit the config を参照してください。

チャネルの更新が承認されるためには、設定に含まれる Channel/Application セクションの変更のためのポリシーを満たす必要があります。デフォルトでは、チャネルのピア組織の 過半数 を得る必要があります。

Enable new lifecycle in core.yaml

diff の様なツールを使用して新しいバージョンと古いバージョンの core.yaml を比較するような、 the recommended process の方法に沿う場合、 chaincode/system 配下にある新しいバージョンの core.yaml_lifecycle: enable が含まれるため、システムチェーンコードリストに _lifecycle: enable を追加する必要はありません。

しかし、古いノードのYAMLファイルを直接更新する場合、システムチェーンコードリストに _lifecycle: enable を、 追加する必要があります。

ノードのアップグレードに関するより詳しい情報は、 Upgrading your components を参照してください。