定义功能需求

如文档 Channel capabilities 中所述,在通道配置(在通道的最新配置区块中找到)中,为每个通道定义了功能需求。通道配置包含三个位置,每个位置定义了不同类型的功能。

Capability Type Canonical Path JSON Path
Channel /Channel/Capabilities .channel_group.values.Capabilities
Orderer /Channel/Orderer/Capabilities .channel_group.groups.Orderer.values.Capabilities
Application /Channel/Application/Capabilities .channel_group.groups.Application.values. Capabilities

功能设置

功能设置是通道配置的一部分(要么作为初始配置,要么作为重新配置的一部分)。

注解

有关如何更新通道配置的更多信息,请查看 doc:channel_update_tutorial。要了解不同的通道更新类型,请查看 更新通道配置

默认情况下,新通道将复制排序系统通道的配置,因此新通道将被自动配置为和排序系统通道中的排序节点、通道功能以及通道创建交易是指定的应用功能一起工作。通道已经存在了,但是必须被重新配置。

功能的值在 protobuf 定义如下:

message Capabilities {
      map<string, Capability> capabilities = 1;
}

message Capability { }

JSON 格式如下:

{
    "capabilities": {
        "V1_1": {}
    }
}

初始配置中的功能

在发布的构件中 config 目录下的 configtx.yaml 文件中,有一个 Capabilities 部分,列举了每种功能类型(通道、排序节点和应用程序)的可能功能。

使用功能最简答的方法就是将 v1.1 中的示例结构复制过来并修改。例如:

SampleSingleMSPRaftV1_1:
    Capabilities:
        <<: *GlobalCapabilities
    Orderer:
        <<: *OrdererDefaults
        Organizations:
            - *SampleOrg
        Capabilities:
            <<: *OrdererCapabilities
    Consortiums:
        SampleConsortium:
            Organizations:
                - *SampleOrg

请注意, Capabilities 在根级别(用于通道功能)和 Orderer 级别(用于排序节点功能)各有一个定义部分。上边的示例使用 YAML 引用了在 YAML 文件底部定义的功能。

定义排序服务通道的时候没有 Application 部分,它在创建应用通道的时候会被创建。要在创建通道的时候定义新通道中应用的功能,应用程序管理员需要在 SampleSingleMSPChannelV1_1 结构后边定义他们的通道创建交易。

SampleSingleMSPChannelV1_1:
     Consortium: SampleConsortium
     Application:
         Organizations:
             - *SampleOrg
         Capabilities:
             <<: *ApplicationCapabilities

这里,Application 部分有一个新元素 Capabilities,引用了 YAML 最后部分的 ApplicationCapabilities

注解

Channel 和 Orderer 部分的功能继承了排序系统通道的定义,并被在创建通道时自动包含到了排序节点中。