{"record":{"id":"bef71ae81d849e15","repo":"hyperledger/fabric","slug":"errsystemchannelnotsupported-bef71a","errorCode":"ErrSystemChannelNotSupported","errorMessage":"system channel not supported","messagePattern":"system channel not supported","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"error","filePath":"orderer/common/types/errors.go","lineNumber":17,"sourceCode":"/*\nCopyright IBM Corp. All Rights Reserved.\n\nSPDX-License-Identifier: Apache-2.0\n*/\n\npackage types\n\nimport \"github.com/pkg/errors\"\n\n// ErrSystemChannelExists is returned when trying to join or remove an application channel when the system channel exists.\n//\n// Deprecated: system channel no longer supported\nvar ErrSystemChannelExists = errors.New(\"system channel exists\")\n\n// ErrSystemChannelNotSupported is returned when trying to join with a system channel config block.\nvar ErrSystemChannelNotSupported = errors.New(\"system channel not supported\")\n\n// ErrChannelAlreadyExists is returned when trying to join a app channel that already exists (when the system channel does not\n// exist), or when trying to join the system channel when it already exists.\nvar ErrChannelAlreadyExists = errors.New(\"channel already exists\")\n\n// ErrAppChannelsAlreadyExists is returned when trying to join a system channel (that does not exist) when application channels\n// already exist.\nvar ErrAppChannelsAlreadyExists = errors.New(\"application channels already exist\")\n\n// ErrChannelNotExist is returned when trying to remove or list a channel that does not exist\nvar ErrChannelNotExist = errors.New(\"channel does not exist\")\n\n// ErrChannelPendingRemoval is returned when trying to remove or list a channel that is being removed.\nvar ErrChannelPendingRemoval = errors.New(\"channel pending removal\")\n\n// ErrChannelRemovalFailure is returned when a removal attempt failure has been recorded.\nvar ErrChannelRemovalFailure = errors.New(\"channel removal failure\")\n","sourceCodeStart":1,"sourceCodeEnd":35,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/orderer/common/types/errors.go#L1-L35","documentation":"ErrSystemChannelNotSupported is returned by ValidateJoinBlock when the supplied config block contains a Consortiums section, i.e. it is a system-channel genesis block. Channel participation only accepts application channel config blocks, and joining with a system-channel block is rejected with this error.","triggerScenarios":"POST /participation/v1/channels with a genesis block generated from a system-channel profile; ValidateJoinBlock detects bundle.ConsortiumsConfig() exists and wraps this error.","commonSituations":"Using 'configtxgen -profile SampleSystemChannel' (or legacy two-system-channel setups) output as the --config-block for osnadmin join; copying the old system channel genesis block out of habit during migration.","solutions":["Generate an application-channel genesis block: 'configtxgen -profile <AppProfile> -channelID <channel> -outputBlock <file>'","Ensure the configtx.yaml profile used does not include Consortiums (app-channel profiles reference consortium, not define it)","Retry the join with the app-channel block"],"exampleFix":"// before\nconfigtxgen -profile SampleSingleMSPKafka -outputBlock sys.block -channelID test-system-channel\nosnadmin channel join --channelID mychannel --config-block sys.block  # not supported\n// after\nconfigtxgen -profile TwoOrgsChannel -outputBlock app.block -channelID mychannel\nosnadmin channel join --channelID mychannel --config-block app.block","handlingStrategy":"validation","validationCode":"bundle, err := channelconfig.NewBundleFromEnvelope(env, bccsp)\nif err == nil {\n    if _, isSys := bundle.ConsortiumsConfig(); isSys {\n        return errors.New(\"join block must be an app-channel config block\")\n    }\n}","typeGuard":null,"tryCatchPattern":"if errors.Is(err, types.ErrSystemChannelNotSupported) {\n    // regenerate the block from an app-channel profile\n}","preventionTips":["Generate join blocks only from app-channel profiles (no Consortiums)","Never reuse the legacy system channel genesis block for osnadmin joins","Inspect blocks with configtxgen -inspectBlock before joining"],"tags":["fabric","orderer","system-channel","genesis-block","channel-participation"],"backgroundTag":"system-channel-not-supported","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"}