hyperledger/fabric · error

ErrSystemChannelNotSupported

ErrSystemChannelNotSupported

Error message

invalid config: contains consortiums

What it means

ValidateJoinBlock guard: the config bundle derived from the join block contains a consortiums group, i.e. it is a system channel config. The channel participation API only accepts application channel configs, so joining with a system channel genesis block is rejected (wrapped with ErrSystemChannelNotSupported).

Source

Thrown at orderer/common/channelparticipation/validator.go:56

		return "", errors.New("invalid block: Header.DataHash is different from Hash(block.Data)")
	}

	envelope, err := protoutil.ExtractEnvelope(configBlock, 0)
	if err != nil {
		return "", err
	}

	cryptoProvider := factory.GetDefault()
	bundle, err := channelconfig.NewBundleFromEnvelope(envelope, cryptoProvider)
	if err != nil {
		return "", err
	}

	channelID = bundle.ConfigtxValidator().ChannelID()

	// Check channel type
	_, isSystemChannel := bundle.ConsortiumsConfig()
	if isSystemChannel {
		return "", errors.WithMessage(types.ErrSystemChannelNotSupported, "invalid config: contains consortiums")
	}

	_, isAppChannel := bundle.ApplicationConfig()
	if !isAppChannel {
		return "", errors.New("invalid config: must contain application config")
	}

	return channelID, err
}

// ValidateUpdateConfigEnvelope checks whether this envelope can be used as an update config for the channel participation API.
// It returns the channel ID.
// It verifies that it is not a system channel by checking that consortiums config does not exist.
// It verifies it is an application channel by checking that the application group exists.
// It returns an error when it cannot be used as a update config envelope.
func ValidateUpdateConfigEnvelope(env *cb.Envelope) (channelID string, err error) {
	payload, err := protoutil.UnmarshalPayload(env.Payload)

View on GitHub (pinned to 2736b63f8f)

Solutions

  1. Join with the application channel's genesis block instead of the system channel's
  2. If migrating from a system channel, use the osnadmin migration flow to produce an application channel genesis block
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at orderer/common/channelparticipation/validator.go:56 when the library encounters an invalid state.

Common situations: See trigger scenarios.


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