Fabric网络升级(四)
原文来自这里。
用户从v1.4.x升级到v2.x后,必须编辑通道配置来启用新的lifecycle功能。这个过程涉及到相关用户必须执行的一系列通道配置更新。
要启用新的chaincode lifecycle,应用程序通道的Channel和Applicationcapabilities必须更新到V2_0,详见Considerations for getting to 2.0。
总体来看,通道配置更新分三步(每个通道):
- 获取最新的通道配置
- 创建修改后的通道配置
- 创建配置更新交易
接下来我们使用enable_lifecycle.json文件(包含我们所需要的所有通道配置更新)来更新通道配置。需要留意的是,在生成环境中,可能有多个用户发起通道更新请求。为了方便起见,我们将所有的更新都放在单个文件中呈现。
创建enable_lifecycle.json文件
除了使用enable_lifecycle.json文件外,本教程还将使用jq将编辑后的内容应用到文件中。修改的文件也可以手动编辑,详见sample channel configuration。
本文展示的操作(使用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/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.yaml的chaincode/system下。
如果你是直接更新原有的YAML文件,那就必须添加_lifecycle: enable来启用系统chaincode。
关于节点升级的信息,详见Upgrading your components。
声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
Author: MonsterMeng92
Fabric网络升级(四)的更多相关文章
- 搭建Fabric网络(四)运行网络
启动网络 docker-compose -f docker-compose-cli.yaml up -d如果container cli关闭了,可以手动启动 docker start cli 设置环境变 ...
- hyperledger中文文档学习-4-构建第一个fabric网络
接下来的操作都将在hyperledge环境安装构建的虚拟机的环境下进行 参考https://hyperledgercn.github.io/hyperledgerDocs/build_network_ ...
- 搭建基于hyperledger fabric的联盟社区(五) --启动Fabric网络
现在所有的文件都已经准备完毕,我们可以启动fabric网络了. 一.启动orderer节点 在orderer服务器上运行: cd ~/go/src/github.com/hyperledger/fab ...
- Hyperledger Fabric手动生成CA证书搭建Fabric网络
之前介绍了使用官方脚本自动化启动一个Fabric网络,并且所有的证书都是通过官方的命令行工具cryptogen直接生成网络中的所有节点的证书.在开发环境可以这么简单进行,但是生成环境下还是需要我们自定 ...
- 36 网络相关函数(四)——live555源码阅读(四)网络
36 网络相关函数(四)——live555源码阅读(四)网络 36 网络相关函数(四)——live555源码阅读(四)网络 简介 7)createSocket创建socket方法 8)closeSoc ...
- 基于ubuntu16.04快速构建Hyperledger Fabric网络
前言 最近在参加一个比赛,使用到了区块链的开源软件hyperledger,由于之前从未接触过区块链,以及和区块链开发相关的内容,所有在网上查阅了大量的资料,并且通过学习yeasy(杨宝华)开源的入门书 ...
- fabric网络环境启动过程详解
这篇文章对fabric的网络环境启动过程进行讲解,也就是我们上节讲到的启动测试fabric网络环境时运行network_setup.sh这个文件的执行流程 fabric网络环境启动过程详解 上一节我们 ...
- 搭建Fabric网络(二)下载bin和images
上一篇已经把运行和开发Fabric需要的程序都安装好了,这一篇主要讲怎么运行一个简单的Fabric网络. 1. 下载官方Sample代码 git clone -b master https://gi ...
- Windows下fabric sdk连接Linux上fabric网络的调试过程
上个月刚入职一家公司从事区块链研发工作,选型采用Hyperledger Fabric作为开发平台.团队的小组成员全部采用的是在VirtualBox上面安装桌面版的Ubuntu 16.04虚拟机,开发工 ...
- Linux内核分析 - 网络[十四]:IP选项
Linux内核分析 - 网络[十四]:IP选项 标签: linux内核网络structsocketdst 2012-04-25 17:14 5639人阅读 评论(1) 收藏 举报 分类: 内核协议栈 ...
随机推荐
- ByConity 社区回顾|ByConity 和开发者们一起展望未来,携手共进!
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 新年伊始,我们想在这里感谢一群 ByConity 社区的小伙伴们. 正是因为有社区的开发者的支持,截止到 2023 ...
- 火山引擎DataTester:三类AB实验,让企业营销拥有灵敏“网感”
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 作者:火山引擎AB测试 近日,火山引擎数智平台举办了"走进火山-全链路增长:数据飞轮转动消费新生力& ...
- 遇事不决,量子力学;不懂配色,赛博朋克。推荐一个Python可视化库
遇事不决,量子力学;不懂配色,赛博朋克.推荐一个Python可视化库 12月10日,历经多次跳票后,波兰公司CD Projekt Red制作的<赛博朋克2077>终于正式发售,在Steam ...
- "error LNK2019: 无法解析的外部符号"原因分析
1.工程属性选择错误 问题: 分析: 新建的是控制台程序,但编译器和链接器却用的是windows子系统 解决办法: WINDOWS和CONSOLE选择 右键工程名, 打开属性,依次找到以下路径: 然后 ...
- 通过 Homebrew 在 Mac OS X 上安装和配置 Redis
通过使用 Homebrew,可以大大降低在 Mac OS X 上设置和配置开发环境的成本. 让我们安装 Redis. $ brew install redis 安装后,我们将看到一些有关配置注意事项的 ...
- #627 DIV3 题解
A. 每组给一个和个数(),每次操作可以给一个加2,求是否能使n个数相等 4 3 1 1 3 4 1 1 2 1 2 11 11 1 100 YES NO YES YES 直接扫一遍,记录最大值与当前 ...
- Codeforces 1326A Bad Ugly Numbers (思维)
Codeforces 1326A Bad Ugly Numbers 看完题目,第一直觉,质数肯定满足题意,再看数据范畴,\(1≤n≤10^5\), 质数线性筛仅能做到 n=7 的情况,即处理到1000 ...
- vivo平台化实践探索之旅-平台产品系列01
vivo 互联网平台产品研发团队- Yang Yang 本篇为<vivo 平台产品>系列文章的第1篇.主要描述在业务高速发展的背景下,vivo软件工程师通过系统平台化建设等手段,逐步解决软 ...
- 消息服务 + Serverless 函数计算如何助力企业降本提效?
作者 | 柳下 背景介绍 消息队列服务(下文均以 Message Service 命名)作为云计算 PaaS 领域的基础设施之一,其高并发.削峰填谷的特性愈发受到开发者关注.Message Servi ...
- RocketMQ(2)---核心概念、特性、使用等
对于RocketMQ而言,感觉官方提供的东西还是可以的:https://github.com/apache/rocketmq/tree/master/docs/cn