{"record":{"id":"1adebd3992473c35","repo":"hyperledger/fabric","slug":"request-unauthorized-due-to-incorrect-timestamp-s","errorCode":null,"errorMessage":"request unauthorized due to incorrect timestamp %s, peer time %s, peer.authentication.timewindow %s","messagePattern":"request unauthorized due to incorrect timestamp (.+?), peer time (.+?), peer\\.authentication\\.timewindow (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"core/handlers/auth/filter/timewindow.go","lineNumber":56,"sourceCode":"\tif err != nil {\n\t\treturn errors.Wrap(err, \"failed parsing proposal\")\n\t}\n\n\thdr, err := protoutil.UnmarshalHeader(prop.Header)\n\tif err != nil {\n\t\treturn errors.Wrap(err, \"failed parsing header\")\n\t}\n\n\tchdr, err := protoutil.UnmarshalChannelHeader(hdr.ChannelHeader)\n\tif err != nil {\n\t\treturn errors.Wrap(err, \"failed parsing channel header\")\n\t}\n\n\ttimeProposal := chdr.Timestamp.AsTime().UTC()\n\tnow := time.Now().UTC()\n\n\tif timeProposal.Add(timeWindow).Before(now) || timeProposal.Add(-timeWindow).After(now) {\n\t\treturn errors.Errorf(\"request unauthorized due to incorrect timestamp %s, peer time %s, peer.authentication.timewindow %s\",\n\t\t\ttimeProposal.Format(time.RFC3339), now.Format(time.RFC3339), timeWindow.String())\n\t}\n\n\treturn nil\n}\n\n// ProcessProposal processes a signed proposal\nfunc (f *timewindowCheckFilter) ProcessProposal(ctx context.Context, signedProp *peer.SignedProposal) (*peer.ProposalResponse, error) {\n\tif err := validateTimewindowProposal(signedProp, f.timeWindow); err != nil {\n\t\treturn nil, err\n\t}\n\treturn f.next.ProcessProposal(ctx, signedProp)\n}\n","sourceCodeStart":38,"sourceCodeEnd":70,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/core/handlers/auth/filter/timewindow.go#L38-L70","documentation":"The channel header's timestamp deviates from the peer's UTC clock by more than the configured peer.authentication.timewindow in either direction — an anti-replay check failure, usually caused by client clock skew or too small a timewindow setting.","triggerScenarios":"Thrown at core/handlers/auth/filter/timewindow.go:56 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Synchronize the client's clock (NTP) with the peer","Increase peer.authentication.timewindow in core.yaml if legitimate skew exists"],"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"}