Fabric网络升级(四)

原文来自这里

用户从v1.4.x升级到v2.x后,必须编辑通道配置来启用新的lifecycle功能。这个过程涉及到相关用户必须执行的一系列通道配置更新

要启用新的chaincode lifecycle,应用程序通道的ChannelApplicationcapabilities必须更新到V2_0,详见Considerations for getting to 2.0

总体来看,通道配置更新分三步(每个通道):

  1. 获取最新的通道配置
  2. 创建修改后的通道配置
  3. 创建配置更新交易

接下来我们使用enable_lifecycle.json文件(包含我们所需要的所有通道配置更新)来更新通道配置。需要留意的是,在生成环境中,可能有多个用户发起通道更新请求。为了方便起见,我们将所有的更新都放在单个文件中呈现。

创建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"
}
}
}

在新的策略中,如果NodeOUs启用了,"role"字段应该设置为PEER,否则设置为MEMBER

编辑通道配置

系统通道更新

因为修改系统通道配置以启用新的lifecycle只涉及到peer组织配置中的通道配置参数,所以被编辑的peer组织都必须掉相关的通道配置更新进行签名。

默认情况下,系统通道只能被系统通道的管理员编辑(排序服务组织的管理员,而非peer组织的),这意味着对联盟中peer组织的配置更新必须有系统通道管理提出,并发送给相应的peer组织进行签名。

需要导入以下环境变量:

  • CH_NAME:待更新的系统通道名称。
  • CORE_PEER_LOCALMSPID:执行通道更新操作的MSP ID,排序服务组织中的MSP。
  • TLS_ROOT_CA:发起系统通道更新组织的TLS证书的绝对路径。
  • CORE_PEER_MSPCONFIGPATH:标识你的组织的MSP存放的绝对路径。
  • ORDERER_CONTAINER:排序节点的容器名称。访问排序服务时,你可以访问排序服务中的任意节点。你的请求会自动提交给leader节点。
  • ORGNAME:正在更新的组织名称。
  • CONSORTIUM_NAME:正在更新的联盟名称。

设置好环境变量之后,Step 1: Pull and translate the config

之后,使用下面的命令将lifecycle组织策略(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

如上所述,这些更新都必须由系统通道管理员提出,并发送给相应的peer组织进行签名。

应用程序通道更新

编辑peer组织

我们需要对所有应用程序通道上的组织执行一组类似的编辑。

跟系统通道不同,peer组织可以发起对应用程序通道的配置更新请求。如果你只是对自己的组织进行配置更新,那你不需要其它组织的签名;但如果你要更新另一个组织的配置,那你就需要这个组织的签名。

需要导入以下环境变量:

  • CH_NAME:待更新的应用程序通道名称。
  • CORE_PEER_LOCALMSPID:执行通道更新操作的MSP ID,peer组织中的MSP。
  • TLS_ROOT_CA:排序节点的TLS证书的绝对路径。
  • CORE_PEER_MSPCONFIGPATH:标识你的组织的MSP存放的绝对路径。
  • ORDERER_CONTAINER:排序节点的容器名称。访问排序服务时,你可以访问排序服务中的任意节点。你的请求会自动提交给leader节点。
  • ORGNAME:正在更新的组织名称。

设置好环境变量之后,Step 1: Pull and translate the config

之后,使用下面的命令将lifecycle组织策略(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

编辑应用程序通道

在所有的应用程序通道都已经更新到包含V2_0capabilities后,新的chaincode lifecycle背书策略必须添加到所有的通道中。

所需的环境变量与更新peer组织时一样。不同之处在于不需要更新配置文件中的组织配置,所以不需要设置ORGNAME

设置好环境变量之后,Step 1: Pull and translate the config

之后,使用下面的命令将lifecycle组织策略(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章节配置的修改策略。默认情况下,需要该通道中的大多数peer组织同意。

编辑通道ACLs(可选)

下面的访问控制列表(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"

可以使用前面编辑应用程序通道时使用的环境变量。

设置好环境变量之后,Step 1: Pull and translate the config

之后,使用下面的命令将lifecycle组织策略(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

最后,Step 3: Re-encode and submit the config

要通过通过更新请求,则必须满足配置文件中Channel/Application章节配置的修改策略。默认情况下,需要该通道中的大多数peer组织同意。

core.yaml中启用新的lifecycle

如果你是按照推荐操作,使用diff之类的工具比较新旧core.yaml,那你就不必添加_lifecycle: enable来启用系统chaincode,因为它在新版core.yamlchaincode/system下。

如果你是直接更新原有的YAML文件,那就必须添加_lifecycle: enable来启用系统chaincode。

关于节点升级的信息,详见Upgrading your components


声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
Author: MonsterMeng92


posted @   落雷  阅读(144)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示