hyperledger/fabric · error

no combination of peers can be derived which satisfy the end

Error message

no combination of peers can be derived which satisfy the endorsement policy

What it means

Gateway endorsementPlan: the discovery service's PeersForEndorsement call failed or produced no usable endorsement plan, so no combination of peers satisfying the chaincode's endorsement policy could be derived.

Source

Thrown at internal/pkg/gateway/registry.go:64

	configLock         sync.RWMutex
	channelOrderers    sync.Map // channel (string) -> orderer addresses (endpointConfig)
	systemChaincodes   scc.BuiltinSCCs
	localProvider      ledger.Provider
}

type endorserState struct {
	peer     *dp.Peer
	endorser *endorser
	height   uint64
}

// Returns an endorsementPlan for the given chaincode on a channel.
func (reg *registry) endorsementPlan(channel string, interest *peer.ChaincodeInterest, preferredEndorser *endorser) (*plan, error) {
	descriptor, err := reg.discovery.PeersForEndorsement(gossipcommon.ChannelID(channel), interest)
	if err != nil {
		b, _ := prototext.Marshal(interest)
		logger.Errorw("PeersForEndorsement failed.", "error", err, "channel", channel, "ChaincodeInterest", b)
		return nil, errors.Wrap(err, "no combination of peers can be derived which satisfy the endorsement policy")
	}

	// There are two parts to an endorsement plan:
	// 1) List of endorsers in each group
	// 2) Layouts consisting of a number of endorsers from each group

	// Firstly, process the endorsers by group
	// Create a map of groupIds to list of endorsers, sorted by decreasing block height
	// Also build a map of endorser PKI ID to group ID
	groupEndorsers := map[string][]*endorser{}
	var preferredGroup string
	var unavailableEndorsers []string

	for group, peers := range descriptor.GetEndorsersByGroups() {
		var groupPeers []*endorserState
		for _, peer := range peers.GetPeers() {
			// extract block height
			msg := &gossip.GossipMessage{}

View on GitHub (pinned to 2736b63f8f)

Solutions

  1. Ensure the chaincode is committed and its endorsement policy is resolvable on the channel
  2. Check that discovery service is enabled and peers are gossiping
  3. Verify enough endorsing peers are online to satisfy the policy
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at internal/pkg/gateway/registry.go:64 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/ec0f09a6cba8c0e0. Report an issue: GitHub.