consensus(router): route inbound app-Gossip to the chain handler (α-of-K vote/cert delivery)

The α-of-K quorum vote/cert envelopes (BroadcastVote / GossipCert) ride on
p2p app-Gossip, but the handler.Op enum had no Gossip op, so the node's
inbound router dropped every GossipOp as 'unhandled message op'. The chain
handler's Gossip demux (HandleIncomingVote / HandleIncomingCert) was therefore
unreachable: no votes ingested, no cert assembled, cert-gated finality never
fired (zero Chits, frozen height) on every K>1 network.

Append a Gossip op (kept LAST so PushQuery=6 / Vote=8 / Context=10 wire bytes
are unchanged) and re-export it from networking/handler so the node can route
GossipOp -> handler.Gossip. Append-only; cert gate / VerifyWeighted untouched.
engine/chain quorum/cert/vote/finalize tests pass (CGO_ENABLED=0).
This commit is contained in:
2026-06-25 15:19:11 -07:00
parent fe90208c9f
commit dc6a123973
2 changed files with 6 additions and 0 deletions
+5
View File
@@ -45,6 +45,11 @@ const (
GetContext
// Context is the response containing prerequisite blocks needed to verify/attach a tip
Context
// Gossip is an unsolicited app-gossip payload (e.g. the α-of-K quorum
// vote/cert envelope broadcast to all validators). It carries application
// bytes, not a consensus container, and is demuxed by the chain handler's
// Gossip method. MUST stay last so the preceding wire bytes are unchanged.
Gossip
)
// Field represents a message field
+1
View File
@@ -46,4 +46,5 @@ const (
Vote = router.Vote
GetContext = router.GetContext
Context = router.Context
Gossip = router.Gossip
)