hyperledger/fabric · error

channel %s doesn't exist

Error message

channel %s doesn't exist

What it means

Dispatcher guard: ReceiverByChain returned no MessageReceiver for the named channel, so an incoming consensus (Step/Submit) message has no chain to dispatch to. The local node is not running a chain for that channel (not joined, evicted, or channel name mismatch).

Source

Thrown at orderer/consensus/etcdraft/dispatcher.go:45

// ReceiverGetter obtains instances of MessageReceiver given a channel ID
type ReceiverGetter interface {
	// ReceiverByChain returns the MessageReceiver if it exists, or nil if it doesn't
	ReceiverByChain(channelID string) MessageReceiver
}

// Dispatcher dispatches Submit and Step requests to the designated per chain instances
type Dispatcher struct {
	Logger        *flogging.FabricLogger
	ChainSelector ReceiverGetter
}

// OnConsensus notifies the Dispatcher for a reception of a StepRequest from a given sender on a given channel
func (d *Dispatcher) OnConsensus(channel string, sender uint64, request *orderer.ConsensusRequest) error {
	receiver := d.ChainSelector.ReceiverByChain(channel)
	if receiver == nil {
		d.Logger.Warningf("An attempt to send a consensus request to a non existing channel (%s) was made by %d", channel, sender)
		return errors.Errorf("channel %s doesn't exist", channel)
	}
	return receiver.Consensus(request, sender)
}

// OnSubmit notifies the Dispatcher for a reception of a SubmitRequest from a given sender on a given channel
func (d *Dispatcher) OnSubmit(channel string, sender uint64, request *orderer.SubmitRequest) error {
	receiver := d.ChainSelector.ReceiverByChain(channel)
	if receiver == nil {
		d.Logger.Warningf("An attempt to submit a transaction to a non existing channel (%s) was made by %d", channel, sender)
		return errors.Errorf("channel %s doesn't exist", channel)
	}
	return receiver.Submit(request, sender)
}

View on GitHub (pinned to 2736b63f8f)

Solutions

  1. Confirm this orderer has joined the channel
  2. Wait for the chain to finish onboarding before sending consensus traffic
  3. Check the requesting node's channel configuration
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at orderer/consensus/etcdraft/dispatcher.go:45 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/4cf436f7ee65b202. Report an issue: GitHub.