{"record":{"id":"538eb657775cc68b","repo":"hyperledger/fabric","slug":"no-orderer-config-in-bundle","errorCode":null,"errorMessage":"no orderer config in bundle","messagePattern":"no orderer config in bundle","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"orderer/consensus/etcdraft/consenter.go","lineNumber":244,"sourceCode":"\t\tnil,\n\t)\n}\n\nfunc (c *Consenter) IsChannelMember(joinBlock *common.Block) (bool, error) {\n\tif joinBlock == nil {\n\t\treturn false, errors.New(\"nil block\")\n\t}\n\tenvelopeConfig, err := protoutil.ExtractEnvelope(joinBlock, 0)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\tbundle, err := channelconfig.NewBundleFromEnvelope(envelopeConfig, c.BCCSP)\n\tif err != nil {\n\t\treturn false, err\n\t}\n\toc, exists := bundle.OrdererConfig()\n\tif !exists {\n\t\treturn false, errors.New(\"no orderer config in bundle\")\n\t}\n\tconfigMetadata := &etcdraft.ConfigMetadata{}\n\tif err := proto.Unmarshal(oc.ConsensusMetadata(), configMetadata); err != nil {\n\t\treturn false, err\n\t}\n\n\tverifyOpts, err := createX509VerifyOptions(oc)\n\tif err != nil {\n\t\treturn false, errors.Wrapf(err, \"failed to create x509 verify options from orderer config\")\n\t}\n\n\tif err := VerifyConfigMetadata(configMetadata, verifyOpts); err != nil {\n\t\treturn false, errors.Wrapf(err, \"failed to validate config metadata of ordering config\")\n\t}\n\n\tconsenters := make(map[uint64]*etcdraft.Consenter)\n\tfor i, c := range configMetadata.GetConsenters() {\n\t\tconsenters[uint64(i+1)] = c // the IDs don't matter","sourceCodeStart":226,"sourceCodeEnd":262,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/orderer/consensus/etcdraft/consenter.go#L226-L262","documentation":"Consenter.IsChannelMember guard: the channel config bundle built from the join block has no Orderer group (bundle.OrdererConfig() returned false). Without orderer config, the etcdraft consensus metadata containing the consenters set cannot be read to test membership.","triggerScenarios":"Thrown at orderer/consensus/etcdraft/consenter.go:244 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Join with a config block that contains the Orderer group","Regenerate the genesis block for an ordering channel"],"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"}