SIMD-0649 Closed Unmerged: Solana's Fair Ordering Rule Couldn't Reach the Batch Boundary

0xNeo
Video

On September 25, a pull request closed. Not merged. Not rejected with a triumphant explanation, not withdrawn with a farewell post, not superseded by something better. Just closed. The kind of quiet administrative death that nobody posts about, because there is no villain and no victim — only a proposal that could not answer the one question that actually mattered: what happens at the edge of a batch?

I was on a call when I saw it. Half-watching a chart that has done absolutely nothing for three weeks, because that is what this market is — long stretches of nothing punctuated by someone else's liquidation. I didn't wait for the signal, because at that point the signal was the silence. A Solana improvement proposal that had been formally reviewed on September 23, discussed through August, name-dropped by accounts with "fair ordering" in their bios, had gone dark two days after review.

Here is what made me sit up. SIMD-0649 was not a radical re-architecture. It was a modest, almost boring rule about how transactions should be sequenced inside a single entry batch. Non-increasing priority. No committee, no auction redesign, no new token, no fork. And it still did not make it.

So the story is not "Solana fixes MEV" and it is not "Solana fails at fairness." The story is narrower and far more useful. The one concrete ordering mechanism Solana's fair-ordering conversation actually produced could not survive contact with the parts of the block it deliberately refused to touch. That is a sentence worth unpacking, because it tells you something about the next twelve months of Solana MEV that no roadmap slide will.

Let me take you through it properly.

Context: Why Solana's Ordering Problem Is Structural, Not a Bug

Start with the architecture, because everything downstream follows from it.

Solana has no public mempool. That is a design decision, not an accident, and it is the reason Solana can push throughput the way it does. Transactions are forwarded to the current leader, and the leader decides what goes in, in what order, and — critically — how that stream of entries gets sliced into batches. A "slot" is the time unit; a leader produces the block for its slot. Inside that block, entries are grouped into batches. The data itself is chunked into shreds, and shreds are grouped into FEC sets — forward error correction sets that let receivers reconstruct data from partial information.

That last part matters more than it sounds. In Solana, the unit of transmission and the unit of validation are not the same thing. You can receive a partial batch. You can reconstruct. You can replay. And when you replay, you can check things about the block that you could not check when you were merely relaying it.

Compare that to Ethereum, where the last four years of MEV discourse have been shaped by proposer-builder separation and MEV-Boost — an entire market layer bolted on top of the block producer. Solana never built that. There is no builder market because there is no mempool to build from. The leader is the builder. The leader is the proposer. The leader is the sequencer, in the loosest sense of the word, for six-tenths of a second at a time.

This is why "fair ordering" on Solana has always been a strange phrase. On Ethereum you can argue about who gets to construct the block. On Solana, the block constructor is defined by the protocol's rotation schedule. You cannot remove the leader's discretion without removing the leader, and the leader is the throughput.

So the realistic question was never "how do we make Solana ordering fair?" It was always "how much of the leader's discretion can we constrain without breaking the thing that makes Solana fast?"

SIMD-0649 was an attempt to answer that. A narrow attempt. An engineer's attempt. And in a bear market, where nobody has the attention budget for a five-part governance saga, narrow engineer attempts are exactly the ones that die quietly.

Core: What SIMD-0649 Actually Did — and Did Not Do

Let's be precise, because almost every summary of this proposal online is wrong in the same direction: it sounds bigger than it is.

The rule, in plain language: within a single entry batch, non-exempt transactions must appear in non-increasing priority order. Higher priority score first, lower priority score later. Not increasing as you go down the batch.

That is the whole rule. That is the entire mechanism.

Now the parts that make it meaningful.

The priority score is not what you think it is. It is defined as the reward the leader receives for including a given transaction, divided by that transaction's requested cost under the pre-execution cost model. The reward includes the priority fee plus the portion of the base fee that is not burned. So the score is a ratio, not a flat bid. A transaction paying a huge absolute fee but requesting an enormous amount of compute can score lower than a small transaction paying almost nothing.

This matters for two reasons. First, it means the ordering rule is coupled to Solana's cost model, which is coupled to the compute unit accounting, which is coupled to the integer arithmetic each client performs independently. Second, it means the rule is not "rich transactions go first." It is "fee-per-requested-cost goes first," which is a subtly different game and one that sophisticated searchers will optimize against differently.

The one-unit guard. Because Agave and Firedancer compute costs separately, the proposal had to include a guard value to ensure that the integer math produces identical results across clients. If Agave and Firedancer disagree on a transaction's priority score by a single unit, they disagree about whether a block is valid. That is a consensus split, not a bug report. The one-unit guard exists to prevent exactly that.

This is the kind of detail that never makes it into a thread but decides whether a proposal is even implementable. And it tells you how deep the coupling runs: an ordering rule is now reaching into cost-model arithmetic and demanding cross-client determinism.

