{"record":{"id":"f6da4ee206d2aa7f","repo":"hyperledger/fabric","slug":"supplied-system-channel-group-does-not-appear-to-b","errorCode":null,"errorMessage":"supplied system channel group does not appear to be system channel (missing consortiums group)","messagePattern":"supplied system channel group does not appear to be system channel \\(missing consortiums group\\)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/configtxgen/encoder/encoder.go","lineNumber":518,"sourceCode":"\treturn channelGroup, nil\n}\n\nfunc ConfigTemplateFromGroup(conf *genesisconfig.Profile, cg *cb.ConfigGroup) (*cb.ConfigGroup, error) {\n\ttemplate := proto.Clone(cg).(*cb.ConfigGroup)\n\tif template.Groups == nil {\n\t\treturn nil, errors.Errorf(\"supplied system channel group has no sub-groups\")\n\t}\n\n\ttemplate.Groups[channelconfig.ApplicationGroupKey] = &cb.ConfigGroup{\n\t\tGroups: map[string]*cb.ConfigGroup{},\n\t\tPolicies: map[string]*cb.ConfigPolicy{\n\t\t\tchannelconfig.AdminsPolicyKey: {},\n\t\t},\n\t}\n\n\tconsortiums, ok := template.Groups[channelconfig.ConsortiumsGroupKey]\n\tif !ok {\n\t\treturn nil, errors.Errorf(\"supplied system channel group does not appear to be system channel (missing consortiums group)\")\n\t}\n\n\tif consortiums.Groups == nil {\n\t\treturn nil, errors.Errorf(\"system channel consortiums group appears to have no consortiums defined\")\n\t}\n\n\tconsortium, ok := consortiums.Groups[conf.Consortium]\n\tif !ok {\n\t\treturn nil, errors.Errorf(\"supplied system channel group is missing '%s' consortium\", conf.Consortium)\n\t}\n\n\tif conf.Application == nil {\n\t\treturn nil, errors.Errorf(\"supplied channel creation profile does not contain an application section\")\n\t}\n\n\tfor _, organization := range conf.Application.Organizations {\n\t\tvar ok bool\n\t\ttemplate.Groups[channelconfig.ApplicationGroupKey].Groups[organization.Name], ok = consortium.Groups[organization.Name]","sourceCodeStart":500,"sourceCodeEnd":536,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/internal/configtxgen/encoder/encoder.go#L500-L536","documentation":"A genuine system channel config group must contain a Consortiums sub-group; ConfigTemplateFromGroup looks it up to graft the consortium into the new channel template. If the ConsortiumsGroupKey group is missing, the supplied group is not a system channel group, and this error is returned.","triggerScenarios":"Calling ConfigTemplateFromGroup (directly or via MakeChannelCreationTransactionWithSystemChannelContext) with a group that has sub-groups but no `Consortiums` group — e.g. an application channel's group or a system-channel config without consortiums.","commonSituations":"Fetching the wrong channel's config from the orderer (application channel instead of system channel); passing a post-migration config where consortiums no longer apply; hand-built groups omitting Consortiums.","solutions":["Pass the ordering system channel's config group, which includes the Consortiums group.","Verify the channel name used to fetch the config is the system channel (e.g. test-chainid / your system channel name).","Confirm the system channel profile defines a Consortiums section and genesis was generated with it."],"exampleFix":"// before\ncg := getConfigGroupForChannel(\"mychannel\") // application channel\n// after\ncg := getConfigGroupForChannel(\"test-chainid\") // system channel with Consortiums","handlingStrategy":"validation","validationCode":"if _, ok := cg.Groups[channelconfig.ConsortiumsGroupKey]; !ok {\n    return errors.New(\"supplied group is not a system channel (missing Consortiums)\")\n}","typeGuard":"func hasConsortiumsGroup(cg *cb.ConfigGroup) bool {\n    if cg == nil || cg.Groups == nil { return false }\n    _, ok := cg.Groups[channelconfig.ConsortiumsGroupKey]\n    return ok\n}","tryCatchPattern":"tmpl, err := encoder.ConfigTemplateFromGroup(profile, cg)\nif err != nil && strings.Contains(err.Error(), \"missing consortiums group\") {\n    return errors.New(\"pass the ordering system channel's config group\")\n}","preventionTips":["Verify the channel whose config you fetch is the system channel.","Confirm the system channel genesis includes a Consortiums section.","Guard programmatically with hasConsortiumsGroup before calling the API."],"tags":["hyperledger-fabric","configtx","system-channel","consortiums"],"backgroundTag":"invalid-system-channel-group","analyzedSha":"2736b63f8fd5932511d56fe68b7039d15977f7f6","analyzedAt":"2026-09-04T08:52:36.465Z","contentChangedAt":"2026-09-04T08:52:36.465Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}