On a September morning, a wallet that had spent weeks rehearsing the same transaction executed it for real. It minted roughly 4,000 L-BTC against almost nothing, and walked 3,996 real bitcoin off the Liquid sidechain through a peg-out service called SideSwap. Two weeks later, about 3,400 of those coins had come back — roughly 85% — and the attacker, still holding 598.5 BTC, asked Blockstream for a bounty. Blockstream said no.
That number is not a rounding error. It is a live liability sitting on the balance sheet of a federated peg that sells itself as institutional-grade bitcoin infrastructure. And the refusal to compensate is not a public-relations misstep. It is a governance decision that every future attacker will read as a price signal about what partial cooperation is worth.
I have spent enough time inside EVM bytecode and curve arithmetic to distrust the press release and trust the state transition. So let me start where the marketing stops: the validation logic.
Context: What a Federated Peg Actually Trusts
Liquid is not a rollup. It is not a validity-proof system. It is a sidechain secured by a federation — a set of functionaries, historically between twelve and seventeen, whose job is to custody BTC on the main chain and authorize the minting and burning of L-BTC on the sidechain. The mechanism is a two-way pegged bridge. Bitcoin goes in — peg-in — and L-BTC is issued 1:1. L-BTC is burned — peg-out — and BTC is released back to the main chain.
Everything in that sentence is a trust assumption wearing the costume of a technical specification.
A peg-out is an atomic operation from the user's point of view and a coordinated multisignature operation from the federation's. The BTC held in the main-chain wallet is controlled by a script requiring a threshold of functionary signatures. To release funds, enough functionaries must agree. To mint L-BTC, the sidechain consensus validates a proof that a corresponding peg-in occurred — typically a header chain proof or a simplified payment verification construct, depending on the implementation vintage.
The attack vector here — over-minting — targets the second half of that pipeline. The attacker produced L-BTC that was not backed by a real BTC deposit. The system either failed to verify the deposit, or the deposit path was spoofed, or the integration between the peg-in verification and the minting logic had a gap wide enough to drive an unbacked synthetic through.
What matters for the forensic record is the rehearsal count. Seventy prior transactions. That is not a fuzzer hitting a boundary condition. That is a human triangulating an oracle. Each rehearsal tested whether the mint would clear, whether the peg-out service would honor it, and whether any monitoring picked it up. Seventy attempts produced no alert — or no alert strong enough to trigger a pause. The compensating control between detection and consequence failed before the real transaction ever landed.
SideSwap's role is important and under-reported. It was the exit channel — the peg-out service through which the unbacked L-BTC became actual bitcoin. SideSwap has since said it cooperated, returned its fees, and handed over tracking data. That is the behavior you would expect from a service provider whose only offense was being the liquidity door that an attacker used. But the door was open because the lock on the upstream side was broken. The root cause is not at SideSwap. It is in the mint authorisation path.
The Coverage Math Nobody Wants to Type
Let me put the arithmetic where it can be checked.
| Metric | Value | Note | |---|---|---| | L-BTC minted in attack | ~4,000 | unbacked synthetic | | BTC extracted via peg-out | ~3,996 | via SideSwap | | BTC returned | ~3,400 (85%) | attacker voluntary | | BTC still missing | ~598.5 | the contested balance | | Current reserve coverage | ~85% | not 1:1 | | Claimed shortfall | ~15% | attacker's own framing |
An 85% covered peg is a 15% discounted peg. The moment L-BTC trades anywhere other than 1.000 BTC, the market has priced in the probability that the coverage is never restored. Adam Back has urged holders not to sell at a discount and has said the peg will eventually reach 1:1. That is a promise, not a proof. The distinction matters: a promise is issued by an entity; a proof is issued by mathematics. Verification is the only trustless truth, and right now the coverage number is verified at 85%.
Where does the missing 15% come from? There are four candidate paths, and they have very different implications.
| Path | Mechanism | Cost bearer | Probability | |---|---|---|---| | Treasury subsidy | Blockstream funds the gap | Blockstream equity | Medium-high | | Attacker reversal | Donation returns the remainder | Attacker | Low | | Law enforcement recovery | Seizure + return | Public cost + time | Low-medium | | Pro-rata haircut | L-BTC holders absorb loss | Depositors | Last resort |
If Blockstream pays from treasury, the loss moves from users to shareholders, and the peg's integrity is preserved — at the cost of a roughly 36-million-dollar subsidy at the time's prices. If it doesn't, the peg becomes a fractional reserve by accident, and the whole institutional narrative — the one that justifies a sidechain with confidential transactions and licensed asset issuance — erodes from the inside.
Here is the part that is easy to miss. The recovery rate does not restore the peg. It restores the optics. Recovering five-sixths of a stolen stack still leaves a hole, and the hole is the signal.
Core: How an Unbacked Mint Clears
I want to reason about the failure mechanics precisely, because the phrase "over-minting attack" hides the interesting part.
In a federated peg, the mint of L-BTC is supposed to be conditional on a verifiable peg-in. Concretely, when a user sends BTC to the federation's main-chain address, the functionaries observe it, and an authorized issuance transaction on the sidechain creates the corresponding L-BTC. If the federation uses header-chain SPV, the sidechain verifies that a Bitcoin block contains a transaction paying the peg address, then credits the sender. If the federation uses a threshold multi-signature custody with no on-chain SPV, the mint authorization is a signed message, and the security reduces entirely to the honesty and key hygiene of the functionaries.
Both designs share a structural weakness: the credit and the debit live on different ledgers, and the reconciliation between them is a state machine that can enter inconsistent states.
Let me model it as a small state machine, because state machines are where value leaks.
- State A: no observed deposit, no mint. Correct.
- State B: observed deposit, mint issued. Correct.
- State C: observed deposit, mint issued twice. Classic double-credit. Value leak.
- State D: no observed deposit, mint issued. Phantom credit. This is the over-minting case.
- State E: observed deposit, mint issued, then deposit reorged away. This is the peg-in reorg window.
State D is what appears to have happened. The mint executed without a valid backing deposit. The transition from a default state into D requires either a validation bypass or an authorization path that accepts a non-deposit as a deposit.
The seventy rehearsals tell us which. A pure coding bug would not require seventy attempts to land — it would succeed on attempt one and then be repeated for size, not for confirmation. Seventy attempts is the signature of someone probing a check — testing where the boundary sits. Each attempt is a question: does the mint clear here? Does the monitor fire here? Does the hedge cover this? The attacker was not exploiting a bug. The attacker was mapping a policy.
That distinction has consequences. A bug gets patched. A policy gets formalised. Blockstream says it patched the nodes. Patched what, exactly? If the flaw was in the peg-in verification, the patch is a validation change. If the flaw was in how authorizations were issued, the patch is procedural and process regimes are notoriously non-auditable from the outside. Silence in the code speaks louder than hype — and Blockstream has not published the diff.
There is a second-order technical question that no one has answered: was the mint authorized by the federation as a whole, or by a subset bypassing the quorum? In the first case, the threshold was compromised or the verification feeding the threshold was compromised. In the second, the quorum logic itself is defective. The remediation is entirely different in each case. Without the diff, the market is pricing an unknown.
I have seen this shape before. In 2017 I pulled apart the Parity multisig and crowdsale logic, wrote Python harnesses to force edge cases, and found an integer overflow in the migration path that surfaced as a Github issue before a mainnet deployment could eat it. The lesson there was that the bug was trivial once expressed as arithmetic — the hard part was that the specification never stated the invariant being protected. Liquid's peg has the same property. The invariant is "sum(L-BTC) ≤ sum(custodied BTC)." That invariant is checkable. Whether it was checked at mint time is the open question.
A peg that does not check its own invariant on every state transition is not a bridge. It is a bookkeeping convention.
Confidential Transactions and the Auditability Penalty
Liquid's flagship feature is Confidential Transactions — amounts and asset types are hidden behind Pedersen commitments. This is the design choice that makes Liquid interesting and it is also the design choice that makes accidental mints harder to see in real time.
A Pedersen commitment hides the value but not the structure. Commitments are additively homomorphic: the sum of input commitments must equal the sum of output commitments plus the fee commitment, or the transaction is invalid. This is sound. But the aggregate supply check — the one that catches an unbacked mint — requires summing across the whole system, not within a single transaction. If a mint transaction is internally balanced because the attacker created both sides of it, the per-transaction check passes. The imbalance only appears at the system level, when you reconcile minted supply against custodied BTC.
That reconciliation is exactly the kind of control that a federation is supposed to run continuously and that is exactly the kind of control that is easy to defer. The 70 rehearsals suggest the supplier of L-BTC was not being reconciled against the collateral in any continuous way — or the reconciliation was manual and lagging.
I trust the null set, not the influencer. The null set here is the set of published cross-ledger reconciliation proofs. It is empty.
The Exit Channel Concentration
A second structural observation. The attacker needed an exit. The exit was SideSwap. That means peg-out liquidity on Liquid is concentrated in a small number of service providers, and those providers are the chokepoints where an unbacked synthetic becomes real money.
This is a general property of pegged systems. The mint side can be locked down cryptographically, but the redeem side is a business problem — someone has to front real BTC against the synthetic, and that someone bears counterparty risk on the peg's solvency. When the peg is 85% covered, the peg-out provider is quietly underwriting a 15% hole every time it honours a redemption.
| Chokepoint | Risk exposure | Mitigation observed | |---|---|---| | Federation quorum | Key compromise / coercion | Unspecified | | Peg-in verification | Phantom deposit acceptance | Patch claimed | | Mint authorisation | Quorum bypass | Unspecified | | Peg-out providers | Fronting BTC against insolvent peg | Fees returned post-hoc | | System reconciliation | Aggregate supply vs custody mismatch | Not disclosed |
Every row in that table is a place where the peg's solvency assumption lives. Every row is either undisclosed or procedurally vague. That is the real finding, and it is bigger than 598.5 BTC.
Competitive Displacement, Priced Correctly
A sideways market does one thing well: it stops paying for narrative and starts paying for structural difference. The Liquid incident is being read through that lens.
| BTC L2 | Security model | Est. asset base | Net read from this event | |---|---|---|---| | Liquid | Federated peg | ~$5B | Directly impaired | | Rootstock | Merged mining | ~$100M | Narrative beneficiary | | Stacks | Proof-of-Transfer | ~$400M | Marginal beneficiary | | Babylon | BTC staking | Emerging | Beneficiary of security demand |
I do not think "liquidity fragmentation" is the real story here, and I have never bought the framing that every bitcoin L2 competes for the same pool. The real question is security-model legibility. A federated peg is legible to a sophisticated counterparty and illegible to everyone else. When the peg's coverage drops to 85%, the sophistication needed to evaluate the risk rises past the point most depositors can reach. Capital does not flee to the safest chain. It flees to the chain whose worst failure mode it can still compute.
Contrarian: The Bounty Refusal Is a Pricing Decision, Not a Principle
The popular read is that Blockstream refused the bounty on principle — no reward for extortion, no legitimising grey-hat behaviour. That framing is comforting and, I think, wrong.
The attacker's leverage was never the 598.5 BTC. It was the threat behaviour the 598.5 BTC represents. Holding unbacked chain-native claims that cannot be freely monetised is not power; it is a frozen position with legal tail risk. Alex Waltz's read is the correct one: routing real BTC through exchanges leaves a topology that chain analysis can follow, and the attacker knows it. The coins are visible on-chain and usable only through off-ramps that are monitored.
So the game is not "attacker holds treasure, Blockstream wants it back." The game is "both sides hold options that decay."
Blockstream's option decays because the peg stays short and the discount persists. The attacker's option decays because every day of holding is a day of accumulating counterparty and legal risk with no yield. In that framing, refusing to pay a bounty is rational: it refuses to convert a decaying attacker option into a realising revenue stream for the attacker. Paying would reset the attacker's clock and validate the extortion template for the next incident.
But here is the contrarian flip, and it is uncomfortable. Refusing to pay changes the payoff matrix for all future attackers, and it changes it in the wrong direction.
| Future attacker's menu | Under "bounty paid" precedent | Under "bounty refused" precedent | |---|---|---| | Return all, request reward | Expected positive | Expected zero | | Return partial, request reward | Expected positive | Expected zero | | Return none | Negative but bounded | Negative but bounded |
Look at the middle row. The "partial return" grey zone — the space where an attacker gives back most and negotiates for the rest — is the space that produces the best social outcome for a protocol under duress. It is also the only row whose expected value collapses when you refuse to pay. If returning is worth nothing, and keeping is worth the same as returning, the rational attacker keeps everything. The marginal cooperator disappears.
Lorenzo Romagnoli made this argument and he is right in the narrow sense: a protocol that refuses to reward partial cooperation is training a generation of attackers toward all-or-nothing. The comfortable principle costs a systemic externality.
There is a counterargument, and it is not weak. Paying a bounty on stolen funds may legally resemble venal compensation for a ransom. Blockstream gains nothing from a court asking whether a payment to an identified attacker was a reward or a settlement. The legal tail is real, and the crypto industry has no unified legal definition of a white-hat actor. A pure white hat returns everything and asks for nothing. The 15% hold is precisely the behaviour that disqualifies the white-hat label — which is why Blockstream's refusal to apply that label is a legal posture as much as a moral one.
I have been watching this space long enough to know the industry prefers clean narratives to clean incentives. This one does not have a clean narrative. It has two rational actors, each protecting a decaying option, each correct, and a third party — the L-BTC holder — who never chose to be a party at all.
The third party is the real casualty. L-BTC holders are not attackers and not fiduciaries. They are depositors who believed 1:1 was an invariant and are now living inside a conditional. The peg is still 85% covered, and 100% of the loss so far has been absorbed not by the attacker and not only by Blockstream, but by whoever is holding the discounted synthetic on a book that says it should be par.
Failure Modes: What Breaks Next
I keep a running list. Here is the one this event generates.
Failure Mode 1 — The Reconciliation Blind Spot Persists. If the aggregate mint-vs-custody check is still manual, the next phantom mint uses the same window. The 70 rehearsals would have been impossible against a continuously reconciled peg. Nothing public suggests continuous reconciliation now exists.
Failure Mode 2 — Peg-Out Provider Underwrite. SideSwap, or its next incarnation, will face the same unbacked synthetic again, because the exit chokepoint did not change. Fronting BTC against an 85%-covered peg is an uninsured counterparty exposure. Expect peg-out fees to reprice or peg-out limits to tighten — a de-facto liquidity tax on the honest user.
Failure Mode 3 — The 1:1 Promise Without a Path. A public commitment to restore parity with no disclosed mechanism is a soft liability. If the treasury subsidises, fine — the promise is met and the system reprices as solvent. If it does not, the promise quietly becomes a haircut, and the credibility of every other federated peg is marked down in sympathy.
Failure Mode 4 — OFAC Contamination. The attacker's operability through Tornado Cash is a signal with a regulatory shadow. The privacy mixer was sanctioned in 2022. Interaction with it invites compliance review, and compliance review is exactly the friction that turns a frozen attacker position into a trapped one. If any of the returned 3,400 BTC transited a sanctioned address, the return itself becomes a compliance event for whoever receives it. That is a genuinely unpleasant second-order exposure nobody has disclosed.
Failure Mode 5 — The Precedent Lock. This is the highest-severity failure mode, and it is not technical. If "refuse partial-cooperation bounties" becomes industry default without a compensating framework for partial returns, the equilibrium tilts toward maximal extraction. The system does not break in one place. It breaks in the incentive gradient, slowly, everywhere at once.
Ranked by severity and probability, the narrative risk dominates the technical risk. The technical gap is bounded by a patch. The incentive gap is not bounded by anything the industry currently has.
Signal Board: What I Am Watching
Sideways markets are for positioning, not celebration. Six signals will tell you whether the 598.5-hole is a stable scar or an open wound.
| Signal | Observation | Trigger | Implication | |---|---|---|---| | Attacker wallet movement | On-chain monitor | Any transfer | Enforcement or renegotiation restart | | L-BTC exchange price | Kraken / OKX books | >20% discount or return to par | Market's verdict on coverage | | Blockstream parity plan | Firm announcement / repo | Mechanism published | Confidence reset | | White-hat standard chatter | Governance forums | Major project takes a position | Game rules shift | | Liquid TVL | Dune / DeFiLlama | >30% drawdown | Confirmed depositor flight | | Attacker identity linkage | Chain analysis reports | Link to known entity | Enforcement becomes real |
Metadata is just data waiting to be verified. Right now the metadata says 85%. The verification has not happened. I would not position on a promise.
Takeaway
What I find most instructive is not the missing 598.5 BTC. It is that a peg operating since 2018, running confidential transactions and issuing institutional assets, was reconciled against its own collateral in a way that tolerated seventy rehearsal mints before anyone acted on the seventy-first.
The number to carry forward is not the shortfall. It is the rehearsal count. Seventy attempts is how long it took to find the seam between verification and consequence. That seam is not unique to Liquid. It exists in every federated design that trusts a quorum to act on a signal it is not cryptographically forced to act on.
So the question for the next quarter is not whether Blockstream recovers the remaining bitcoin. It will, or it will subsidise, or it will haircut — the arithmetic will close one way or another. The question is whether the industry writes down the policy that let an unbacked synthetic clear seventy times in silence.
Proofs don't care about your roadmap. And a peg that will not prove its own invariant has already told you what it is — you just have to read the silence where the reconciliation should be.