func(dt *DefaultTemplator) NewChannelConfig(envConfigUpdate *cb.Envelope) (channelconfig.Resources, error) { ... // 解包 // 检查 Application 组配置项的 Version if uv := configUpdate.WriteSet.Groups[channelconfig.ApplicationGroupKey].Version; uv != 1 { returnnil, fmt.Errorf("Config update for channel creation does not set application group version to 1, was %d", uv) } ... // 从系统配置中取 ChannelCreationPolicy 给新的 applicationGroup 模版 applicationGroup := cb.NewConfigGroup() consortiumsConfig, ok := dt.support.ConsortiumsConfig() if !ok { returnnil, fmt.Errorf("The ordering system channel does not appear to support creating channels") }
consortiumConf, ok := consortiumsConfig.Consortiums()[consortium.Name] if !ok { returnnil, fmt.Errorf("Unknown consortium name: %s", consortium.Name) }
// Get the current system channel config systemChannelGroup := dt.support.ConfigtxValidator().ConfigProto().ChannelGroup
// 如果 consortium group 没有组织成员, 允许 channel 创建中的 Application 中不包含组织成员 // 如果 consortium group 中有任何组织成员, 那么 channel 创建中的 Applicaiton 组织成员至少要有其中一个 iflen(systemChannelGroup.Groups[channelconfig.ConsortiumsGroupKey].Groups[consortium.Name].Groups) > 0 && len(configUpdate.WriteSet.Groups[channelconfig.ApplicationGroupKey].Groups) == 0 { returnnil, fmt.Errorf("Proposed configuration has no application group members, but consortium contains members") }
// 检查 channel 创建请求中的组织是否属于联盟组织成员 iflen(systemChannelGroup.Groups[channelconfig.ConsortiumsGroupKey].Groups[consortium.Name].Groups) > 0 { for orgName := range configUpdate.WriteSet.Groups[channelconfig.ApplicationGroupKey].Groups { consortiumGroup, ok := systemChannelGroup.Groups[channelconfig.ConsortiumsGroupKey].Groups[consortium.Name].Groups[orgName] if !ok { returnnil, fmt.Errorf("Attempted to include a member which is not in the consortium") } applicationGroup.Groups[orgName] = proto.Clone(consortiumGroup).(*cb.ConfigGroup) } }
for _, org := range conf.Organizations { var err error // Note, NewOrdererOrgGroup is correct here, as the structure is identical consortiumGroup.Groups[org.Name], err = NewOrdererOrgGroup(org) if err != nil { returnnil, errors.Wrap(err, "failed to create consortium org") } }