Case report12 wallets on the board
AFX Trade bridge drain: $24.15M USDC from Arbitrum to Bitcoin through CCTP and T
AFX Trade bridge drain: $24.15M USDC from Arbitrum to Bitcoin through CCTP and THORChain
Chain: Arbitrum (followed onto Ethereum and Bitcoin). Date: July 22 to 25, 2026. Type: an exploit; the bridge's signing keys were reportedly compromised. Board: board_arbitrum.json.
What happened
AFX Trade is a perpetuals DEX on Arbitrum. On July 22, 2026 at 21:30:25 UTC, its own USDC bridge 0xcb3b9a3e5668afe84dc7a864b36b845dce062e67 released 24,150,000 USDC to 0x2f2974fabc54dba33442261211c06bd20e0feefc in one transaction (0x50d0b3ec…, sent by 0x5553ea7b…).
Public reports (The Block, Decrypt, Halborn) say the signatures were valid and the keys were compromised off-chain. AFX offered the attacker a 30% bounty to return 70%.
The trail
Gas.
0x32e3200d…sent the attacker 0.05 ETH 1 h 41 min before the drain (0x55b04a76…).Six CCTP v2 transfers to Ethereum, 21:33 to 21:40 UTC. Iris resolves each one, through Circle's attestation API, to the same address on Ethereum:
| Arbitrum tx | USDC sent | Ethereum tx | USDC received | |---|---|---|---| | 0x0e5c14b5… | 100,000 | 0xb8ea9004… | 99,983.50 | | 0xb69c938d… | 5,000,000 | 0xc9664ead… | 4,999,228.90 | | 0x610a6d70… | 5,000,000 | 0x405b8c65… | 4,999,228.90 | | 0x5489629a… | 7,500,000 | 0x7da91afb… | 7,498,843.90 | | 0xc467e410… | 655,000 | 0x7dbbfc67… | 654,898.01 | | 0xd59a78a5… | 5,895,000 | 0x286560cf… | 5,894,091.07 |
In total, 24,146,274.28 USDC landed, each transfer within about 15 seconds.
Swapped to ETH on Ethereum. Iris's Follow the funds: "Swapped 24,146,274 USDC for 12,467 ETH on an unlabeled venue (0x225a…dc17)". The first swap was at 21:34 UTC (0x2c92d935…).
To a holding wallet. 12,467.437 ETH went to
0x627654b2782bfc57580ecd11d40869b350b6ebac(the press's "0x6276…ebAC") at 21:42 UTC (0x7469189a…).Split on Jul 25, 08:42 to 16:10 UTC. Iris lists 11,404 ETH sent to 24 wallets in the transactions it read. The largest:
0xd8a282d3…: 2,018 ETH in 14 transactions0x7cbd780e…: 1,763 ETH in 12 transactions0x678335b4…: 871.07 ETH0x1c80319d…: 705.98 ETH
Into THORChain, then Bitcoin.
Following the two largest branches, both pay the same four high-nonce wallets:
0xe3536ba9…,0x15a18266…,0x03545a90…and0xed23d1bf…. They have 4,287 to 4,936 transactions each.Iris's analysis of
0xe3536ba9…shows its only counterparty is the THORChain router, so these are THORChain vaults.The deposits carry THORChain swap memos in their calldata:
0xa167616f…: 304.48 ETH from 0x7cbd to vault 0xe353, with memo
=:BTC.BTC:bc1qtdnq8mc80fwsx2mn0kgpdq2rgch6ya8vtm5p2f. THORChain's Midgard: 53.03 ETH swapped for 1.52694476 BTC (BTC tx B590B400…). The other 251.45 ETH was refunded by the swap's price limit.0x02e378a1…: 326.81 ETH from 0xd8a2 to vault 0x15a1, with memo
=:BTC.BTC:bc1quny7zjl2wphpfr9tgrqrcsz83ad3m6u3h2nkj5. 255.32 ETH swapped for 7.33949756 BTC (BTC tx 31F35913…), and 71.49 ETH was refunded.Refunds came back to the branch wallets and were sent in again. That's why the per-vault totals on the board are larger than what each branch received.
Where the money is now
The Arbitrum wallet, the Ethereum holding wallet (0.013 ETH left) and the branches are empty.
The money left Ethereum through THORChain swaps to Bitcoin addresses written in the deposit memos.
Only two swaps were resolved here. The full list of BTC payout addresses is one Midgard query per deposit away.
What Iris shows that a block explorer doesn't
The cross-chain jump. Arbiscan shows six transfers to an unlabeled contract. Iris resolves all six CCTP v2 burns to their Ethereum mints and timestamps, through Circle's attestation API. That ties the Arbitrum attacker to the Ethereum wallet, the swap and the holding wallet.
Follow the funds through a swap: from USDC on Ethereum to the 12,467 ETH, then the fan-out, ranked.
Convergence. Two branches that look independent pay the same four wallets, and Iris's analysis puts the THORChain router behind one of them.
Caveats and Iris gaps
Iris doesn't label the four THORChain vaults. "Follow the funds" calls them a "split" rather than ending at a bridge. Iris's bridge lookup also returned nothing for the two memo deposits, which go straight to a vault with the memo in calldata rather than through the router. The memos and the BTC payouts above were read from the chain and from THORChain's Midgard (Liquify gateway), not from Iris.
The swap venue 0x225a…dc17 is unlabeled. Only its short form was recorded.
Some branches weren't followed: 24 branch wallets got 11,404 ETH in the transactions Iris read, and about 1,063 ETH more left the holding wallet. Only 2 branches were followed. 130 ETH from 0x7cbd went to
0x64fb273b…(6,340 transactions, likely another vault), which wasn't checked.USD on ETH arrows is at Iris's ETH price on 2026-10-07 ($2,580.94).