The Binance drain, followed to the last wallet: $6.3B across ten chains, and what it cost to outrun the freeze
We followed every leg onchain. Half is still with the attacker, 44% is frozen, and the freezable half had to run: up to 39.6% over market on DEXs before Tether caught up.
At 20:05 UTC on 29 October, 233 million XRP left five Binance wallets for an address that did not exist a minute earlier. Five minutes later it was 965 thousand SOL. Then 18,270 BTC, split into seventeen pieces of exactly 1,000 BTC plus two remainders, almost all of it inside a single block. Nobody stepped in. Whale Alert posted the moves and the market kept trading as if nothing had happened.
At 20:24, one transaction emptied Binance 14, one of the largest hot wallets on Ethereum: 167 thousand ETH, $1.6B in USDT and dozens of tokens, all sent to a single collector address. A second Binance wallet and later re-sweeps took the Ethereum total to 215 thousand ETH and 1.88 billion USDT. Within minutes the same pattern hit Tron, Arbitrum, Avalanche, Optimism and Base, and a second wave reached Avalanche and Polygon at 23:04.
We followed every leg onchain. At pre-event prices, the total is $6.32B. Half of it, $3.36B, is still in the attacker's hands: most of it has not been sold or swapped, and the rest it swapped into ETH or TRX before anyone could freeze it. 44%, $2.76B, is frozen. The last 3% went on premiums and slippage or was left behind.
The split comes down to one question: could the asset be frozen? If it could, the attacker rushed to move it. If it could not, it simply kept it.
The attacker's real problem
Getting the money out of Binance was only half the job. The other half was keeping it.
More than half of what left Binance, $3.58B, could be frozen. USDT, USDC and tokens like wBETH, XAUT or PAXG have a company behind them, and that company can blacklist an address with one transaction. The other $2.74B could not: the native coins of decentralized networks, ETH, BTC, XRP and SOL, plus altcoins with no freeze function. Centralized issuers on one side, nobody to call on the other.
The attacker treated the two halves completely differently. The unfreezable coins were simply parked, and 87% of that value has not been sold or swapped.
The freezable half was a ticking clock. On Ethereum, Tether froze the collector's USDT 37 minutes after the theft, and Circle froze the USDC 24 minutes after it arrived. On Tron, where a separate 612.7M of USDT had been taken, Tether needed 46 minutes. Whatever was not out of the first wallet by then would stay there forever, and most of it did: 77% of the freezable money is frozen.
But $1.16B moved before the freeze reached it, all of it USDT, RLUSD and wBETH.
The USDC is the strangest case. Most of it, 780M, reached the collector at 20:41, and Circle froze it at 21:05. For 24 minutes it sat there, next to some of the deepest ETH/USDC pools on Ethereum, and not a single dollar moved. Why is unknown. The USDC arrived through a different route, a Binance smart account, after the attacker's USDT operation was already running, and it never joined that operation. Whether the attacker overlooked it or expected Circle to act faster, the chain cannot tell us.
To follow the money that did move, we have to go inside DeFi.
Inside DeFi: two doors
Most of the money that escaped was on Ethereum, and the rest on Tron. On either chain, it had two ways to become something nobody could freeze: swap it into the chain's own coin (ETH on Ethereum, TRX on Tron), or borrow that coin against it in a lending market. Other coins like SOL or BTC only exist on Ethereum as wrapped tokens, which their issuers can freeze too. The attacker used both doors.
Door one: buying ETH at any price
Between 20:34 and 21:09, the attacker sold 405M USDT for 151,456 ETH in eleven transactions. The first four went through UniswapX, where three professional fillers took the other side. The rest went straight into Uniswap pools through routers. On average, the attacker paid $2,674 per ETH, 17.3% above Binance. In total it paid $59.9M more than that ETH was worth on Binance: the price of having to buy it all in 35 minutes, before the freeze.
The first trade, 27 minutes before any freeze, paid a 4% premium. Fifteen minutes later the attacker was paying 32%. After Tether struck, it kept buying from fresh addresses, and the last trade paid 39.6%, an effective $3,161 per ETH. It is rare to see something this clean: a buyer who does not care about price, walking up the onchain order book one trade at a time.
The selling bent the stablecoins too. Once the ETH/USDT pools were drained, ETH was cheaper in the pools that trade it against USDC, so the routers took a detour: inside the same transaction, they first swapped USDT into USDC or DAI in Curve's main stablecoin pool, then used that to buy ETH. About 64M USDT went into Curve's pool this way, and it pushed USDT to a discount of more than 10% against USDC inside that pool. The discount came mostly from the pool filling up with USDT; nothing shows the market pricing the risk of a freeze. It faded as the pool rebalanced over the next forty minutes.
You could see it from outside, too. For about an hour, ETH on Ethereum DEXs traded in a different market than ETH on exchanges.
The gap opened with the attacker's first buy and peaked at about 18% just after the last one. The pools stayed where the attacker had pushed them until arbitrageurs sold enough ETH into them. That took half an hour, because the usual source of that ETH was blocked: Binance had paused withdrawals at 20:45. The Across bridge brought in just 1,841 ETH from L2s. The gap only closed around 21:40.
An 18% move in ETH would normally set off liquidations everywhere. This one set off none: the 16 small liquidations we counted that night came from the small drop on exchanges and from other pairs, not from the onchain spike. Aave, Compound and Morpho markets mostly price ETH with oracles like Chainlink, which blend prices from many trading venues, weighted by volume. Onchain DEXs are a small slice of ETH volume, so the spike barely moved the blend: at 21:10, Chainlink read $2,260 while ETH on Uniswap traded above $2,600. Protocols that price from their own pools saw something else: the oracle of Curve's crvUSD, which smooths prices from Curve pools, rose more than 16% above Chainlink. Had Aave priced ETH from a DEX average, the attacker's own loan, at a health factor of 1.05, would have been liquidated, along with every ETH borrower close to the edge.
Proprietary AMMs, where a market maker streams its own quotes onchain, played only a small part. The nine propAMMs we track ran out of ETH between 20:34 and 20:36 UTC: thirty-eight addresses bought 1,333.5 ETH from them at the Binance price. None of the attacker's eleven trades went through them. More on how they behaved that night in Zonda Markets' PropAMM Weekly.
Why he stopped buying
The obvious answer is that ETH had become too expensive. That does not hold up. Frozen USDT is worth nothing, so for the attacker any price was better than a freeze. And the chain shows it kept trying until the very end.
At 21:09, the attacker still had 205M of USDT that Tether had not frozen yet. Most of it, 175M, had been sitting in one wallet, 0x811f…, since 20:59. At 21:02 that wallet gave Uniswap permission to spend it, the step that comes right before a swap. But the swap never happened. Instead, at 21:08, the attacker moved the 175M to another new wallet, 0xaa24…. From there it tried other ways out: it gave permission to KyberSwap's aggregator, paid a small fee to MetaMask's gas-station service, and gave permission over 35M to a contract that appears linked to LayerZero, a tool for moving funds to other chains. Tether froze that wallet 24 seconds after that last step. The other 30M was moved twice more and frozen 2.8 minutes after its last move.
The attacker did not run out of will. It ran out of time. It worked one transaction at a time, every 30 to 90 seconds, and every new wallet had to grant permissions again before it could swap anything. At first, moving to a new wallet bought time, because Tether took half an hour to react. By 21:10, Tether was freezing new wallets faster than the attacker could move, grant permissions and swap.
Looking back, it was the most expensive pause of the night. For nine minutes, the 175M sat in a wallet that Tether never froze, while the pools still had ETH to sell. Even paying 50% above market, swapping it right away would have bought about $117M of ETH. Instead, it moved one more time and was frozen whole. Why the attacker kept moving instead of swapping, the chain cannot tell us.
Door two: borrow and walk away
At 20:49, on Compound, a third-party contract funded with exactly 28.6M of the attacker's USDT posted it as collateral and borrowed 10,042 WETH. Eight minutes later, a fresh address supplied 60M USDT to Aave and borrowed 19,762 WETH.
A loan has no slippage: the lending market prices it at the oracle. But a loan you never intend to repay is a sale in disguise. Post 60M USDT on Aave, borrow at its maximum loan-to-value of 75%, walk away, and you have sold your USDT at the oracle price divided by the LTV: $3,036 per ETH, 34% above the market. On Compound, where the limit is 80%, the implied premium was 26%.
So why borrow? Look at when. The switch came at 20:49, seconds after a DEX trade paid 32%, the point where the pools had become as expensive as the loans. After the lending pause, the attacker went back to Uniswap at 21:04 at a 20.8% premium. That it was choosing between doors by price is our reading of the timing, not something the chain can prove.
No lending market could have stopped those two loans. They were done by 21:00, before anyone had frozen anything. What the lending markets did next was close the door behind him.
The risk was simple. The attacker still held plenty of stolen tokens that issuers could freeze, such as RLUSD or XAUT, plus dozens of others. Each of them could be posted as collateral to borrow ETH or another asset nobody can freeze. As LlamaRisk put it in its post-mortem for Aave, the exploiter "could swap the stolen funds into any listed asset", so freezing only the stolen tokens was not enough.
Compound paused new deposits at 21:43. Four minutes later, Aave started freezing its markets, 175 of them across 16 networks. A freeze stops new deposits and new loans, but everything else keeps working: users can repay, withdraw and be liquidated. And Aave's guardians can undo it at any moment, without waiting for a governance vote.
None of these protocols can freeze one attacker's balance. What they can do is close the doors for everyone, which is what Aave did.
What Aave is left holding
The two loans are still open. The attacker borrowed 19,762 WETH from Aave against 60M USDT and will likely never repay it. LlamaRisk says the position is over-collateralised, is the attacker's only one on Aave, and does not put suppliers at risk. It sits close to the edge, though. Aave liquidates a USDT-backed loan when the debt reaches 78% of the collateral, and this one started at 74%: a health factor of about 1.05. A rise of about 5% in ETH would trigger its liquidation.
The strange part is the collateral. Tether blacklisted the attacker's Aave address two minutes after the last borrow, but that address no longer holds USDT. It holds a claim on Aave's USDT pool. The 60M itself sits in the pool, mixed with everyone else's, and blacklisting the pool would freeze every Aave user. In practice, it is stolen USDT that Tether cannot reach. Whether that was the attacker's plan is our reading, not something the chain can show.
If ETH rises enough, liquidators will repay the WETH and take that USDT, plus Aave's 4.5% bonus, legally. If it doesn't, the position just sits there. Meanwhile Aave has set USDT, USDC and other assets linked to the attacker to LTV 0, so they no longer count as new borrowing power for anyone, and will keep them there while it decides when to restore them. The same logic applies on Compound, where the 28.6M position is about a fifth of all WETH borrowed in that market.
Tether closes in
The USDT that got out of the collector kept moving. Again and again, by the time Tether froze a wallet, the money had already moved on to a new one, so Tether had to chase it wallet by wallet. The first wallet was frozen 31 minutes after the money arrived in it. By the end, Tether was freezing a new wallet less than three minutes after it received the money, and at 21:18 it froze the last one still holding escaped USDT. By then, 405M had already been swapped into ETH, 88.6M was sitting as collateral in lending markets, and 205M had been frozen along the way.
Put a price on that delay. Across its eleven DEX trades, from 20:34 to 21:09, the attacker turned 405M USDT into ETH in 35 minutes, about 11.6M a minute. Every minute the freeze took was worth roughly $11.6M to the attacker, and when the first freeze finally landed, another 971M USDT was still sitting idle in the collector (re-sweeps added 204M more after the freeze).
Tron was the other big leak. On Tron, 612.7M USDT left Binance at 20:22 for a new address. When Tether froze it 46 minutes later, 300M had already moved on. Part was caught one hop later, but about 234M escaped, and all of it was swapped into TRX within minutes, 199M of it in SunSwap's USDT/TRX pool. Once it was TRX, there was nothing left for Tether to freeze.
What the market saw
Almost none of this showed up in the price. ETH fell about 4% on exchanges to a low at 20:47, and a third to almost half of that drop reverted within the hour. The real dislocation was onchain, in that hour-long DEX premium. Who earned it, between pool liquidity providers, UniswapX fillers and arbitrageurs, is a split we will measure separately. Lending protocols barely noticed: 16 small liquidations on Ethereum, about $136k in total, and no bad debt.
In short
- $6.32B left Binance across ten chains in about half an hour.
- $3.36B is stolen: the attacker still holds it. $2.76B is frozen by Tether, Circle and other issuers. $204M was lost on premiums, slippage and tokens left behind.
- The rule for the attacker was simple: what could be frozen had to be moved fast. What could not be frozen could just sit there.
- $1.16B of freezable money moved before the first freeze, but only about $776M could escape in time, and getting it out was expensive: up to 39.6% over market on DEXs, and 26% to 34% on loans the attacker will never repay.
- Every minute of delay was worth about $11.6M to the attacker.