{"record":{"id":"aa034d6ed11ca007","repo":"hyperledger/fabric","slug":"supplied-system-channel-group-is-missing-s-cons","errorCode":null,"errorMessage":"supplied system channel group is missing '%s' consortium","messagePattern":"supplied system channel group is missing '(.+?)' consortium","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/configtxgen/encoder/encoder.go","lineNumber":527,"sourceCode":"\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]\n\t\tif !ok {\n\t\t\treturn nil, errors.Errorf(\"consortium %s does not contain member org %s\", conf.Consortium, organization.Name)\n\t\t}\n\t}\n\tdelete(template.Groups, channelconfig.ConsortiumsGroupKey)\n\n\taddValue(template, channelconfig.ConsortiumValue(conf.Consortium), channelconfig.AdminsPolicyKey)\n\n\treturn template, nil","sourceCodeStart":509,"sourceCodeEnd":545,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/internal/configtxgen/encoder/encoder.go#L509-L545","documentation":"ConfigTemplateFromGroup builds a channel-creation config template from the system channel's genesis config. Before doing so it looks up the consortium named in the channel-creation profile under the system channel's ConsortiumsGroup. This error is thrown when the named consortium does not exist in the system channel group, so no template can be derived.","triggerScenarios":"Calling MakeChannelCreationTransaction(WithSystemChannelContext) or ConfigTemplateFromGroup with a profile whose Consortium field names a consortium that is absent from the system channel's config (Consortiums > Groups map), or when the consortiums group exists but the lookup key mismatches (case-sensitive).","commonSituations":"configtx.yaml channel-creation profile references a consortium name that differs from the one defined in the system channel profile (typo, renamed consortium, e.g. 'SampleConsortium' vs 'MyConsortium'); profile lacks a Consortiums section; stale configtx.yaml after reorganizing profiles.","solutions":["Set the channel-creation profile's Consortium field to exactly match a consortium defined in the system channel profile's Consortiums section in configtx.yaml","Verify the system channel profile actually defines the consortium: run `configtxgen -printOrg` or inspect the printed system channel genesis block (showconfig) for the Consortiums group","Regenerate the system channel genesis block after fixing configtx.yaml and restart/redeploy the orderer with the corrected genesis","Check for case/whitespace mismatches in the consortium name; keys are case-sensitive"],"exampleFix":"// before (configtx.yaml)\nChannelCreationProfile:\n  Consortium: SampleConsrtium\n// after\nChannelCreationProfile:\n  Consortium: SampleConsortium","handlingStrategy":"validation","validationCode":"// Go: check the consortium exists in the system channel group before creating the tx\nif consortiums, ok := sysChanGroup.Groups[channelconfig.ConsortiumsGroupKey]; !ok || consortiums.Groups[profile.Consortium] == nil {\n    return fmt.Errorf(\"system channel does not define consortium %q\", profile.Consortium)\n}","typeGuard":"func consortiumDefined(sysChanGroup *cb.ConfigGroup, name string) bool {\n    cs, ok := sysChanGroup.Groups[channelconfig.ConsortiumsGroupKey]\n    return ok && cs.Groups[name] != nil\n}","tryCatchPattern":"if err != nil {\n    if strings.Contains(err.Error(), \"is missing\") && strings.Contains(err.Error(), \"consortium\") {\n        return fmt.Errorf(\"check configtx.yaml: consortium in profile not defined in system channel: %w\", err)\n    }\n    return err\n}","preventionTips":["Keep the consortium name in the channel-creation profile identical to the one in the system channel profile","Run `configtxgen -inspectChannelCreateTxn` or print the system channel config to validate profiles before use","Lint configtx.yaml consortium/profile names in CI"],"tags":["hyperledger-fabric","configtxgen","channel-creation","configuration"],"backgroundTag":"config-resource-not-found","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"}