ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Fabric网络升级(四)

2021-04-26 15:02:55  阅读:217  来源: 互联网

标签:Fabric 网络 更新 升级 json policy config lifecycle 通道


原文来自这里

用户从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


标签:Fabric,网络,更新,升级,json,policy,config,lifecycle,通道
来源: https://www.cnblogs.com/lianshuiwuyi/p/14704647.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有