hyperledger/fabric · error

failed to find a consenter for consensus type: %s

Error message

failed to find a consenter for consensus type: %s

What it means

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.

Source

Thrown at orderer/common/multichannel/registrar.go:294

		}
	}
}

func (r *Registrar) initLedgerResourcesClusterConsenter(configBlock *cb.Block) (*ledgerResources, consensus.ClusterConsenter, error) {
	configEnv, err := protoutil.ExtractEnvelope(configBlock, 0)
	if err != nil {
		return nil, nil, errors.WithMessagef(err, "failed extracting config envelope from block")
	}

	ledgerRes, err := r.newLedgerResources(configEnv)
	if err != nil {
		return nil, nil, errors.WithMessagef(err, "failed creating ledger resources")
	}

	ordererConfig, _ := ledgerRes.OrdererConfig()
	consenter, foundConsenter := r.consenters[ordererConfig.ConsensusType()]
	if !foundConsenter {
		return nil, nil, errors.Errorf("failed to find a consenter for consensus type: %s", ordererConfig.ConsensusType())
	}

	clusterConsenter, ok := consenter.(consensus.ClusterConsenter)
	if !ok {
		return nil, nil, errors.New("failed cast: clusterConsenter is not a consensus.ClusterConsenter")
	}

	return ledgerRes, clusterConsenter, nil
}

// BroadcastChannelSupport returns the message channel header, whether the message is a config update
// and the channel resources for a message or an error if the message is not a message which can
// be processed directly (like CONFIG and ORDERER_TRANSACTION messages)
func (r *Registrar) BroadcastChannelSupport(msg *cb.Envelope) (*cb.ChannelHeader, bool, *ChainSupport, error) {
	chdr, err := protoutil.ChannelHeader(msg)
	if err != nil {
		return nil, false, nil, errors.WithMessage(err, "could not determine channel ID")
	}

View on GitHub (pinned to 2736b63f8f)

Solutions

  1. Deploy an orderer build that registers the channel's consensus type
  2. Migrate the channel to a supported consensus type
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at orderer/common/multichannel/registrar.go:294 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/6fff508a6da3c028. Report an issue: GitHub.