The enforcement mechanism is replay-time. Validators do not check ordering when they first see data. They check it when they replay. If a block violates the rule, the block can be adjudicated invalid. The revised draft went further and allowed comparison at transaction arrival, with the block invalidated later if the comparison fails — a concession to the fact that waiting for an entire batch before you can say anything is operationally painful.

But here is the boundary: it does not decide whether a transaction gets included at all. A leader can drop your transaction entirely and the rule has nothing to say about it. A leader can include it in a batch of one. A leader can hold it and place it later. The rule only governs relative order among transactions that have already been admitted into the same batch.

Minimum batch size, or: the two-FEC-set patch. The drafters knew the obvious attack. If a leader can create arbitrarily small batches, the ordering rule becomes vacuous — every batch has one transaction and every batch is perfectly ordered. So the proposal required each batch, except the last, to contain at least two FEC sets, roughly 64 shreds.

That is the crux of the whole design, and it is the part I want you to remember, because it is where the proposal ran aground.

Client compatibility. The draft states that Agave and Firedancer should target batches of roughly two FEC sets. Fine on paper. But in August, discussion had already surfaced a concern: Firedancer replaying partially received data, having to hold the batch open longer to satisfy the minimum, with latency implications for a client whose entire value proposition is speed.

Read that again in context. Firedancer exists because it is fast. Now imagine telling the Firedancer team that to satisfy an ordering audit, they should wait longer before acting on data. You do not need a formal veto to understand the dynamic.

The Batch Boundary Is the Whole Story

On September 23, a reviewer made the point that decides this proposal's fate. Two points, actually.

First: the leader can still close a batch whenever separating conflicting transactions is advantageous. Second, and more damning: the reviewer asked for actual data — how often do leaders currently produce batches smaller than the proposed minimum, broken down by scheduler, by client, by market conditions? And have you run sensitivity testing on different minimum sizes?

Neither existed. The proposal and the review both lacked it.

And that is the finding. Not "Solana's fair ordering failed." The finding is that a rule which only constrains ordering inside a boundary will be evaded at that boundary, unless you either constrain the boundary or prove empirically that the boundary is rarely exploitable. SIMD-0649 attempted neither. It set a minimum batch size without measuring how often the minimum binds, and it preserved full leader discretion over where batches begin and end.

Think about what that means strategically, from the perspective of someone who makes their living extracting value from ordering.

Before this proposal, the natural searcher play is intra-batch front-running: get your transaction into the same batch as a victim, at a better priority score, and land first. The rule directly attacks that play. So the play moves. If the boundary is where the rules stop, the boundary is where the value goes. You do not need to be faster than the victim. You need to be in the next batch.

And the rule says nothing about that. A higher-priority transaction in batch N+1 does not get hoisted ahead of a lower-priority transaction in batch N. The rule is scoped within, not across. Batch-boundary arbitrage does not merely survive SIMD-0649 — it is the exact strategy the proposal's scope leaves untouched.

This is not a conspiracy theory. It is arithmetic plus incentives. The reviewer said it plainly: the leader can still close a batch when it benefits them. You do not need to assume malice. You need to assume the leader is running a business.

Now stack the second problem on top.

A leader can pay itself priority fees to favor its own transactions. The draft acknowledges this directly. Priority fees return to the leader. The burned portion of the base fee is still a real cost, so it is not free, but it is not prohibitive either. And the proposal explicitly should not be read as a guarantee against preferential treatment, MEV, or slippage.

That last clause is the most honest sentence in the entire document, and it is also the sentence that guarantees disappointment. Because when a proposal is described publicly as addressing fair ordering, the audience hears "my swap will stop getting sandwiched." The document says the opposite. The document says: this is an auditable ordering check inside a boundary, nothing more.

I have watched this exact gap between technical scope and narrative scope burn people before. In 2021 I was running AMAs for a DEX listing, and the number of retail users who believed "low slippage" was a protocol guarantee rather than a market condition was genuinely shocking. I pivoted our content to user-experience explainers for exactly that reason — the mechanics were never the problem, the expectation was. Same dynamic here, wearing different clothes.

Contrarian: What the Closed PR Actually Tells Us About Solana Governance

Here is where I diverge from the take you are going to see most.

The consensus framing will be either "Solana can't fix MEV, centralized chain, lol" or "good, thoughtful process, proposal needed more work." Both are lazy.

The interesting reading is that the SIMD process worked — and that is precisely the problem for the fair-ordering narrative.

A proposal arrived. It was reviewed. A reviewer identified a scope hole that would have made the rule partially cosmetic. The reviewer asked for empirical data that did not exist. The PR closed on September 25, after calls for more discussion and broader client-developer support. Nothing broke. No mainnet rule changed. No client shipped anything. The system quietly refused to ship a rule it could not validate.

Community buzz wasn't the issue. There was barely any. That is the part that should interest you.

