hyperledger/fabric · error
no orderer config in bundle
Error message
no orderer config in bundle
What it means
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.
Source
Thrown at orderer/consensus/etcdraft/consenter.go:244
nil,
)
}
func (c *Consenter) IsChannelMember(joinBlock *common.Block) (bool, error) {
if joinBlock == nil {
return false, errors.New("nil block")
}
envelopeConfig, err := protoutil.ExtractEnvelope(joinBlock, 0)
if err != nil {
return false, err
}
bundle, err := channelconfig.NewBundleFromEnvelope(envelopeConfig, c.BCCSP)
if err != nil {
return false, err
}
oc, exists := bundle.OrdererConfig()
if !exists {
return false, errors.New("no orderer config in bundle")
}
configMetadata := &etcdraft.ConfigMetadata{}
if err := proto.Unmarshal(oc.ConsensusMetadata(), configMetadata); err != nil {
return false, err
}
verifyOpts, err := createX509VerifyOptions(oc)
if err != nil {
return false, errors.Wrapf(err, "failed to create x509 verify options from orderer config")
}
if err := VerifyConfigMetadata(configMetadata, verifyOpts); err != nil {
return false, errors.Wrapf(err, "failed to validate config metadata of ordering config")
}
consenters := make(map[uint64]*etcdraft.Consenter)
for i, c := range configMetadata.GetConsenters() {
consenters[uint64(i+1)] = c // the IDs don't matterView on GitHub (pinned to 2736b63f8f)
Solutions
- Join with a config block that contains the Orderer group
- Regenerate the genesis block for an ordering channel
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at orderer/consensus/etcdraft/consenter.go:244 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/538eb657775cc68b.
Report an issue: GitHub.