Fabric 从 v1.4.x 升级到 v2.x 智能合约实践- 升级智能合约

从 v1.4.x 升级到 v2.x 的用户必须编辑他们的通道配置以启用新的生命周期功能。此过程涉及相关用户必须执行的一系列通道配置更新

请注意,您的应用程序通道的ChannelApplication 功能必须更新以V2_0让新的链码生命周期正常工作。查看进入 2.0 的注意事项以获取更多信息。

更新通道配置在较高级别是一个三步过程(对于每个通道):

  1. 获取最新的频道配置
  2. 创建修改后的频道配置
  3. 创建配置更新事务

我们将利用名为 的文件来执行这些通道配置更新,该文件enable_lifecycle.json包含我们将在通道配置中进行的所有更新。请注意,在生产设置中,多个用户可能会发出这些频道更新请求。但是,为简单起见,我们将所有更新显示为它们在单个文件中的显示方式。

注意:本主题描述了一个不使用“系统通道”的网络,这是一个用于引导排序服务且排序服务专门控制的通道。自 v2.3 发布以来,与在没有系统通道的情况下创建通道的新流程相比,使用系统通道现在被视为遗留流程。有关包含有关系统通道的信息的本主题版本,请查看v2.2 文档中的启用新链码生命周期

创建 enable_lifecycle.json

请注意,除了使用之外enable_lifecycle.json,本教程还使用jq将编辑应用于修改后的配置文件。修改后的配置也可以手动编辑(在它被拉取、翻译和限定范围之后)。查看此示例通道配置以供参考。

但是,此处描述的过程(使用 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/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

然后,按照步骤 3:重新编码并提交 config 中的步骤操作

编辑申请渠道

在所有应用程序通道都更新为包含 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通道上对等组织的一个。

启用新的生命周期 core.yaml

如果您遵循使用工具的推荐过程,例如diffcore.yaml打包的新版本与旧版本的二进制文件进行比较,您将不需要添加到启用的系统链代码列表中,因为新版本已将其添加到._lifecycle: enablecore.yamlchaincode/system

但是,如果您要直接更新旧节点 YAML 文件,则必须将其添加到已启用的系统链码列表中。_lifecycle: enable

有关升级节点的更多信息,请查看升级您的组件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值