Compare the informational asymmetry here. On the surface, Solana has an enforced ordering rule. Underneath, it has a draft that never merged, a minimum batch size with no measurement behind it, and a documented carve-out for the leader's own transactions. If you read the headline and stop, you are trading on a rule that does not exist.

Now think about who was actually in the room. The reviewer is unnamed in the coverage. The client teams — Agave and Firedancer — hold what amounts to a de facto technical gate, because a rule that increases replay latency or breaks cross-client determinism cannot ship no matter how good the intent. And the proposer's own non-goals list is broader than the goals list.

That is a governance structure where the last mile is not voting, it is implementation. You can ratify anything you want; if Firedancer's latency budget says no, the answer is no.

Which means the real question for the next revision is not "will the community support it?" It is "will the client teams absorb the cost?" And the honest answer today is: unclear, and probably only if the latency impact is measured and shown to be negligible — which requires the very data nobody has produced.

Let me add a market-structure angle, because I trade this chain and I care about where the money actually sits.

Solana's fee market has quietly become one of the most interesting in the industry. Related coverage has noted Solana overtaking Ethereum on fee generation while ETH retains its burn lead. Two chains, two totally different ways of turning activity into value. Ethereum burns. Solana pays. Priority fees go to the leader; the non-burned base fee goes to the leader; the burned portion is the only genuinely destroyed value.

So look at what SIMD-0649 would have done to that machine, had it shipped. It would have made priority score the explicit, audited ordering variable inside every batch. Priority fee weight would become more legible. Leader revenue composition would become more visible. And the self-payment carve-out means the leader is simultaneously the party being audited and the party setting the audit's incentive environment.

If you are a validator operator in a bear market, this is not an abstract fairness question. It is a revenue question. Rules that constrain ordering discretion are rules that constrain a real income stream, in a quarter where nobody is feeling generous.

Which is the honest reason to expect revisions, not revolutions. Nobody is going to ship a rule that meaningfully cuts validator ordering revenue during a drawdown. They will ship a rule that audits ordering without redistributing the value of ordering. Which is, functionally, what SIMD-0649 was trying to be — and it still could not get past the batch boundary.

Ecosystem: Who Actually Gets Hurt, and Who Just Reads Headlines

Let me trace the transmission, because this is where people get sloppy.

Upstream: validators and client teams. They absorb the cost. Ordering checks, minimum batch sizes, replay compatibility, cross-client determinism on integer math. The August note about Firedancer replaying partially received data is the first pebble. If minimum batch sizes force a client to hold a batch open longer in low-throughput conditions — and low-throughput conditions are the entire bear market — you are adding broadcast latency to the exact environment where nobody wants it.

Midstream: DeFi and DEX activity. This is the supposed beneficiary. But the benefit is conditional on something the proposal never measured: how often do meaningful competing transactions actually share a batch? If batches are small most of the time, the rule is decorative. If batches are large and contested, the rule bites. Nobody published the distribution. Not the proposer, not the reviewer, not the clients.

Downstream: you. The trader. The one who reads "fair ordering" and assumes slippage protection. The proposal explicitly says it is not that. No guarantee against preferential treatment. No guarantee against MEV. No guarantee against slippage. What you get, at best, is an auditable relative ordering inside a boundary that someone else still controls.

And what about the actual competitive frame? Solana's structural advantage has always been throughput and cost, not order integrity. Other chains have tried to sell fair ordering as a feature and mostly ended up with smaller blocks and bigger promises. Solana is not about to trade its throughput for that.

So the realistic outcome of this whole episode is not a change in behavior — it is a change in expectation. The market learns that Solana's fair-ordering efforts are scoped to intra-batch sequencing, that the boundary remains discretionary, and that data about batch formation does not currently exist in public form. That is a much less exciting headline than "Solana tackles MEV," and it is the true one.

Takeaway: What I Am Watching Next

I spent a week in 2026 running autonomous trading agents on a testnet, watching algorithms make decisions I would never make and lose money in ways that were, honestly, funnier than they should have been. The lesson I took from that week applies here. When you hand sequencing discretion to an actor and then build a verification layer that only covers part of the sequence, the actor does not fight the verification layer. The actor walks around it. That is not cynicism. That is the observation that made the whole simulation work.

The next revision of SIMD-0649 will either constrain batch boundaries or it will not. If it does not, watch for MEV strategy to migrate from intra-batch front-running to cross-batch positioning — which will look, from a user's perspective, exactly like nothing changed. If it does, watch for latency measurements and client pushback, because that is the cost nobody has priced yet.

And watch the data. The reviewer asked the right question on September 23: how often do leaders produce batches smaller than the minimum, by scheduler, by client, by market condition? Whoever publishes that dataset will do more for Solana ordering transparency than a dozen unmerged proposals.

Until then, the batch boundary is still wide open. And in a market where survival matters more than gains, an open boundary is not a scandal. It is just the quiet part that nobody measured.

I didn't get into this industry to write about pull requests. But some weeks, a closed one is the most informative thing on the chain.