Skip to content

v0.6.0 — Rolling Upgrade System

Choose a tag to compare

@augmnt augmnt released this 08 Feb 13:08
· 185 commits to main since this release

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 — MessageEnvelope wrapper with protocol_version field 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
  • DecodedMessage enum — Known(NornMessage) | Unknown { protocol_version, message_type } for forward compatibility
  • Peer version tracking — PeerInfo.protocol_version parsed 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_VERSION bumped to 4, ENVELOPE_VERSION = 1

Other Changes

  • GenesisConfig gains version: u32 field (with serde default for backward compat)
  • NornMessage::UpgradeNotice variant (discriminant 14)
  • encode_message_legacy() rejects new message types (discriminant > 13)
  • --reset-state flag on norn run

Full Changelog: v0.5.9...v0.6.0