首页区块链技术智能合约Hyperledger Fabric中通道配置组和值的权限配置
  • 评论(0)

分享到

微博

微信

QQ

Hyperledger Fabric中通道配置组和值的权限配置

配置组和值的权限开放

任何有效配置都是以下配置的子集。 这里我们使用符号peer.<MSG>来定义ConfigValue,其值字段是在fabric / protos / peer / configuration.proto中定义的名为<MSG>的封送原型消息。 常见的符号<MSG>,msp.<MSG>和orderer.<MSG>对应类似,但是在fabric / protos / common / configuration.proto,fabric / protos / msp / mspconfig.proto中定义了它们的消息,以及 fabric / protos / orderer / configuration.proto分别。

请注意,键{{org_name}}和{{consortium_name}}表示任意名称,并指示可以使用不同名称重复的元素。

&ConfigGroup{
    Groups: map<string, *ConfigGroup> {
        "Application":&ConfigGroup{
            Groups:map<String, *ConfigGroup> {
                {{org_name}}:&ConfigGroup{
                    Values:map<string, *ConfigValue>{
                        "MSP":msp.MSPConfig,
                        "AnchorPeers":peer.AnchorPeers,
                    },
                },
            },
        },
        "Orderer":&ConfigGroup{
            Groups:map<String, *ConfigGroup> {
                {{org_name}}:&ConfigGroup{
                    Values:map<string, *ConfigValue>{
                        "MSP":msp.MSPConfig,
                    },
                },
            },

            Values:map<string, *ConfigValue> {
                "ConsensusType":orderer.ConsensusType,
                "BatchSize":orderer.BatchSize,
                "BatchTimeout":orderer.BatchTimeout,
                "KafkaBrokers":orderer.KafkaBrokers,
            },
        },
        "Consortiums":&ConfigGroup{
            Groups:map<String, *ConfigGroup> {
                {{consortium_name}}:&ConfigGroup{
                    Groups:map<string, *ConfigGroup> {
                        {{org_name}}:&ConfigGroup{
                            Values:map<string, *ConfigValue>{
                                "MSP":msp.MSPConfig,
                            },
                        },
                    },
                    Values:map<string, *ConfigValue> {
                        "ChannelCreationPolicy":common.Policy,
                    }
                },
            },
        },
    },

    Values: map<string, *ConfigValue> {
        "HashingAlgorithm":common.HashingAlgorithm,
        "BlockHashingDataStructure":common.BlockDataHashingStructure,
        "Consortium":common.Consortium,
        "OrdererAddresses":common.OrdererAddresses,
    },
}

Orderer系统通道配置

订购系统渠道需要定义订购参数,以及用于创建渠道的联合体。 订购服务必须只有一个订购系统渠道,它是第一个要创建的渠道(或更准确地引导)。 建议永远不要在订购系统通道创建配置中定义应用程序部分,但可以进行测试。 请注意,对订购系统渠道具有读访问权限的任何成员都可以看到所有渠道创建,因此应限制此渠道的访问权限。

排序参数定义为以下配置子集:

