从 v1.4.x 升级到 v2.x 的用户必须编辑他们的通道配置以启用新的生命周期功能。此过程涉及相关用户必须执行的一系列通道配置更新。
请注意,您的应用程序通道的Channel
和Application
功能必须更新以V2_0
让新的链码生命周期正常工作。查看进入 2.0 的注意事项以获取更多信息。
更新通道配置在较高级别是一个三步过程(对于每个通道):
- 获取最新的频道配置
- 创建修改后的频道配置
- 创建配置更新事务
我们将利用名为 的文件来执行这些通道配置更新,该文件enable_lifecycle.json
包含我们将在通道配置中进行的所有更新。请注意,在生产设置中,多个用户可能会发出这些频道更新请求。但是,为简单起见,我们将所有更新显示为它们在单个文件中的显示方式。
注意:本主题描述了一个不使用“系统通道”的网络,这是一个用于引导排序服务且排序服务专门控制的通道。自 v2.3 发布以来,与在没有系统通道的情况下创建通道的新流程相比,使用系统通道现在被视为遗留流程。有关包含有关系统通道的信息的本主题版本,请查看v2.2 文档中的启用新链码生命周期。
创建 enable_lifecycle.json
请注意,除了使用之外enable_lifecycle.json
,本教程还使用jq
将编辑应用于修改后的配置文件。修改后的配置也可以手动编辑(在它被拉取、翻译和限定范围之后)。查看此示例通道配置以供参考。
但是,此处描述的过程(使用 JSON 文件和类似 的工具jq
)确实具有可编写脚本的优点,使其适合向大量通道提出配置更新,并且是编辑通道配置的推荐过程。
请注意,enable_lifecycle.json
使用示例值,例如org1Policies
和Org1ExampleCom
,这将特定于您的部署):
{
"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/Writers"
},
"_lifecycle/QueryChaincodeDefinitions": {
"policy_ref": "/Channel/Application/Writers"
}
}
}
注意:这些新策略的“角色”字段应该说明'PEER'
是否为组织启用了NodeOU,'MEMBER'
如果没有。
编辑通道配置
要完全启用新的链码生命周期,您必须首先编辑您自己组织的配置,因为它存在于通道配置中,然后您必须更新通道本身以包含通道的默认背书策略。然后,您可以选择更新您的频道访问控制列表。
注意:本主题利用了更新通道配置教程中有关如何更新通道配置的说明。此处列出的环境变量与这些命令结合使用以更新您的频道。
编辑对等组织
默认情况下,对等组织能够在应用程序通道上向自己的组织发出配置更新请求,而无需任何其他对等组织的批准。但是,如果您尝试对其他组织进行更改,则该组织必须批准更改。
您将需要导出以下变量:
CH_NAME
:正在更新的应用程序通道的名称。ORGNAME
:您当前正在更新的组织的名称。TLS_ROOT_CA
:您订购节点的 TLS 证书的绝对路径。CORE_PEER_MSPCONFIGPATH
:代表您的组织的 MSP 的绝对路径。CORE_PEER_LOCALMSPID
:提议频道更新的组织的 MSP ID。这将是对等组织之一的 MSP。ORDERER_CONTAINER
:排序节点容器的名称。定位排序服务时,您可以定位排序服务中的任何特定节点。您的请求将自动转发给领导。
设置环境变量后,导航至Step 1: Pull and translate the config。
然后,将生命周期组织策略(如 中所列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
编辑申请渠道
在所有应用程序通道都更新为包含 V2_0 功能后,必须将新链码生命周期的背书策略添加到每个通道中。
您可以设置在更新对等组织时设置的相同环境变量。请注意,在这种情况下,您不会在配置中更新组织的配置,因此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
然后,按照步骤 3:重新编码并提交 config 中的步骤操作。
要批准此频道更新,Channel/Application
必须满足修改配置部分的策略。默认情况下,这是MAJORITY
通道上对等组织的一个。
编辑频道 ACL(可选)
下面的访问控制列表(ACL)中enable_lifecycle.json
都为新的生命周期的默认值,但你必须改变他们根据你的使用情况的选项。
"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"
您可以保留与之前编辑应用程序频道时相同的环境。
设置环境变量后,导航到第 1 步:拉取并翻译 config。
然后,添加 ACL(如 中所列enable_lifecycle.json
)并创建一个modified_config.json
使用以下命令调用的文件:
jq -s '.[0] * {"channel_group":{"groups":{"Application": {"values": {"ACLs": {"value": {"acls": .[1].acls}}}}}}}' config.json ./enable_lifecycle.json > modified_config.json
然后,按照步骤 3:重新编码并提交 config 中的步骤操作。
要批准此频道更新,Channel/Application
必须满足修改配置部分的策略。默认情况下,这是MAJORITY
通道上对等组织的一个。