Repository navigation
v0.6.0 — Rolling Upgrade System
Rolling Upgrade System
Introduces a versioned wire protocol enabling zero-downtime upgrades across the network. Nodes running different protocol versions can coexist and communicate during upgrade rollouts.
New Features
- Envelope protocol —
MessageEnvelopewrapper withprotocol_versionfield for all P2P messages - Dual-decode — nodes accept both new envelope format and legacy v3 format, enabling mixed-version networks
- Versioned gossipsub topics —
norn/blocks/v4,norn/knots/v4, etc. alongside legacy unversioned topics - Upgrade notices — nodes automatically warn peers running older protocol versions
DecodedMessageenum —Known(NornMessage)|Unknown { protocol_version, message_type }for forward compatibility- Peer version tracking —
PeerInfo.protocol_versionparsed from libp2p identify agent version
Wire Format
- New:
[4-byte length][1-byte ENVELOPE_VERSION(1)][borsh MessageEnvelope] - Legacy:
[4-byte length][1-byte 3][borsh NornMessage](still accepted) PROTOCOL_VERSIONbumped to 4,ENVELOPE_VERSION= 1
Other Changes
GenesisConfiggainsversion: u32field (with serde default for backward compat)NornMessage::UpgradeNoticevariant (discriminant 14)encode_message_legacy()rejects new message types (discriminant > 13)--reset-stateflag onnorn run
Full Changelog: v0.5.9...v0.6.0