Skip to main content
Technical proposal SIMD-0313 Review

Drop unchained merkle shreds

  1. Idea
  2. Draft
  3. Review
  4. Accept
  5. Implement
  6. Active

Decision brief

Why this proposal matters

As the new shred format is being sent by all clients, this feature deprecates the old shred format.

Source-backed reading aid · source language: EN

Proposal at a glance

What changes

  • As the new shred format is being sent by all clients, this feature deprecates the old shred format.

Stakeholder map

Who is affected

Builders & client teams Medium impact

Any clients still producing blocks using the old shred format will have their shreds ignored on ingest.

Action requirement unknown
Validators & operators Impact unknown

No proposal-specific evidence was found for this group.

Action requirement unknown
Users & stakers Impact unknown

No proposal-specific evidence was found for this group.

Action requirement unknown
Governance & ecosystem Impact unknown

No proposal-specific evidence was found for this group.

Action requirement unknown

Exact source revision

Full proposal document

Source-language document. Technical identifiers and evidence remain unchanged. 0616093b2952

Summary

As the new shred format is being sent by all clients, this feature deprecates the old shred format.

Motivation

It is inconvinient to support both formats, and upcoming consensus changes (alpenglow) expect all shreds to be of the chained variety.

New Terminology

N/A

Detailed Design

The chained merkle shred variant, adds an additional field to Data and Coding shreds. It adds the Merkle root of the previous erasure batch after the data buffer or erasure coded shard respectively, before the merkle proof:

// Layout: {common, data} headers | data buffer
//     | [Merkle root of the previous erasure batch if chained]
//     | Merkle proof
//     | [Retransmitter's signature if resigned]
// The slice past signature till the end of the data buffer is erasure coded.
// The slice past signature and before the merkle proof is hashed to generate
// the Merkle tree. The root of the Merkle tree is signed.

// Layout: {common, data} headers | data buffer
//     | [Merkle root of the previous erasure batch if chained]
//     | Merkle proof
//     | [Retransmitter's signature if resigned]
// The slice past signature till the end of the data buffer is erasure coded.
// The slice past signature and before the merkle proof is hashed to generate
// the Merkle tree. The root of the Merkle tree is signed.

Additionally in the common shred header, the first 4 bits of the shred variant field are reserved to specify the shred variant. The second bit indicates if this shred is of the chained merkle shred variant.

If drop_unchained_merkle_shreds: 5KLGJSASDVxKPjLCDWNtnABLpZjsQSrYZ8HKwcEdAMC8 is active, then any shred with the second bit of the shred variant as zero will be dropped on ingest.

Alternatives Considered

None

Impact

Any clients still producing blocks using the old shred format will have their shreds ignored on ingest.

Security Considerations

None

Backwards Compatibility

This feature is not backwards compatible.

Evidence graph

Related proposals and rollout

One or more sources are unavailable.

Upstream review record

Upstream discussion & review

GitHub review is editorial context, not evidence of on-chain support, voting, or outcome.

PR #313 · merged SIMD-0313: Drop unchained merkle shreds 8 comments and reviews · Jan 19, 2026
@AshwinSekar

@bw-solana @alexpyattaev it won't let me add you as a reviewer so tagging here

GitHub ↗
@alexpyattaev

Would it make sense to mention that this strictly improves security compared to the status quo?

GitHub ↗
@alexpyattaev

In context of this SIMD all shreds are chained, right?

GitHub ↗
@AshwinSekar

All shreds sent are now chained, but they used to not be chained. As specified below when the feature flag is active, any shred without the chained flag set will be dropped

GitHub ↗
@AshwinSekar

This SIMD by itself will not, but it leads to better security via alpenglow

GitHub ↗
@bw-solana

I support it. We should be able to delete a lot of code

GitHub ↗
@alexpyattaev

this makes sense, thank you!

GitHub ↗
@AshwinSekar

@willhickey could we get this merged and resume activation on devnet? Thanks!

GitHub ↗

simd.watch community discussion · SIMD-0313

Powered by Giscus · Sign in with GitHub to comment

Community comments load when this section approaches the viewport.

Provenance

Evidence & technical details

Rollout or chain data, source revisions, freshness and integrity.
2

SIMD

Deployment Status

Document lifecycleReview
CategoryCore protocol
Devnetactive Epoch 914
Testnetactive Epoch 811
Mainnet-Betaactive Epoch 821
5KLGJSASDVxKPjLCDWNtnABLpZjsQSrYZ8HKwcEdAMC8

Exact source revision

Sources & integrity

  • Proposal document pinned_commit_blob
    0616093b2952ed6de52c4a27d66aadd11d48d4f9
  • simd-document document · stale · Sep 10, 2026
    0616093b2952ed6de52c4a27d66aadd11d48d4f9

One or more sources are unavailable.