zoukankan      html  css  js  c++  java
  • 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


  • 相关阅读:
    Django Ajax知识
    Django走过的坑
    Django-8 聚合查询与分组查询
    Django-7 ORM多表操作
    Django-6 Django ORM层
    Django-5 模板层
    docker 常用批量操作
    K8S 从私有仓库拉取镜像
    linux制作iso文件
    二进制安装docker
  • 原文地址:https://www.cnblogs.com/lianshuiwuyi/p/14704647.html
Copyright © 2011-2022 走看看