{"record":{"id":"8f488715e89a84c5","repo":"hyperledger/fabric","slug":"node-d-is-not-member-of-channel-s","errorCode":null,"errorMessage":"node %d is not member of channel %s","messagePattern":"node (.+?) is not member of channel (.+?)","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"error","filePath":"orderer/common/cluster/clusterservice.go","lineNumber":158,"sourceCode":"\t\tVersion:        int64(authReq.Version),\n\t\tTimestamp:      EncodeTimestamp(authReq.Timestamp),\n\t\tFromId:         strconv.FormatUint(authReq.FromId, 10),\n\t\tToId:           strconv.FormatUint(authReq.ToId, 10),\n\t\tSessionBinding: tlsBinding,\n\t\tChannel:        authReq.Channel,\n\t})\n\tif err != nil {\n\t\treturn nil, errors.Wrap(err, \"ASN encoding failed\")\n\t}\n\n\tmembership := s.MembershipByChannel[authReq.Channel]\n\tif membership == nil {\n\t\treturn nil, errors.Errorf(\"channel %s not found in config\", authReq.Channel)\n\t}\n\n\tfromIdentity := membership.MemberMapping[authReq.FromId]\n\tif fromIdentity == nil {\n\t\treturn nil, errors.Errorf(\"node %d is not member of channel %s\", authReq.FromId, authReq.Channel)\n\t}\n\n\ttoIdentity := membership.MemberMapping[authReq.ToId]\n\tif toIdentity == nil {\n\t\treturn nil, errors.Errorf(\"node %d is not member of channel %s\", authReq.ToId, authReq.Channel)\n\t}\n\n\tequal, err := CompareCertPublicKeys(toIdentity, s.NodeIdentity)\n\tif err != nil {\n\t\treturn nil, errors.Wrap(err, \"failed to compare cert public keys\")\n\t}\n\tif !equal {\n\t\ts.Logger.Debugf(\"node id mismatch for node %d, toIdentity: %s, s.NodeIdentity: %s\", authReq.FromId, string(toIdentity), string(s.NodeIdentity))\n\t\treturn nil, errors.Errorf(\"node id mismatch\")\n\t}\n\n\terr = VerifySignature(fromIdentity, SHA256Digest(msg), authReq.Signature)\n\tif err != nil {","sourceCodeStart":140,"sourceCodeEnd":176,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/orderer/common/cluster/clusterservice.go#L140-L176","documentation":"VerifyAuthRequest guard: the request's FromId or ToId has no entry in the channel's MemberMapping, so the sending or receiving node ID is not part of the etcdraft/BFT consenters set for that channel. The node ID-to-identity mapping derived from the channel config does not contain that ID.","triggerScenarios":"Thrown at orderer/common/cluster/clusterservice.go:158 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check the consenters set in the channel config includes both nodes","Ensure node IDs are not stale after a consenter set update","Verify TLS certificates match the ones configured in the channel"],"exampleFix":null,"handlingStrategy":"validation","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"}