hyperledger/fabric · error

consortium %s does not contain member org %s

Error message

consortium %s does not contain member org %s

What it means

After locating the consortium and the profile's Application section, ConfigTemplateFromGroup copies each application organization into the new channel's Application group by looking it up in the consortium's Groups map. This error is thrown when an org listed in the profile's Application.Organizations is not a member of the referenced consortium.

Source

Thrown at internal/configtxgen/encoder/encoder.go:538

	if consortiums.Groups == nil {
		return nil, errors.Errorf("system channel consortiums group appears to have no consortiums defined")
	}

	consortium, ok := consortiums.Groups[conf.Consortium]
	if !ok {
		return nil, errors.Errorf("supplied system channel group is missing '%s' consortium", conf.Consortium)
	}

	if conf.Application == nil {
		return nil, errors.Errorf("supplied channel creation profile does not contain an application section")
	}

	for _, organization := range conf.Application.Organizations {
		var ok bool
		template.Groups[channelconfig.ApplicationGroupKey].Groups[organization.Name], ok = consortium.Groups[organization.Name]
		if !ok {
			return nil, errors.Errorf("consortium %s does not contain member org %s", conf.Consortium, organization.Name)
		}
	}
	delete(template.Groups, channelconfig.ConsortiumsGroupKey)

	addValue(template, channelconfig.ConsortiumValue(conf.Consortium), channelconfig.AdminsPolicyKey)

	return template, nil
}

// MakeChannelCreationTransaction is a handy utility function for creating transactions for channel creation.
// It assumes the invoker has no system channel context so ignores all but the application section.
// Deprecated
func MakeChannelCreationTransaction(
	channelID string,
	signer identity.SignerSerializer,
	conf *genesisconfig.Profile,
) (*cb.Envelope, error) {
	template, err := DefaultConfigTemplate(conf)

View on GitHub (pinned to 2736b63f8f)

Solutions

  1. Add the missing organization to the Consortium's Organizations list in the system channel profile in configtx.yaml
  2. Or remove the org from the profile's Application.Organizations if it should not join the channel
  3. Regenerate the system channel genesis block and retry channel creation
  4. Verify org names match exactly (case-sensitive) between Consortium and Application Organizations lists

Example fix

// before (configtx.yaml)
Consortiums:
  SampleConsortium:
    Organizations:
      - Org1
Application:
  Organizations:
    - Org2
// after
Consortiums:
  SampleConsortium:
    Organizations:
      - Org1
      - Org2
Application:
  Organizations:
    - Org2
Defensive patterns

Strategy: validation

Validate before calling

// Go: ensure every application org is a member of the consortium before creating the tx
for _, org := range profile.Application.Organizations {
    if consortium.Groups[org.Name] == nil {
        return fmt.Errorf("org %q is not a member of consortium %q", org.Name, profile.Consortium)
    }
}

Type guard

func orgInConsortium(consortium *cb.ConfigGroup, orgName string) bool { return consortium.Groups[orgName] != nil }

Try / catch

if err != nil {
    if strings.Contains(err.Error(), "does not contain member org") {
        return fmt.Errorf("add the org to the Consortium's Organizations in configtx.yaml: %w", err)
    }
    return err
}

Prevention

When it happens

Trigger: Calling MakeChannelCreationTransaction(WithSystemChannelContext) where an organization named in the profile's Application.Organizations does not appear under the named consortium's Organizations in the system channel profile.

Common situations: Org added to an application channel profile before being added to the consortium; consortium name and org lists drifted after configtx.yaml edits; org name typo; two consortiums used interchangeably.

Related errors


AI-assisted analysis of hyperledger/fabric@2736b63f8f (2026-09-04). Data as JSON: /api/errors/cc0daa349336c8bc. Report an issue: GitHub.