hyperledger/fabric · error
message isn't a stateInfo message
Error message
message isn't a stateInfo message
What it means
validateStateInfoMessage rejects a SignedGossipMessage whose GetStateInfo() is nil — the envelope payload is not a StateInfo message. In the discovery client peers must present valid StateInfo (channel membership declaration) for the endorser flow; this error is wrapped as 'failed validating stateInfo message'.
Source
Thrown at discovery/client/client.go:592
func validateAliveMessage(message *gprotoext.SignedGossipMessage) error {
am := message.GetAliveMsg()
if am == nil {
return errors.New("message isn't an alive message")
}
m := am.Membership
if m == nil {
return errors.New("membership is empty")
}
if am.Timestamp == nil {
return errors.New("timestamp is nil")
}
return nil
}
func validateStateInfoMessage(message *gprotoext.SignedGossipMessage) error {
si := message.GetStateInfo()
if si == nil {
return errors.New("message isn't a stateInfo message")
}
if si.Timestamp == nil {
return errors.New("timestamp is nil")
}
if si.Properties == nil {
return errors.New("properties is nil")
}
return nil
}
func validateInterests(interests ...*peer.ChaincodeInterest) error {
if len(interests) == 0 {
return errors.New("no chaincode interests given")
}
for _, interest := range interests {
if interest == nil {
return errors.New("chaincode interest is nil")
}View on GitHub (pinned to 2736b63f8f)
Solutions
- Confirm the queried peer has joined the requested channel (peer channel list)
- Restart gossip / the peer to regenerate StateInfo messages
- Align Fabric versions across network components
- Retry discovery against a different peer in the channel
Defensive patterns
Strategy: validation
Validate before calling
func isStateInfo(m *gprotoext.SignedGossipMessage) bool { return m != nil && m.GetStateInfo() != nil } Type guard
func isStateInfoMsg(m *gprotoext.SignedGossipMessage) bool { return m != nil && m.GetStateInfo() != nil } Try / catch
if err != nil && strings.Contains(err.Error(), "message isn't a stateInfo message") {
logger.Warnf("peer %s did not return state info; is it joined to the channel?", peerURL)
return err
} Prevention
- Only query peers that have joined the target channel
- Check 'peer channel list' before discovery
- Keep Fabric versions consistent
When it happens
Trigger: A discovery response peer record contains a payload of a different gossip type (AliveMsg, DataMsg, empty) where a StateInfo is expected.
Common situations: Target peer not fully joined to the channel so it lacks state info; gossip store desync; Fabric version mismatch; corrupted envelope transport.
Related errors
- received empty envelope(s) for endorsers for chaincode %s, c
- message isn't an alive message
- group %s isn't mapped to endorsers, but exists in a layout
- failed creating endorser object
- failed unmarshalling gossip envelope to state info message
AI-assisted analysis of hyperledger/fabric@2736b63f8f (2026-09-04).
Data as JSON: /api/errors/7f31ad7ea8dfe857.
Report an issue: GitHub.