The D.C. Circuit's opinion landed on September 6, 2024, and it did not parse like a crypto victory. The Commodity Futures Trading Commission tried to block Kalshi from listing contracts on which party would control Congress. The court said the agency could not. Headlines called it a win for prediction markets. The structure reveals something narrower: a judiciary policing its own authority, not an industry being set free. David Schwartz, Ripple's CTO Emeritus, watched the agency's argument and concluded that the major questions doctrine was being used in a way that seemed incorrect. He is not a lawyer. He is the man who helped design the XRP Ledger. What he spotted is a feedback loop with no oracle — an agency citing a judicial brake as if it were an engine. Structure reveals what emotion conceals. The ruling is not evidence that decentralized markets triumphed. It is evidence that an administrative argument compiled with the wrong input.
Context matters because Kalshi is not a blockchain. It is a registered designated contract market under CFTC jurisdiction, running a centralized order book, holding user funds, and indexing every contract through KYC and AML procedures. No token. No whitepaper. No ZK-rollup. No pretense of trustlessness. That is precisely why the case extends beyond a niche vertical. The CFTC first moved to bar the congressional-control contracts in 2022. A federal judge sided with Kalshi in 2023. The agency obtained an administrative stay, and the case climbed to the D.C. Circuit. There, the panel confronted the modern version of the major questions doctrine, sharpened by West Virginia v. EPA in 2022 and by the Supreme Court's 2024 decision in Loper Bright, which ended Chevron deference to agency interpretations. The doctrine normally operates as a constitutional speed bump: on questions of vast economic and political significance, an agency cannot claim authority unless Congress clearly delegated it. The CFTC took that speed bump and tried to use it as a grant of power. Schwartz's public criticism of that inversion matters because Ripple has spent years fighting its own regulatory war with the SEC. When a protocol architect calls out flawed logic in a federal agency's reasoning, he speaks the language of people who debug state machines for a living.
The core problem is circularity. In cryptographic terms, the CFTC produced a state variable fed by its own output. The agency asserted that election-control contracts are a major question, then used that assertion to justify its own expanded authority to block them. But the major questions doctrine is a limit on agency power, not a source of it. It exists to force Congress to speak clearly before an agency acts on a grand scale. The CFTC inverted the sequence: it declared the matter significant, then concluded that significance itself authorized intervention. The court noticed. It looked at the Commodity Exchange Act, found no provision that clearly marked these contracts as illegal gambling, and told the agency to stop. During my 2017 audit of the Golem whitepaper, I found a race condition in which gas price volatility could push a task distribution algorithm into an infinite loop. The failure was structural: a loop condition that could never reach a terminal state. The CFTC's argument has the same shape. It assumes the conclusion it needs to prove. Engineers recognize this because we spend our careers hunting for circular dependencies that freeze consensus.
Below the legal argument sits a structural vulnerability that both Kalshi and its decentralized competitor Polymarket share: outcome canonicalization. Prediction markets do not fail at price feeds; they fail at resolution. Kalshi resolves its contracts centrally, as a licensed交易所 must. Polymarket uses blockchain rails, USDC settlement, and an oracle protocol to determine outcomes. But decentralization of code does not decentralize truth. Some entity must decide which source data constitutes the official result — which certificate, which state archive, which certified count. The data exists. Canonicalization does not. In 2021, I spent 120 hours dissecting Compound Finance's oracle mechanism. The failure mode was not data availability. It was price canonicalization under stress. A single centralized feed created a liquidation cascade vector that no collateral ratio could fully absorb. Prediction markets replicate that failure mode one level higher. Election results are not hashes. They are certifications, and certifications require an authority. Truth is found in the hash, not the headline, but the headline result of a midterm election is not written to a Merkle tree. It is signed by a clerk. Whoever controls that clerk controls the payout.
The business model has its own cliff, and the market does not want to name it. Volume is seasonal. The D.C. Circuit decision is timed to peak political relevance, but after November, the trading flow from election contracts decays with brutal speed. When I modeled the UST death spiral in 2022, the lesson was that reflexive systems empty faster than linear models predict. Prediction liquidity is reflexive too: liquidity attracts liquidity, and then resolution destroys it. The court gave Kalshi a license. A license without sustained liquidity is a tax on optimism. The gray rhino in the room is the first-quarter 2025 volume report, when the election cycle is a memory and the platform must survive on economic-event contracts, weather derivatives, and whatever long-tail products its compliance team can push through.
The real competitive map was never technical. Kalshi and Polymarket are fighting a regulatory arbitrage boundary. Kalshi offers the institutional front door: a CFTC-regulated venue with a fiat ramp and a legal compliance layer. Polymarket offers the permissionless back door: no KYC, global access, stablecoin settlement. The D.C. Circuit ruling lowered the listing cost for the regulated path. But the court did not bless election betting. It said only that the CFTC failed to prove the contracts were illegal gambling under the statute. State gambling laws remain intact, and Congress can still move a targeted ban. The prediction sector is one appropriations rider away from a category-wide squeeze. Kalshi's investor base includes crypto venture capital, and the entanglement of commercial interest with regulatory outcome makes the next chapter messier than any courtroom opinion.
Let me steelman the bulls, because they deserve the discipline. The D.C. Circuit's decision is coherent with a genuine structural shift in American administrative law. Post-Loper Bright, agencies no longer receive deference for invented authority. The CFTC's loss is real, and it signals that regulators must bring statutory text instead of vibes. Prediction markets produce information that beats polling. Institutional hedgers genuinely want to trade CPI surprises, Federal Reserve decisions, and geopolitical event risk. Schwartz's intervention adds credibility because protocol-level thinkers read legal arguments the way they read code, and they found a compile error. I grant all of this. But the same judicial wind that constrains the CFTC also constrains every federal agency. It does not constrain state legislatures, and it does not constrain the Department of Justice. The court answered a narrow administrative question. The political and forensic questions remain unresolved.
The next act will not be a headline. The next act will be an appropriations rider, a new CFTC rulemaking, or the resolution of a contested contract where the canonical outcome is disputed. Watch three data points: whether Kalshi lists a non-election contract that sustains volume beyond the political cycle; whether Congress moves a prohibition bill through the upcoming session; and which entity resolves a disputed outcome without triggering litigation. The question is not whether prediction markets survive. It is who controls the oracle — and whether that resolver is more honest than the agency it just defeated. The headline promises a free market. The structure says: trust the resolver. In 2026, that could be an acceptable risk. Or it could be the input that breaks the loop.

