{"record":{"id":"6fff508a6da3c028","repo":"hyperledger/fabric","slug":"failed-to-find-a-consenter-for-consensus-type-s","errorCode":null,"errorMessage":"failed to find a consenter for consensus type: %s","messagePattern":"failed to find a consenter for consensus type: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"orderer/common/multichannel/registrar.go","lineNumber":294,"sourceCode":"\t\t}\n\t}\n}\n\nfunc (r *Registrar) initLedgerResourcesClusterConsenter(configBlock *cb.Block) (*ledgerResources, consensus.ClusterConsenter, error) {\n\tconfigEnv, err := protoutil.ExtractEnvelope(configBlock, 0)\n\tif err != nil {\n\t\treturn nil, nil, errors.WithMessagef(err, \"failed extracting config envelope from block\")\n\t}\n\n\tledgerRes, err := r.newLedgerResources(configEnv)\n\tif err != nil {\n\t\treturn nil, nil, errors.WithMessagef(err, \"failed creating ledger resources\")\n\t}\n\n\tordererConfig, _ := ledgerRes.OrdererConfig()\n\tconsenter, foundConsenter := r.consenters[ordererConfig.ConsensusType()]\n\tif !foundConsenter {\n\t\treturn nil, nil, errors.Errorf(\"failed to find a consenter for consensus type: %s\", ordererConfig.ConsensusType())\n\t}\n\n\tclusterConsenter, ok := consenter.(consensus.ClusterConsenter)\n\tif !ok {\n\t\treturn nil, nil, errors.New(\"failed cast: clusterConsenter is not a consensus.ClusterConsenter\")\n\t}\n\n\treturn ledgerRes, clusterConsenter, nil\n}\n\n// BroadcastChannelSupport returns the message channel header, whether the message is a config update\n// and the channel resources for a message or an error if the message is not a message which can\n// be processed directly (like CONFIG and ORDERER_TRANSACTION messages)\nfunc (r *Registrar) BroadcastChannelSupport(msg *cb.Envelope) (*cb.ChannelHeader, bool, *ChainSupport, error) {\n\tchdr, err := protoutil.ChannelHeader(msg)\n\tif err != nil {\n\t\treturn nil, false, nil, errors.WithMessage(err, \"could not determine channel ID\")\n\t}","sourceCodeStart":276,"sourceCodeEnd":312,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/orderer/common/multichannel/registrar.go#L276-L312","documentation":"initLedgerResourcesClusterConsenter guard: the consensus type in the channel's orderer config has no matching entry in the registrar's consenters map, so no cluster consenter can be built for this channel. Same root cause as the chainsupport variant: unsupported/unregistered consensus type on this binary.","triggerScenarios":"Thrown at orderer/common/multichannel/registrar.go:294 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Deploy an orderer build that registers the channel's consensus type","Migrate the channel to a supported consensus type"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"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"}