{"record":{"id":"ec0f09a6cba8c0e0","repo":"hyperledger/fabric","slug":"no-combination-of-peers-can-be-derived-which-satis","errorCode":null,"errorMessage":"no combination of peers can be derived which satisfy the endorsement policy","messagePattern":"no combination of peers can be derived which satisfy the endorsement policy","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/pkg/gateway/registry.go","lineNumber":64,"sourceCode":"\tconfigLock         sync.RWMutex\n\tchannelOrderers    sync.Map // channel (string) -> orderer addresses (endpointConfig)\n\tsystemChaincodes   scc.BuiltinSCCs\n\tlocalProvider      ledger.Provider\n}\n\ntype endorserState struct {\n\tpeer     *dp.Peer\n\tendorser *endorser\n\theight   uint64\n}\n\n// Returns an endorsementPlan for the given chaincode on a channel.\nfunc (reg *registry) endorsementPlan(channel string, interest *peer.ChaincodeInterest, preferredEndorser *endorser) (*plan, error) {\n\tdescriptor, err := reg.discovery.PeersForEndorsement(gossipcommon.ChannelID(channel), interest)\n\tif err != nil {\n\t\tb, _ := prototext.Marshal(interest)\n\t\tlogger.Errorw(\"PeersForEndorsement failed.\", \"error\", err, \"channel\", channel, \"ChaincodeInterest\", b)\n\t\treturn nil, errors.Wrap(err, \"no combination of peers can be derived which satisfy the endorsement policy\")\n\t}\n\n\t// There are two parts to an endorsement plan:\n\t// 1) List of endorsers in each group\n\t// 2) Layouts consisting of a number of endorsers from each group\n\n\t// Firstly, process the endorsers by group\n\t// Create a map of groupIds to list of endorsers, sorted by decreasing block height\n\t// Also build a map of endorser PKI ID to group ID\n\tgroupEndorsers := map[string][]*endorser{}\n\tvar preferredGroup string\n\tvar unavailableEndorsers []string\n\n\tfor group, peers := range descriptor.GetEndorsersByGroups() {\n\t\tvar groupPeers []*endorserState\n\t\tfor _, peer := range peers.GetPeers() {\n\t\t\t// extract block height\n\t\t\tmsg := &gossip.GossipMessage{}","sourceCodeStart":46,"sourceCodeEnd":82,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/internal/pkg/gateway/registry.go#L46-L82","documentation":"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.","triggerScenarios":"Thrown at internal/pkg/gateway/registry.go:64 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","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"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"2736b63f8fd5932511d56fe68b7039d15977f7f6","analyzedAt":"2026-09-04T08:52:36.465Z","contentChangedAt":"2026-09-04T08:52:36.465Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}