{"record":{"id":"5d06b239962c6fdf","repo":"hyperledger/fabric","slug":"channel-s-not-found","errorCode":null,"errorMessage":"channel %s not found","messagePattern":"channel (.+?) not found","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"core/peer/deliverevents.go","lineNumber":453,"sourceCode":"\t\t\ttxPvtRWSet.NsPvtRwset = append(txPvtRWSet.NsPvtRwset, &rwset.NsPvtReadWriteSet{\n\t\t\t\tNamespace:          namespaceName,\n\t\t\t\tCollectionPvtRwset: cols,\n\t\t\t})\n\t\t}\n\n\t\tpvtDataMap[seq.seq] = txPvtRWSet\n\t}\n\treturn pvtDataMap\n}\n\n// identityDeserializerMgr implements an IdentityDeserializerManager\n// by routing the call to the msp/mgmt package\ntype identityDeserializerMgr struct{}\n\nfunc (*identityDeserializerMgr) Deserializer(channelID string) (msp.IdentityDeserializer, error) {\n\tid, ok := mgmt.GetDeserializers()[channelID]\n\tif !ok {\n\t\treturn nil, errors.Errorf(\"channel %s not found\", channelID)\n\t}\n\treturn id, nil\n}\n\n// collPolicyChecker is the default implementation for CollectionPolicyChecker interface\ntype collPolicyChecker struct{}\n\n// CheckCollectionPolicy checks if the CollectionCriteria meets the policy requirement\nfunc (cs *collPolicyChecker) CheckCollectionPolicy(\n\tblockNum uint64,\n\tccName string,\n\tcollName string,\n\tcfgHistoryRetriever ledger.ConfigHistoryRetriever,\n\tdeserializer msp.IdentityDeserializer,\n\tsignedData *protoutil.SignedData,\n) (bool, error) {\n\tconfigInfo, err := cfgHistoryRetriever.MostRecentCollectionConfigBelow(blockNum, ccName)\n\tif err != nil {","sourceCodeStart":435,"sourceCodeEnd":471,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/core/peer/deliverevents.go#L435-L471","documentation":"identityDeserializerMgr.Deserializer returns the MSP identity deserializer registered for a channel via mgmt.GetDeserializers(). If no deserializer is registered for the given channelID — meaning the peer is not a member of / has not initialized that channel — this error is returned.","triggerScenarios":"Calling Deserializer(channelID) with a channel the peer hasn't joined or that hasn't finished MSP initialization — e.g., during collection policy checks on a block from an unknown channel.","commonSituations":"Deliver client requesting private data on a channel this peer never joined; race where the deliver handler runs before channel MSPs load at peer startup; typo in channel name; channel deleted/recreated with a different ID.","solutions":["Verify the peer has joined the channel (peer channel list) and join it if not.","Confirm the channelID string exactly matches an existing channel.","At startup, wait for channel/MSP initialization before delivering blocks for that channel.","Check peer logs for channel MSP setup failures that prevented deserializer registration."],"exampleFix":"// before\nid, err := deserializerMgr.Deserializer(\"yourchannel\") // peer not joined\n// after\nif _, ok := mgmt.GetDeserializers()[\"yourchannel\"]; !ok {\n  return errors.New(\"join the peer to 'yourchannel' before requesting data\")\n}\nid, err := deserializerMgr.Deserializer(\"yourchannel\")","handlingStrategy":"type-guard","validationCode":"if _, ok := mgmt.GetDeserializers()[channelID]; !ok {\n  return fmt.Errorf(\"channel %s unknown: peer not joined\", channelID)\n}","typeGuard":"func channelKnown(channelID string) bool {\n  _, ok := mgmt.GetDeserializers()[channelID]\n  return ok\n}","tryCatchPattern":"id, err := mgr.Deserializer(chID)\nif err != nil && strings.Contains(err.Error(), \"not found\") {\n  return fmt.Errorf(\"join channel %s first: %w\", chID, err)\n}","preventionTips":["Join the peer before delivering its blocks","Validate channel names in scripts","Wait for MSP initialization at startup"],"tags":["msp","channel","deliver","hyperledger-fabric"],"backgroundTag":"channel-not-found","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"}