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
- Ensure the chaincode is committed and its endorsement policy is resolvable on the channel
- Check that discovery service is enabled and peers are gossiping
- 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.