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
- Join with the application channel's genesis block instead of the system channel's
- 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.