&ConfigGroup{
    Groups: map<string, *ConfigGroup> {
        "Orderer":&ConfigGroup{
            Groups:map<String, *ConfigGroup> {
                {{org_name}}:&ConfigGroup{
                    Values:map<string, *ConfigValue>{
                        "MSP":msp.MSPConfig,
                    },
                },
            },

            Values:map<string, *ConfigValue> {
                "ConsensusType":orderer.ConsensusType,
                "BatchSize":orderer.BatchSize,
                "BatchTimeout":orderer.BatchTimeout,
                "KafkaBrokers":orderer.KafkaBrokers,
            },
        },
    },

参与订购的每个组织在Orderer组下都有一个组元素。 该组定义单个参数MSP,其中包含该组织的加密身份信息。 Orderer组的值确定排序节点的运行方式。 它们存在于每个通道中,因此orderer.BatchTimeout例如可以在一个通道上以不同方式指定。

在启动时,订货人面对的文件系统包含许多渠道的信息。 订货人通过识别定义了联合体组的渠道来识别系统渠道。 联合体组具有以下结构。

&ConfigGroup{
    Groups: map<string, *ConfigGroup> {
        "Consortiums":&ConfigGroup{
            Groups:map<String, *ConfigGroup> {
                {{consortium_name}}:&ConfigGroup{
                    Groups:map<string, *ConfigGroup> {
                        {{org_name}}:&ConfigGroup{
                            Values:map<string, *ConfigValue>{
                                "MSP":msp.MSPConfig,
                            },
                        },
                    },
                    Values:map<string, *ConfigValue> {
                        "ChannelCreationPolicy":common.Policy,
                    }
                },
            },
        },
    },
},

请注意,每个联盟都定义了一组成员,就像订购组织的组织成员一样。 每个联盟还定义了ChannelCreationPolicy。 这是一个用于授权频道创建请求的策略。 通常,此值将设置为ImplicitMetaPolicy,要求通道的新成员签名以授权创建通道。 有关频道创建的更多详细信息,请参阅本文档的后

应用程序通道配置

应用程序配置适用于为应用程序类型事务设计的通道。 它的定义如下:

&ConfigGroup{
    Groups: map<string, *ConfigGroup> {
        "Application":&ConfigGroup{
            Groups:map<String, *ConfigGroup> {
                {{org_name}}:&ConfigGroup{
                    Values:map<string, *ConfigValue>{
                        "MSP":msp.MSPConfig,
                        "AnchorPeers":peer.AnchorPeers,
                    },
                },
            },
        },
    },
}

与Orderer部分一样,每个组织都被编码为一个组。然而,代替仅编码MSP身份信息,每个组织另外编码AnchorPeers列表。该列表允许不同组织的对等方彼此联系以进行对等八卦网络。

应用程序通道对订货人组织和共识选项的副本进行编码,以允许确定性地更新这些参数,因此包括来自订货人系统通道配置的相同Orderer部分。但是从应用程序的角度来看,这可能会被忽略。

频道创建

当订货人收到不存在的渠道的CONFIG_UPDATE时,订货人会认为这必须是渠道创建请求并执行以下操作。

  1. 订货人识别要为其执行信道创建请求的联盟。它通过查看顶级组的Consortium值来实现。

  2. 订购者验证应用程序组中包含的组织是相应联盟中包含的组织的子集,并且ApplicationGroup设置为版本1。

  3. 订货人验证如果财团有成员,新渠道也有申请成员(创建财团和没有成员的渠道仅对测试有用)。

  4. orderer通过从订购系统通道获取Orderer组,并使用新指定的成员创建Application组并将其mod_policy指定为consortium配置中指定的ChannelCreationPolicy来创建模板配置。请注意,策略是在新配置的上下文中进行评估的,因此需要所有成员的策略需要来自所有新通道成员的签名,而不是联盟的所有成员。

  5. 然后,订货人将CONFIG_UPDATE应用为此模板配置的更新。由于CONFIG_UPDATE对应用程序组应用了修改(其版本为1),因此配置代码会根据ChannelCreationPolicy验证这些更新。如果通道创建包含任何其他修改(例如,对于单个组织的锚点对等体),则将调用该元素的相应mod策略。

  6. 具有新通道配置的新CONFIG事务被包装并发送以在订购系统通道上进行订购。订购后,将创建该渠道。

©免责声明和风险提示:本文系用户自行发布或转载,不代表比特万象任何观点,如有任何形式的转载请联系原作者。文章中的所有内容均不构成比特万象任何的投资建议及意见、立场,请您根据自身评估做出理性决策。比特万象仅提供网络存储空间服务,如文章侵犯到您的合法权利,请您通知比特万象予以删除。
粤ICP备17084271号-2 Copyright © 比特万象 版权所有