hyperledger/fabric · error
failed parsing proposal
Error message
failed parsing proposal
What it means
Returned by validateTimewindowProposal when protoutil.UnmarshalProposal fails to decode signedProp.ProposalBytes. The signed proposal's payload is not valid protobuf, so the timewindow auth filter rejects it before examining timestamps.
Source
Thrown at core/handlers/auth/filter/timewindow.go:39
return &timewindowCheckFilter{
timeWindow: timeWindow,
}
}
type timewindowCheckFilter struct {
next peer.EndorserServer
timeWindow time.Duration
}
// Init initializes the Filter with the next EndorserServer
func (f *timewindowCheckFilter) Init(next peer.EndorserServer) {
f.next = next
}
func validateTimewindowProposal(signedProp *peer.SignedProposal, timeWindow time.Duration) error {
prop, err := protoutil.UnmarshalProposal(signedProp.ProposalBytes)
if err != nil {
return errors.Wrap(err, "failed parsing proposal")
}
hdr, err := protoutil.UnmarshalHeader(prop.Header)
if err != nil {
return errors.Wrap(err, "failed parsing header")
}
chdr, err := protoutil.UnmarshalChannelHeader(hdr.ChannelHeader)
if err != nil {
return errors.Wrap(err, "failed parsing channel header")
}
timeProposal := chdr.Timestamp.AsTime().UTC()
now := time.Now().UTC()
if timeProposal.Add(timeWindow).Before(now) || timeProposal.Add(-timeWindow).After(now) {
return errors.Errorf("request unauthorized due to incorrect timestamp %s, peer time %s, peer.authentication.timewindow %s",
timeProposal.Format(time.RFC3339), now.Format(time.RFC3339), timeWindow.String())View on GitHub (pinned to 2736b63f8f)
Solutions
- Send a well-formed signed proposal from a compatible SDK
- Reject the malformed request
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at core/handlers/auth/filter/timewindow.go:39 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/3a13cac95de63dd4.
Report an issue: GitHub.