Skip to content
Back
Reference

Solana shred version history

Trace the public progression from legacy shreds to Merkle, chained, and retransmitter-signed forms without inventing global format numbers or dates.

Two kinds of versioning

Solana uses the word version for two different concerns.

The common header carries a 16-bit shred version. Its value separates cluster lineages using their trusted genesis plus hard-fork context; it is not a chronological format number.

The variant discriminator selects packet role, either data or coding, then legacy or Merkle family and flags for proof size, chaining, and retransmitter-signature presence. Formats evolve through supported variants and cluster feature activation, not a universal shred-format sequence numbered 1, 2, or 3.

Changelog

Historical orderFormat familyChangeAuthentication modelReceiver impactGlobal date or numeric format version
EarlierLegacy data shredsCarry serialized ledger bytes with the legacy data header and completion flagsLeader signature uses the legacy signed-data ruleParse fixed common and data headers, validate size, verify leader, order data bytesNo global semantic number or date is stated here
EarlierLegacy coding shredsCarry Reed-Solomon parity with data count, coding count, and positionLeader signature uses the legacy signed-data ruleGroup compatible members and recover missing data under the legacy layoutNo global semantic number or date is stated here
LaterMerkle data shredsAdd Merkle proof material around protected data-shard contentLeader signs the reconstructed Merkle rootVariant-aware capacity, leaf hashing, proof walking, and root verification become requiredActivated by cluster feature state, not one universal date
LaterMerkle coding shredsAdd Merkle proof material for coding membersLeader signs the reconstructed Merkle rootProof position uses the erasure-shard position k plus coding positionActivated by cluster feature state, not one universal date
Later extensionChained Merkle data shredsCommit an FEC set to the preceding set’s rootLeader-authenticated root includes the variant-defined chain relationReceiver validates continuity as well as membershipNo invented activation date
Later extensionChained Merkle coding shredsCarry chain commitment with parity membershipSame leader-root model with chained contextRecovery state must retain the compatible preceding-root relationshipNo invented activation date
Later extensionRetransmitter-signed Merkle data shredsAdd separate retransmitter evidence at the variant-defined tailExtra signature does not replace the leader signatureParser reserves tail capacity and validates each signature under its own roleNo invented activation date
Later extensionRetransmitter-signed Merkle coding shredsAdd separate retransmitter evidence to coding membersExtra signature does not replace the leader signatureCoding capacity, proof offsets, and validation follow the selected variantNo invented activation date

The ordering above describes protocol-family progression. It does not assert that every cluster activated each family at the same wall-clock time or that every client release supported each form on the same date.

Legacy era

Legacy shreds established the original operating model across both roles: each signed packet belongs to a slot, occupies its role-specific index, joins an FEC set, and carries ledger data or parity. A data header exposes its parent offset, completion flags, and size; coding headers expose k, m, and position.

A legacy receiver cannot safely parse a Merkle packet as legacy. Proof and chain bytes change capacity and authentication boundaries even when the common header still looks plausible.

Merkle era

Merkle variants authenticate each data or coding shard through a leaf and proof that reconstruct a root signed by the slot leader. The proof size is encoded by the variant, and the erasure-shard position selects the proof path.

This change moved authentication away from an assumption that one fixed payload slice is always the signed message. A current receiver asks the typed parser for the root or signed data required by that variant.

Chained Merkle forms

Chained forms add a commitment to the preceding FEC set root. The chain lets a receiver validate a defined continuity relationship between adjacent sets. It also consumes wire capacity and changes offsets, so a non-chained capacity calculation is not valid for a chained packet.

Chain validation requires state beyond one isolated datagram. A packet can have a valid membership proof while its expected chain context is unavailable or inconsistent.

Retransmitter-signed forms

Retransmitter-signed Merkle forms add a tail signature. Origin authentication of shred content still belongs to the leader signature, while the addition supplies separate retransmission evidence under active implementation rules.

Do not overwrite the leader field with the retransmitter key, and do not include the trailing signature in ledger bytes or Reed-Solomon input unless the matching typed implementation defines it there.

Cluster shred version

PropertyMeaning
Width16 bits
Header offsetBytes 77 through 78
Byte orderLittle-endian
PurposeReject packets from an incompatible cluster lineage early
Derived fromTrusted genesis and hard-fork context through validator-compatible code
Not equivalent toAgave release, feature-set identifier, RPC version, packet variant, or commitment
Security propertyCheap context filter, not authentication
Collision propertyOnly 65,536 values exist, so unrelated lineages can collide

Software can upgrade without changing the cluster shred version. A new packet variant can activate while the same cluster-lineage value remains in the common header. Conversely, similar software on unrelated clusters can carry different shred versions.

Operational transition rule

Select the parser through packet slot, trusted cluster feature state, and variant discriminator. Retain overlapping legacy and current parsers around activation because UDP reordering and repair can deliver older-slot data later.

Reject unknown variants before reading dependent fields. Keep unsupported_variant distinct from wrong_shred_version: the former identifies missing decoder compatibility, while the latter directs investigation toward cluster context, routing, replay, or configuration.

Why exact dates are absent

One wall-clock date cannot describe format adoption across mainnet plus test and private networks, client deployments, feature activation, rollback, and late repair. Precise operational history needs a named cluster, feature identifier, activation slot, client commit, and source.

This reference does not invent those values. Pin the decoder to an Agave release, obtain the target cluster's authoritative feature state, and store that provenance beside packet fixtures.

Questions

Does the 16-bit header value name a format?
No. It is a compact cluster-lineage filter computed from trusted genesis plus hard-fork context. The variant discriminator and active feature state select the packet layout. An Agave release, a Merkle variant, a feature-set identifier, and the 16-bit header value are separate receiver settings.
Why does this history omit activation dates?
Format support and activation are cluster, feature, client, and slot specific. One wall-clock date would misstate private clusters, test networks, staged deployments, rollback, and late repair traffic. A defensible date requires a named cluster, feature identifier, activation slot, client commit, and authoritative source, none of which should be guessed.
How should receivers handle format transitions?
Deploy support before activation, select parsing by trusted slot context and the packet discriminator, retain the older path for reordered and repaired packets, and reject unknown variants visibly. Test data, coding, recovery, proof failure, duplicate conflict, and partial final FEC sets on both sides of the transition.