The Ledger CryptoBilis hack took $102.0M from 335 wallets. One thief had all the keys
On Friday 9 October, people who had bought Ledger devices from a seller in South East Asia found their crypto gone. We followed every drained wallet on six chains to see how the thief worked and where the money sits now.
Update, 11 October, 07:00 UTC: Ledger has found a hardware implant in one victim's device. On 10 October the thief ran another 1,736 ETH through Tornado Cash and Zcash, and it came out as USDC. Circle can now freeze 5.35 million USDC in five wallets. On TRON the thief swapped 5.1 million USDD back into USDT and then into ETH. We also found a holding wallet we had missed, and the figures now include it. Section 11 has the details.
Correction, 12 October, 12:00 UTC: The TRON wallets we called an OTC-style group (four on 9 October, five on 11 October) are THORChain's vaults, where the THORChain swap service takes in USDT. The thief used them to swap USDT into ETH, about $3.0M on 9 October and the 15.1 million USDD we had counted on 10 and 11 October. The payments to Binance that we linked to the thief belonged to other THORChain users, and we have removed that lead. On 11 and 12 October the thief also emptied the five USDC wallets, before any freeze. We are tracing where the money went and will update this page.
Update, 12 October, 14:00 UTC: We found a drain we had missed. At 20:49 UTC on 9 October the thief emptied nine more TRON wallets of 8.8 million USDT, so our count is now $102.0M from 324 wallets. Since then the thief has sent all its USDD through THORChain to be swapped into ETH, the last of it soon after 13:30 UTC on 12 October, and put about 3,690 ETH more into Tornado Cash. Two fresh wallets that are likely the thief's hold 2.38 million USDC, which Circle can freeze. Section 11 has the details.
Update, 13 October, 10:00 UTC: On the afternoon of 12 October the thief took about 1,210 ETH back out of Tornado Cash and sent most of it to the new wallet that THORChain paid for the thief's last USDD swaps. That wallet now holds 1,944 ETH. Ledger has explained how the implant copies the 24 words during setup. The two USDC wallets have not moved. Section 11 has the details.
Update, 15 October, 07:00 UTC: Circle did not freeze the 2.38 million USDC, and on 14 and 15 October the thief moved it. A wallet that paid gas to both USDC wallets also took 402 ETH from one of the thief's own wallets, so the two USDC wallets were the thief's. Most of the money became USDT on TRON. About $0.7M still sits in the thief's own wallets, where Circle and Tether can freeze it. MediaMarkt Saturn has stopped selling Ledger devices after one implant report. At 06:47 UTC, after our check, the thief began another Tornado Cash run; by 08:20 it had put in 130 ETH more. Section 11 has the details.
Update, 16 October, 15:00 UTC: The thief sent another 2.06 million USDT to TRON. A 2.0 million USDT lot crossed three broker wallets in three minutes and stopped in one, where between 0.6 and 2.0 million USDT of the thief's money still sits and Tether could freeze it. Another 360 ETH went into Tornado Cash, the last 50 ETH at 14:49 to 14:50 UTC. We now count 335 victim wallets, after counting 11 TRON wallets that lost mostly TRX; the dollar total is unchanged. Ledger has asked resellers in Southeast Asia and Hong Kong to pull its devices. Section 11 has the details.
- $102.0M
- 3 seconds
- 2 weeks
- 6 in 10
- $10.0M
- 7,700 ETH
01 · What buyers sawWeeks after setting up a Ledger, the money was gone
You buy a Ledger and move your savings onto it. Weeks later you open the app. The balance says zero, and you never sent a thing.
That is what Ledger owners in Indonesia, Malaysia and the Philippines found on Friday 9 October. Ledger says they had bought their devices from CryptoBilis, a shop that sells them in the region. Ledger's post spells it CryptoBillis in one place, and news reports describe it as an official reseller.
Ledger is a French company that makes hardware wallets, small devices that keep the keys to your crypto away from the internet. On the same day it said it was looking into losses among users in South East Asia who bought from CryptoBilis. It asked the reseller to stop all sales, told recent buyers not to set up their devices, and told anyone who had to "consider moving assets to a new Ledger signer (with new seed)".
By then two on-chain researchers had posted the thief's addresses. tanuki42 listed eight and Specter listed ten, with losses above $86 million. Bitquery records every transfer on the chains involved, so we followed each drained wallet and each address the money reached. Our count is $102.0M from 335 wallets on six chains. It is higher because the thief also emptied wallets on Solana, BNB Chain and Polygon, and used six TRON addresses that no public list includes.
The record points to one actor who held the keys to every one of those wallets. That person practised for two weeks before the drain, and by the evening was feeding the money into a mixer, a service that hides where coins go. The chain cannot show where the keys leaked from. It can show almost everything else.
02 · The key to a crypto walletWhoever has the 24 words owns the coins
When you set up a Ledger, it shows you 24 words, called the recovery phrase. Those words are the master key to your wallet. Anyone who has them can rebuild the wallet on another device and spend from it, on any chain, without touching your Ledger.
The device's job is to make sure nobody else ever sees those words. That is why Ledger tells buyers to buy only from Ledger or an authorised seller, and CryptoBilis was listed as one. A device that arrives opened, or with words already printed on a card, should never be used.
On 10 October Ledger said one victim's device "contained an unauthorized hardware implant". That is the first confirmed cause, and it covers one device so far. On 13 October Ledger's security lab, Donjon, explained how it works. The implant sits inside the case and reads the screen. When the device shows the 24 words during setup, the implant decodes them and sends them out over the mobile network through a built-in SIM. It does not touch the secure chip or the device's software, and it does not change transactions or signatures. Before that, some well-known figures, including Binance founder CZ, had suggested tampered devices. Hardware wallets have been hit before, as in the Coldcard wallet theft we traced earlier this year. Each case had its own cause. What the chain does show is what happened once the thief had the keys.
03 · Forty-seven minutesThe thief hit six chains in one morning
The first money moved on TRON, a network that many people in Asia use to hold and send USDT, the digital dollar issued by Tether. Within 47 minutes the same thief had emptied wallets on Ethereum, BNB Chain, Polygon, Solana and Bitcoin. The full TRON record is in Bitquery's TRON data and the TRON history files on the Data Store.
Most of the money left in the first hour. Then the drains slowed. The thief kept emptying wallets through the afternoon, including after Ledger's post. At 20:49 UTC it emptied nine more in a single block, 8.8 million USDT in all. On 10 October it took 70,000 USDT more from a wallet it had already emptied.
| Time, UTC | Chain | What happened |
|---|---|---|
| 24 Sep, 16:46 | TRON | A Bybit withdrawal of 14,512 TRX reaches the wallet that funds the thief's TRON address the next day |
| 25 Sep, 09:50 and 09:53 | Ethereum, TRON | The thief's two control addresses get their first money, three minutes apart |
| 26 Sep to 7 Oct | TRON, Ethereum | 21 and 20 small test loops |
| 9 Oct, 03:55 | TRON | One wallet adds a second thief key; it loses 4.3 million USDT at 09:49 |
| 9 Oct, 04:59:57 to 05:00:00 | TRON | 30 wallets add the same new key and lose control of their coins |
| 05:07:48 | TRON | 13 wallets sign the same approval; the pulls begin |
| 05:07:49 to 05:07:57 | BNB Chain, Polygon | First drains into the thief's EVM addresses |
| 05:07:51 | TRON | 12 more wallets sign; by 05:07:54 the thief has pulled $29.0M |
| 05:07:59 | Ethereum | First Ethereum wallet signs the same kind of approval |
| 05:09 | Ethereum | Three wallets holding about 300 ETH each are emptied |
| 05:38 to 05:56 | Solana | 4 wallets emptied into fresh addresses, about $250,000 |
| 05:54:20 | Bitcoin | 111 wallets emptied in one block, about 203 BTC |
| 05:55 | TRON | A second public drain address starts taking in USDT; it gets $20.1M |
| 09:33 to 09:49 | TRON | $4.8M taken through an address in no public list |
| 10:26 to 10:30 | TRON | The 30 taken-over wallets are emptied, $5.8M |
| 11:26 to 12:29 | TRON, Ethereum | $4.0M of USDT swapped through Chainflip into 1,590 ETH |
| 12:00 and 12:24 | X | tanuki42 and Specter post the drain addresses |
| 12:09 to 14:10 | TRON | Tether blocks 37 addresses linked to the theft; 20 of them hold $10.0M |
| 13:32 | X | Ledger's statement |
| 15:17 to 15:57 | Ethereum | Three batches, 1,254 ETH, go into Tornado Cash and come back out to six new wallets |
| 15:20 to 18:14 | Ethereum, Zcash | The six wallets swap the ETH into Zcash in 41 lots |
| 15:30 | TRON | Tether lifts the block on four THORChain vault addresses |
| 16:37 | TRON | Another wallet drained |
| 18:17 to 19:53 | Ethereum | The coins come back out of Zcash: 384 ETH and 2.1 million USDC reach three new wallets |
| 20:49:21 | TRON | Nine more wallets are emptied in one block, 8.8 million USDT |
| 10 Oct, 09:42 to 11:56 | Ethereum | Four thief wallets send 1,754 ETH to fresh wallets that feed Tornado Cash |
| 09:50 to 16:12 | TRON | 5.1 million USDD is swapped back to USDT and through THORChain into ETH |
| 10:07 to 10:23 | Ethereum | Tornado Cash run 1, 1,291 ETH |
| 11:11 to 16:40 | Ethereum, Zcash | After a Zcash round trip, NEAR Intents pays 4.29 million USDC to four new wallets |
| 12:13 to 12:17 | Ethereum | Tornado Cash run 2, 445 ETH |
| 13:38 | TRON | The thief takes 70,000 USDT that reached a wallet drained the day before |
| 17:09 | X | Ledger confirms a hardware implant in one victim's device |
| 11 Oct, 07:15 to 12 Oct, 09:30 | Ethereum | The five USDC wallets are emptied: 3.23 million USDC goes to a payment wallet and 1.73 million USDC is swapped into ETH |
| 11 Oct, 08:31 to 12 Oct, 07:10 | TRON, Ethereum | 16 more THORChain swaps turn 16.8 million USDT into ETH |
| 11 Oct, 09:51 to 16 Oct, 13:42 | Ethereum | 16 more Tornado Cash batches, about 4,710 ETH |
| 11 Oct, 13:54 to 12 Oct, 06:36 | Ethereum | NEAR Intents pays 3.63 million USDC to three fresh wallets |
| 11 Oct, 23:37 | Solana | 44.5 SOL is withdrawn from staking and sent on to Binance |
| 12 Oct, 11:31 | Ethereum | One of the three USDC wallets sends 1.25 million USDC to a new wallet, which swaps it into ETH |
| 12 Oct, 13:25 to 17:04 | Ethereum | The thief takes about 1,210 ETH back out of Tornado Cash |
| 12 Oct, 13:33 and 13:52 | TRON | The last 2.0 million USDD goes to THORChain, to be paid out as ETH to a new address |
| 12 Oct, 17:37 to 19:09 | Ethereum | 1,156 ETH from Tornado Cash and 788 ETH from THORChain land in that new address |
| 12 Oct, 23:58 | Solana | The other 228 SOL goes to the same Binance deposit address |
| 13 Oct, 06:25 | TRON | Binance pays 15,527 USDT into another drained wallet; the thief holds its key |
| 13 Oct, 06:39 | X | Ledger explains how the implant copies the 24 words at setup |
| 13 Oct, 12:29 | X | MediaMarkt Saturn stops selling Ledger devices after an implant report in Germany |
| 13 Oct, 22:03 | X | Ledger asks resellers in Southeast Asia and Hong Kong to pull its devices from sale |
| 14 Oct, 06:34 to 08:52 | Ethereum, TRON | The 675 ETH from swapped USDC moves again, mostly into USDT paid out on TRON |
| 14 Oct, 06:57 | Ethereum | A thief wallet sends 402 ETH to the wallet that paid gas to the two USDC wallets |
| 14 Oct, 09:20 to 15 Oct, 05:33 | Ethereum, TRON | The 2.38 million USDC leaves the two USDC wallets and moves on, most of it to TRON as USDT |
| 15 Oct, 06:13 | TRON | The drained wallet that Binance paid on 13 October sends its USDT to a wallet its owner paid in July |
| 15 Oct, 11:20 to 13:05 | Ethereum, TRON | The collecting wallet's last USDC and ETH become 875,000 USDT on TRON |
| 16 Oct, 06:03 to 08:23 | Ethereum, TRON | The 488 ETH bought with the 1.25 million USDC becomes 1.19 million USDT on TRON |
| 16 Oct, 08:41 to 08:44 | TRON | A 2.0 million USDT lot crosses three broker wallets and stops in one |
04 · One person, all the keysTwenty-five wallets signed the same request within three seconds
On TRON the thief did not send each wallet's USDT straight out. First, each wallet signed an approval, a short note that lets another address move its USDT. Then one address used those approvals to pull the money.
The record shows 25 wallets signing the same approval for the same address in two blocks, three seconds apart. Every one of them paid its own small network fee. Within six seconds of the first approval, $29 million in USDT had been pulled out, 7 million USDT of it from a single wallet.
Eleven seconds after the first TRON approval, two Ethereum wallets signed the same kind of approval for a different address, and a third followed twelve seconds later. On Bitcoin, 111 wallets were emptied in a single block at 05:54 UTC, each into one of two addresses at nearly the same fee rate. People do not act like this. Software that already held every key does.
Eight minutes before the approvals, the thief had done something quieter. At 04:59:57 UTC, 30 other TRON wallets changed who controls them, all within three seconds, each paying a 100 TRX fee. Each change added the same new key, TEqZsE…ZxpK, with enough weight to move the coins on its own. The owner's own key was left too weak to act alone. Only a wallet's own key can make that change, so whoever made it already held all 30. The owners were locked out. At 10:26 the thief came back and emptied all 30 in under four minutes, $5.8M in USDT. One more wallet had been taken over an hour earlier, at 03:55, with a second key, which the thief's approval address later sent 100 TRX. That wallet lost 4.3 million USDT at 09:49.
There is one other way to get the same picture. A phishing site could collect signed requests from many people over a day and send them all at once. We tested that idea and rate it unlikely. A signed request to send coins names the exact amount. One business wallet sent its whole balance, 4.3 million USDT, to the thief at 09:49 UTC. It was the wallet taken over at 03:55, and its balance had not changed in between, so the thief already controlled it; nothing about it needed a request signed in advance. A phishing site would also have needed signatures from 335 wallets on six chains, and the drain was in full swing within an hour.
05 · The practice runsTwo weeks of small tests before the drain
The address that pulled the USDT on TRON was set up on 25 September. Three minutes earlier, the address that did the same job on Ethereum got its first money.
For the next two weeks both ran the same test. Send a wallet a few dollars and some gas, the coin it needs to pay network fees. Have that wallet approve. Pull the dollars back. The TRON address did it 21 times and the Ethereum address 20 times. The last two tests, on 7 October, ran 23 seconds apart.
One test, on 2 October, pulled its three dollars into an address that later took $36 million on the day of the drain. The plan was in place a week before anyone lost a coin.
06 · How much was takenMore than first counted, on more chains
We counted only money that left a victim's wallet. That leaves out swaps the thief made later and money moved between the thief's own wallets, which some early totals counted twice.
| Chain | Victim wallets | Taken | US dollars |
|---|---|---|---|
| TRON | 151 | 79.0M USDT, plus some TRX | $79.3M |
| Bitcoin | 122 | 203.8 BTC | $16.8M |
| Ethereum | 33 | 1,230 ETH, $577,000 in USDT and USDC, 10 billion PEPE | $3.7M |
| BNB Chain | 27 | $1.41M in USDT and USDC, 59.8 BNB | $1.45M |
| Polygon | 13 | 579,773 USDC | $0.58M |
| Solana | 4 | 1,355 SOL and 100,000 USDT | $0.25M |
| All chains | 335 | Some wallets were drained on more than one EVM chain, so 58 EVM wallets in all | $102.0M |
On Bitcoin, Ethereum and TRON, the ten public addresses received $85.4M, close to Specter's estimate. Three amounts are in no public tally. The thief took $2.0M on BNB Chain and Polygon, into the same three addresses it used on Ethereum. On TRON it used six more addresses to drain $15.1M, three of them after Ledger's post. The last, $0.25M, came from Solana.
Between 05:38 and 05:56 UTC the thief emptied four Solana wallets of 1,355 SOL and 100,000 USDT into three fresh addresses. Through Relay.link and NEAR Intents the money became ETH and landed in three of the thief's Ethereum wallets. The two services' public records tie each deposit to its payout. A fifth wallet, which the thief swept of a few cents of SOL at 06:05, had 272 SOL staked. Whoever holds its key can unstake those coins and take them, which takes up to about a day.
One public list also names a third Bitcoin address. It behaved differently, and we leave it out. It started two days earlier, drained old wallets one at a time, paid much lower fees and shared no wallets with the main two. It took 9.6 BTC from 154 addresses, about $0.8M of the $85.4M above. Early on 10 October it sent all of it on to fresh addresses.
07 · Who lost moneyMost wallets were new, but not all fit Ledger's 90 days
Ledger's advice covers people who bought from the reseller in the last 90 days. We checked when each TRON, Bitcoin and Ethereum victim wallet first received money. Of those wallets, 6 in 10 got their first coins inside that window, and more than 8 in 10 got them from June onward.
June stands out. In that month alone, 43 TRON victim wallets got their first coins, just before the 90-day line. A wallet's first payment is not the day its owner bought a device, so this is not proof. But it suggests the risk may reach back about four months, and owners who bought in June should treat Ledger's advice as theirs too.
The money came from the places you would expect for buyers in the region. Bitcoin victims had been paid from Binance, Indodax in Indonesia, OKX and Bybit. Two victims were already named on X by Lookonchain, and the record backs both. One TRON wallet, first funded on 15 September, lost 7 million USDT in the first wave. One Bitcoin wallet got 80 BTC on 29 September and lost all of it in the block at 05:54.
At least one victim was a business. One drained TRON wallet had taken in 33.5 million USDT since 1 October and paid most of it out again to 29 different wallets, the pattern of a business.
Not every victim was an ordinary buyer. On 15 October Chainalysis reported that one of the larger Bitcoin victims was running a task scam, in which people were paid to fake sales and reviews and then told to pay in money of their own. The part we can check on the chain matches. Three of the drained Bitcoin addresses each got two equal payments from one wallet on the evening of 22 September, and the thief emptied all three in the big Bitcoin block of the drain, 60 BTC in all, about $4.9M.
08 · Where the money wentInto bridges, swap services and a stablecoin Tether can't touch
Almost all the TRON money was in USDT, which Tether can freeze. The thief moved fast to get it out of reach, and in the first hours the dollars scattered.
The biggest share, 20 million USDT, crossed to Ethereum in 40 equal pieces through the USDT0 bridge, a service that moves USDT between chains. Five fresh wallets swapped it on UniswapX for 7,994 ETH. Another 23.7 million was swapped into USDD, a different stablecoin that Tether cannot freeze. Most of the rest went through swap services such as Relay.link, Chainflip, HiFiSwap and NEAR Intents, which paid the thief back in ETH. We traced the same pattern in the NEAR Intents theft and the $110 million TRON laundering case. Each payout here can be followed wallet by wallet with the Bitquery MCP.
09 · Where it sat on 10 OctoberAbout $97M could still be found
These are the balances at 07:00 UTC on 10 October. The Bitcoin had not moved since it was taken. The largest pile was about 17,247 ETH in 16 wallets on Ethereum, most of it bought with the stolen USDT. About 1,590 ETH came through Chainflip, a swap service, and nearly all of that sits in one wallet that has never sent a transaction. The 23.9 million USDD sat in nine wallets on TRON. That is a little more than the USDT swapped in section 08, because the thief also turned stolen TRX into USDD. The coins that went through Tornado Cash sat in three more wallets: 384 ETH and 2.1 million USDC. That left about $5M that had been spent through other services or that we have not yet followed to the end. By 14:40 UTC on 16 October, the money we can find had fallen to $81M. You can watch any of these wallets yourself with the Bitquery MCP, and the full histories are sold as files for Bitcoin and Ethereum.
10 · Tether's freeze, then the mixer$10.0M frozen, and the mixed coins found again
Tether can block any address that holds its USDT. About ten minutes after the first public post, it started blocking addresses linked to the theft, 37 of them over the next two hours. Twenty still held half a million USDT each, so $10 million is now stuck. A block stops the coins moving. It does not send them back to victims, though Tether can later destroy blocked coins and reissue them. News sites reported the freeze the same afternoon.
At 15:30 UTC Tether lifted the block on four wallets. They are THORChain's TRON vaults, the addresses where the THORChain swap service takes in USDT from many users. The thief had sent them about $3.0M to swap into ETH, and the ETH went to two wallets that then funded several of the thief's holding wallets.
From 15:17 UTC the thief began sending ETH into Tornado Cash, a mixer that breaks the link between the wallet that pays in and the wallet that later takes out. Three batches of about 400 ETH each went in within 40 minutes, 1,254 ETH in all. The mixer hid little. Withdrawals matching each deposit, pool for pool, went to six fresh wallets, the first of each batch within about a minute.
Those wallets swapped the ETH into Zcash in 41 lots. Zcash can hide the sender, receiver and amount of a payment. But 39 of the 41 lots came out again as two equal payments, and their amounts match the lots that went in, down to the smallest unit of Zcash. The other two were tiny test lots. By 19:53 UTC the coins had been swapped back and sat in three new Ethereum wallets: 384 ETH and 2.1 million USDC. Circle, which issues USDC, could freeze that part. A mixer means the link cannot be proven outright, but we rate it strong. The analyst YFarmX found this path first, and we checked it against our own data. Our Tornado Cash audit explains how the mixer works.
11 · Since 10 OctoberThe stablecoins went into ETH, and the mixing went on
The money we can find on the chain fell from $97M at our first count to $81M six days later. Most of the difference is money still passing through Tornado Cash and Zcash, or paid to a busy payment wallet and swap services.
| What | At 07:00 UTC on 10 October | At 14:40 UTC on 16 October |
|---|---|---|
| Bitcoin in the two drain addresses, never moved | 203.8 BTC | 203.8 BTC |
| ETH in the thief's wallets | 17,247 ETH | 21,539 ETH |
| USDD on TRON, which Tether cannot freeze | 23.9 million USDD | none |
| Unfrozen USDC and USDT in the thief's own wallets | 2.1 million USDC | 200,000 USDC and 93,000 USDT |
| USDT frozen by Tether | $10.0M | $10.0M |
| ETH sent through Tornado Cash so far | 1,254 ETH | about 7,700 ETH |
| Can still be found on the chain | $97M | $81M |
On 10 October four of the thief's Ethereum wallets sent out 1,754 ETH. One of them, 0xc322…4065, was missing from our first count. It got 794 ETH the day before from the same two wallets that paid three of the thief's known holding wallets, and our figures now include it. Most of that ETH went into Tornado Cash in two runs. Matching withdrawals started within minutes and went on to NEAR Intents in 28 lots, which swapped each lot into Zcash. Each lot came out of Zcash's private pool as two equal halves that together kept 99.75% of the lot. NEAR Intents then paid USDC for each half into four new wallets, 4.29 million USDC in all. YFarmX spotted two of the four wallets first.
That USDC did not wait for Circle. Within two days all five USDC wallets had emptied, including the first one. Most of it, 3.23 million USDC, went to a busy payment wallet that had also taken 1.06 million USDC from the thief a day earlier. The thief swapped another 1.73 million USDC into 675 ETH and sent the rest to the swap services Aeroswap and Bridgers. The ETH moved again on 14 October, most of it into USDT on TRON through the same payment wallet.
The stablecoins on TRON took another road. The thief turned its USDD back into USDT through single-use addresses and sent it to THORChain's vaults, each time with a note naming the Ethereum address that should get the ETH. Counting the swaps of stolen USDT on the first day, it sent THORChain 26.9 million USDT in 34 swaps, and THORChain paid out 10,636 ETH. Most of that ETH, 8,934 ETH, still sits in seven new wallets, and some of it went into Tornado Cash. One of the seven also holds ETH that came back out of Tornado Cash. The thief sent its last 2.0 million USDD the same way, so no USDD is left on TRON.
The mixing went on. Over the next six days the thief put about 4,710 ETH more into Tornado Cash. By our last check, 2,290 ETH had come back out and gone through NEAR Intents into Zcash's private pool.
On the afternoon of 12 October the thief took about 1,210 ETH back out of Tornado Cash. Most of it passed through a middle wallet into the new address that THORChain paid for the thief's last USDD swaps. That address now holds 1,944 ETH. So the withdrawals we had matched to the thief by their pattern meet its THORChain money in one wallet. On 13 October the thief also swept the last ETH, worth under $200, from two of its public drain addresses on Base into the wallet that fed Tornado Cash that morning, which puts the drain keys and the Tornado runs in one person's hands. Since 15 October it has also used Railgun, another privacy tool, though only for small sums. Nothing has come back out of Tornado Cash in the thief's pattern since 12 October. We estimate that about 1,190 ETH of its coins is still inside Tornado Cash.
Three fresh wallets got what came out of Zcash. NEAR Intents paid them 3.63 million USDC on 11 and 12 October, each batch starting within hours of one of the thief's Zcash deposits, as on 10 October. For one of the three, each payment matches one half of a pair of equal Zcash withdrawals. By the next morning one more pair of the same kind had come out, and together the pairs add up to 99.6% of what the thief put into Zcash that evening. Around midday on 12 October another of the three sent its 1.25 million USDC to a new wallet, which swapped it into ETH through the Bitget Wallet route the thief had used that morning. The third got gas four minutes later. Two days on, the wallet that paid that gas took 402 ETH straight from one of the thief's own wallets, and it also paid gas to the wallet whose payments matched the Zcash halves. On 14 October the wallet that had cashed out sent its leftover ETH to the wallet that collected the third one's USDC, moments after the third did the same. That ties all three to the thief.
Circle did not freeze the 2.38 million USDC that the other two wallets held, and the thief then moved it. Most of it went to TRON as USDT through the busy payment wallet, which takes USDC on Ethereum and pays USDT on TRON, and through Bridgers, deBridge and Aeroswap. With the ETH from the swapped USDC, about 2.77 million USDT reached new TRON wallets. From there most of it went into busy TRON wallets that behave like brokers: they take a client's money, round it up and pay it out in pieces. The thief swapped 554,000 USDC into ETH. On 15 and 16 October the thief sent the rest of the collecting wallet's USDC and ETH, and the 488 ETH bought with the 1.25 million USDC, to TRON as another 2.06 million USDT. Most of it went through a chain of broker wallets within minutes. One lot of 2.0 million USDT stopped in a single storage wallet of that network, which also holds other clients' money; between 0.6 and 2.0 million USDT of what it holds is the thief's. Some of it may have reached Binance deposit addresses: up to 0.37 million USDT by the tracing rule we use, but close to none if the oldest money in each broker wallet is counted as leaving first. At our last check 200,000 USDC and 93,000 USDT still sat in the thief's own wallets, where Circle and Tether can freeze them.
One victim lost money again. The thief still holds the key of a TRON wallet it emptied in the drain. That wallet's usual payer had sent it USDT every day since 4 October and kept paying after the drain. The day after the drain, 70,000 USDT arrived in the afternoon, and ten minutes later the thief pulled it out through the USDT approval the wallet had signed the day before. No payment has arrived since. On 13 October Binance paid USDT into another drained wallet, and the thief holds that key too. Two days later, after a second payment arrived, the wallet itself sent all its USDT to a wallet its owner had paid in July, most likely the owner moving it out. A drained wallet stays in the thief's hands, so anything sent to it can be taken again.
On Solana, someone using the key of the fifth wallet, most likely its owner, unstaked all six of its stake accounts. Binance had sent the wallet a little SOL for fees four minutes before the unstaking began. Late on 11 October the first 44.5 SOL went to a Binance deposit address first used in February 2024, at the exchange that had also paid this wallet in April. The other 228 SOL went the same way a day later.
Nothing else moved: not the Bitcoin, and nothing on BNB Chain or Polygon. Apart from the one victim above, we found no new drains.
12 · The leadsWhere investigators could ask for records
The chain can't name the thief. It does show places that keep records about their users.
| Lead | What the chain shows | How strong |
|---|---|---|
| Bybit | A withdrawal of 14,512 TRX on 24 September (b284a2…686e) reached the wallet that set up the thief's TRON address the next day | Strong on the money flow |
| Aeroswap | Paid 0.031 ETH five minutes after that withdrawal to 0x444f…2d99, which set up the thief's Ethereum address | Moderate |
| Circle and Tether | 200,000 USDC sits in 0xd151…bdaf and 0xe4b7…2f3a; 93,000 USDT in TLocic…U9Ps | Strong link; Circle and Tether can freeze |
| THORChain | The thief swapped 26.9 million USDT into ETH through THORChain's TRON vaults in 34 swaps from 9 to 12 October. Each swap names the Ethereum address that gets the ETH | Strong on the money flow |
| CCE Cash | A hot wallet that our labels name CCE Cash funded the thief's TRON gas wallets on 11 and 12 October | Moderate: the exchange knows who withdrew |
| HitBTC | 313 ETH from the mixed coins reached six HitBTC deposit addresses on 10 October | Moderate: the account may belong to a swap service |
| A cash desk | 0x08ec…31a7 takes USDC and USDT on Ethereum and pays USDT on TRON from TZG47z…MrvF, which also took $3.7M of the thief's USDT on 9 October. The thief sent the desk 1.06 million USDC on 10 October, 3.23 million USDC on 11 and 12 October $2.39M on 14 October and $1.66M of USDC and ETH on 15 and 16 October | Moderate: the desk can name the client behind each payout; it also pays a Bitget deposit address |
| Chainflip | $4.0M of USDT went in through deposit channels opened in Chainflip's own web app; Chainflip's TRON vault is TEcDij…Y4XC. It paid out 1,590 ETH | Channel records name the payout wallets |
| NEAR Intents | Handled both ends of the Zcash swaps from 9 to 12 October. It paid the seven wallets that got the mixed coins on 9 and 10 October, and three more on 11 and 12 October that later paid or took gas from the thief's own wallets | Order records link each deposit to its payout |
| TRON brokers | Busy wallets such as TQvTAS…jbXy and TWRAED…QrHQ took most of the thief's new USDT from 14 to 16 October and paid it on in pieces. On 16 October a 2.0 million USDT lot crossed three of them in three minutes and stopped in TW3myE…i6PM, which still holds between 0.6 and 2.0 million USDT of the thief's money among other clients' funds. Up to 0.37 million USDT may have reached Binance deposit addresses, depending on how pooled money is counted | Moderate: they serve many clients; Tether could freeze the storage wallet |
| Swap services | Relay.link, HiFiSwap, NEAR Intents, Mayan, LI.FI, Bridgers and ChangeHero (47 ETH on 10 October) each handled part of the money | Order records may hold refund addresses and other details |
| Gate.io | 60 BNB reached a Gate.io deposit through a trader's wallet that had paid that deposit 55 times since July 2024 | Weak: the trader looks like a paid counterparty |
Circle and Tether can still act, on less money than before. The thief moved the USDC we had flagged before Circle could freeze it. About $0.3M still sits in the thief's own wallets. Most of the USDT the thief has sent to TRON since it moved the USDC went to brokers there, who may know their clients. One broker wallet still holds between 0.6 and 2.0 million USDT of it.
The strongest lead to the person behind this is how the gas was paid for. The TRON address that ran the drain was funded from an address that had withdrawn 14,512 TRX from Bybit the day before. An exchange that sends a withdrawal knows the account it came from. The Ethereum side was funded through Aeroswap, an instant swap service, five minutes after that withdrawal. Other leads are weaker. Money from an exchange shows where funds came from. It does not show who owns the wallet that got them. The same caution applies to a trader who received the thief's BNB and moved it to Gate.io. We show how such dead ends happen in our piece on an $812 million wallet nobody flagged.
On the day of the drain, none of the thief's wallets carried a theft label in the label sets we use, so an exchange screening deposits against such labels would not have caught this money. Late on 12 October our label set marked 32 of the 37 TRON wallets Tether had blocked. The thief's other wallets, including those holding the ETH, still carry no theft label.
13 · What we know and what to doOne implant confirmed. The rest is still open
Here is what the chain settles. One actor held the keys to every drained wallet. It tested the method for two weeks, locked 31 owners out of their TRON wallets, then ran the drain across six chains in under an hour. Here is what it can't settle: how each wallet's keys leaked. Ledger has found an implant in one device and has shown how it copies the 24 words at setup. Ledger says all confirmed losses involve devices sold through CryptoBilis, and it is looking into reports of implants in devices bought elsewhere. On 13 October the electronics chain MediaMarkt Saturn stopped selling Ledger devices after a customer in Germany reported an implant. Ledger said no loss of funds was reported in that case. Later that day Ledger asked resellers in Indonesia, Singapore, Thailand, the Philippines, Vietnam, Malaysia and Hong Kong to stop selling its devices and take them off the shelves while it finds out where in the supply chain the tampering happened. Whether every drained wallet came from a tampered device, or some keys leaked another way, will come from Ledger's look at more devices. Ledger has not confirmed how much was lost in total, and has not checked our count.
If you bought a Ledger from CryptoBilis, follow Ledger's advice, even if you bought it before July. Don't set up a device you have not used yet. If you already use one, set up a new device with a new recovery phrase and move your coins to it. Never use a device that arrives with words already written down. If you hold USDT on TRON, check your wallet's permissions in a block explorer. A key you do not recognise means someone else now controls the wallet. If your wallet was drained, ask anyone who pays into it to stop, because the thief still holds the key. Ledger says it will never call or message you or ask for your 24 words, and scammers often target victims after a theft like this. Similar lessons came out of the Bitget hack and the TradeWiz drain: once someone else holds your keys, the coins can be gone in seconds.
| Claim on X | Who said it | What the chain shows |
|---|---|---|
| Losses above $86M | Specter | Close: the ten public addresses got $85.4M. All in, we count $102.0M |
| Tether froze USDT linked to the thefts | News reports | Confirmed: $10.0M frozen in 20 wallets |
| A victim lost 7M USDT three weeks after buying | Lookonchain | The wallet was first funded on 15 September and lost 7,001,000 USDT at 05:07:54 |
| A victim lost 80 BTC | Lookonchain | 80 BTC arrived on 29 September and was swept in the block at 05:54 |
| The theft wallets are not labelled anywhere | Security researcher Tay | True of the label sets we checked, on the day |
| Devices were tampered with | CZ and others | Ledger found an implant in one victim's device on 10 October and explained how it works on 13 October. The chain cannot test the rest |
| The Tornado Cash coins went through Zcash into three new wallets | YFarmX | Strong: 74 notes out match 74 in, the Zcash amounts match to the smallest unit, and the coins reached three new wallets as 384 ETH and 2.1 million USDC. Two of the three paid out on 10 October |
| 2,810 ETH went through Tornado Cash in three runs and came out as USDC in three wallets | YFarmX | Partly right: 2,810 is the withdrawals their tool matched. We count 2,990 ETH in and matched all of it out, in three batches on 9 October and two runs on 10 October. Two more wallets got USDC from the 10 October runs, so five wallets got 5.35 million USDC, which the thief moved on 11 and 12 October |
| Theft now about $91M, 213.42 BTC | Alex Thorn | Close: his Bitcoin count includes a third address that we treat as a separate operation. Without it, 203.8 BTC |
14 · How we did thisMethod
We started from the ten addresses posted by tanuki42 and Specter. We read every payment into and out of them on TRON, Bitcoin, Ethereum, BNB Chain and Polygon from Bitquery's data, and followed the money until it reached a service, a frozen wallet or a wallet that has not moved. On Solana, which no public list covered, we matched Relay.link and NEAR Intents payouts into the thief's Ethereum wallets to Solana deposits, then traced those deposits back to the wallets that were drained. Solana victims whose money took another route would not show up this way. For swaps we also read the public order records of Chainflip, Relay.link and NEAR Intents, and for Zcash the visible side of each payment. We left out money the thief moved between its own wallets, payouts from swap services, and fake tokens sent by scammers who copy addresses. Dollar values use prices from the morning of 9 October. A second, independent check rebuilt every figure from the raw data without seeing our notes. The data stops at 14:40 UTC on 16 October, except for the dated moves in the box at the top. The thief may have moved since. Our address poisoning study explains why copied addresses fill these wallets with fake transfers, and Bitquery's address labels are the label set we checked first.
Sections 01 to 10 use balances read at 07:00 UTC on 10 October. Section 11 uses balances read at 14:40 UTC on 16 October. The thief can move money at any time.
The 16 October figure leaves out about 1,190 ETH we estimate is still in Tornado Cash, the part of the 4,546 ZEC sent into Zcash that has not come back out, and 190,000 DAI in two wallets we tie to the thief less firmly.
The busy TRON wallets that took most of the thief's USDT from 14 to 16 October also hold other people's money. The 16 October figure counts only the thief's own wallets, not the 0.6 to 2.0 million USDT of the thief's that sits in a broker's storage wallet.
We estimate the ETH left in Tornado Cash by matching the thief's withdrawals to its deposits note by note. It would be lower if the thief also used a withdrawal style we did not recognise.
We found the 20:49 drain on 12 October. Its nine wallets were funded by what looks like one owner, and we count them as nine wallets.
Our first count missed one holding wallet, 0xc322…, which held 794 ETH on 9 October, and a change wallet with 12 ETH. Both are now in the figures.
The $102.0M counts the drain of 9 October. The 70,000 USDT taken on 10 October is not in it.
Tornado Cash and Zcash hide the direct link between the coins that went in and the coins that came out. We tie the seven end wallets of 9 and 10 October to the thief by matching amounts and times, which is strong evidence but not proof. We tie the three wallets paid on 11 and 12 October to the thief through direct payments. A gas wallet that took 402 ETH from a thief wallet paid the gas of two of them. The third sent its leftover ETH to the thief wallet that collected one of the other two's USDC. The 402 ETH came from USDC that one of the 10 October end wallets swapped, so this tie is as strong as the tie for those wallets.
THORChain's TRON vaults handle many users' swaps. We count only the payments that carry the thief's swap instructions as the thief's.
Dollar values use prices from the morning of 9 October: BTC $82,300, ETH $2,490, TRX $0.33, BNB $742, SOL $110.40. USDT, USDC and USDD are counted at $1.
We count money that left a victim's wallet. Payouts from swap services into the thief's addresses, money the thief moved between its own wallets, and fake tokens sent by scammers who copy addresses are left out.
A victim wallet is not a victim person. One owner can have several wallets, and some EVM wallets were drained on more than one chain.
On TRON and Solana we count a wallet as a victim when it lost at least $10 in any coin. A few TRON wallets lost less; their coins are in the dollar total but not in the wallet count. On 16 October we applied that rule to 11 TRON wallets that lost mostly TRX, which raised the TRON count from 140 to 151 and the total from 324 to 335; the dollar total did not change. On Solana the thief also swept four near-empty wallets of a few cents each. On the EVM chains we count every wallet the thief swept, however small the amount.
The first payment into a wallet tells us when it started to be used. It does not tell us when its owner bought a device.
We also checked the thief's Ethereum addresses on 14 other EVM chains, and looked for drained victim wallets on XRP, Cardano, Litecoin, Dogecoin, Dash and Zcash. We found only a few hundred dollars, on Base and Arbitrum, and left it out.
A fifth Solana wallet, swept of a few cents and not in our count, had 272 SOL staked in six stake accounts on 10 October. By the early hours of 13 October all of it had gone to a Binance deposit address, most likely sent by its owner.
Exchange and service names come from Bitquery's address labels and from how the money behaves. A payment from an exchange shows where money came from. It does not show who owns the wallet that received it.
We could not find the source of a few small payouts into the thief's Ethereum wallets, and we have not followed every payment past the first service it reached.
| What | Address or transaction |
|---|---|
| TRON drain address (public) | TK6DWN…XT6C |
| TRON drain address (public) | TBkcUM…s9d9 |
| TRON drain address (public) | TCGE3x…MNsW |
| TRON drain address (public) | TSDWtu…Ar5a |
| TRON drain address (not in public lists) | TYohhJ…UfGj |
| TRON drain address (not in public lists) | TELKRM…ZznW |
| TRON drain address (not in public lists) | TQoTZG…P9FQ |
| TRON drain address (not in public lists) | TRTVHp…2bzE |
| TRON drain address (not in public lists) | TRMHXE…GpDQ |
| TRON drain address for the 20:49 drain | TRu643…D2pY |
| TRON USDD wallet (from the 20:49 drain) | TFxdck…ciNP |
| TRON USDD wallet (from the 20:49 drain) | TMGrwE…mZcw |
| Thief's TRON control address | TAzdU7…CSYQ |
| Key added to 30 TRON wallets at 04:59:57 | TEqZsE…ZxpK |
| Wallet that funded it from Bybit | TWGHw7…Bf3E |
| EVM drain address (public; also used on BNB Chain and Polygon) | 0x69c8…7841 |
| EVM drain address (public; also used on BNB Chain and Polygon) | 0x0336…4f7a |
| EVM drain address (public; also used on BNB Chain and Polygon) | 0x83ae…a599 |
| Thief's Ethereum control address | 0x3818…f8f2 |
| Solana collection address (passed the SOL to MhhUk3…) | 6Lx2Ma…TVUy |
| Second Solana address (sent to Relay.link) | MhhUk3…qevh |
| Solana collection address (sent to NEAR Intents) | CA9Epb…B7Ym |
| Solana collection address (sent to NEAR Intents) | HuRSMp…Q4mk |
| ETH holding wallet | 0x468b…2a4e |
| ETH holding wallet | 0xfa4e…b0e2 |
| ETH holding wallet | 0x064a…7160 |
| ETH holding wallet | 0xb88d…1856 |
| ETH holding wallet | 0x131c…fa6a |
| ETH holding wallet | 0x40eb…e88c |
| ETH holding wallet (small; emptied 9 October) | 0x9400…40d6 |
| ETH wallet found 10 October (emptied 11 October) | 0xc322…4065 |
| ETH holding wallet (THORChain, via a forwarding wallet, 10 October) | 0x3b2f…fd70 |
| ETH holding wallet (THORChain, via a forwarding wallet, 11 October) | 0x5a71…b726 |
| ETH holding wallet (paid through THORChain, 11 October) | 0xa2f0…7a87 |
| ETH holding wallet (THORChain, via a forwarding wallet, 11 October) | 0x6170…51e2 |
| ETH holding wallet (paid through THORChain, 12 October) | 0x88bd…b929 |
| ETH holding wallet (paid through THORChain, 12 October) | 0x5054…678b |
| Wallet that held ETH from swapped USDC (emptied 14 October) | 0x89b0…f964 |
| Wallet that held ETH from swapped USDC (emptied 14 October) | 0xda9e…9fc2 |
| ETH change wallet for the Tornado Cash runs | 0xe8cb…8879 |
| ETH holding wallet (paid by Chainflip) | 0x9888…0444 |
| ETH wallet paid by Relay.link (emptied 11 October into Tornado Cash) | 0x3001…f441 |
| Small ETH wallet (paid by Chainflip) | 0x9862…6481 |
| Small ETH wallet (paid by Chainflip) | 0xbdb5…c393 |
| Small ETH wallet (paid by Chainflip) | 0x03fa…2fc0 |
| Wallet that got mixed coins after Zcash (emptied 10 October) | 0xc164…9545 |
| Middle wallet for its 1.06 million USDC | 0x85dd…1a7e |
| Wallet that got mixed coins after Zcash (emptied 11 October) | 0xe2fc…9c11 |
| Wallet that got mixed coins after Zcash (emptied 10 October) | 0x33fd…700b |
| Wallet that got mixed coins after Zcash, 10 October (emptied 11 or 12 October) | 0x816d…cdf8 |
| Wallet that got mixed coins after Zcash, 10 October (emptied 11 or 12 October) | 0xba73…f3f3 |
| Wallet that got mixed coins after Zcash, 10 October (emptied 11 or 12 October) | 0x0c54…ee52 |
| Wallet that got mixed coins after Zcash, 10 October (emptied 11 or 12 October) | 0x901b…9855 |
| ETH wallet paid by THORChain and fed from Tornado Cash, 12 October | 0xb6af…a9c8 |
| Middle wallet between Tornado Cash and 0xb6af…, 12 October | 0x04e8…7203 |
| Wallet holding ETH withdrawn from Tornado Cash, 12 October | 0x6bc4…e9c7 |
| USDC wallet paid by NEAR Intents, 11 October (emptied 14 October) | 0x4600…2a6a |
| USDC wallet paid by NEAR Intents, 11 and 12 October (emptied 14 October) | 0x3635…ee17 |
| Wallet that held ETH from 0x17e1's swapped USDC (emptied 16 October) | 0xabb2…28b4 |
| Gas wallet of both USDC wallets; took 402 ETH from a thief wallet | 0x5a93…5108 |
| Wallet that collected 0x4600's USDC (emptied 15 October) | 0x50b4…1e8b |
| Wallet holding 100,000 USDC, 14 October | 0xd151…bdaf |
| Wallet holding 100,000 USDC, 14 October | 0xe4b7…2f3a |
| TRON wallet that collected the thief's USDT (emptied 15 October) | TBJfyg…7pgp |
| Wallet that sold 0xabb2's 488 ETH, 16 October | 0x06e5…a714 |
| TRON wallet that collected the thief's USDT, 15 and 16 October | TGr5w5…DnME |
| TRON broker storage wallet holding thief USDT, 16 October | TW3myE…i6PM |
| Tornado Cash feeder, 15 October | 0x2e3f…3351 |
| Tornado Cash feeder, 16 October | 0x9121…f9e8 |
| TRON wallet holding the thief's USDT, 14 October | TLocic…U9Ps |
| USDC wallet paid by NEAR Intents, 11 October (emptied 12 October) | 0x17e1…5d78 |
| Bitcoin drain address (public) | bc1qjq…49dl |
| Bitcoin drain address (public) | bc1qqn…jtm9 |
| Bitcoin address in one public list, likely a separate operation | bc1qgq…d26n |
Follow the stolen money in plain English
Every transfer, approval and balance in this story comes from Bitquery's data for the six chains involved. The Bitquery MCP server puts that data behind an AI assistant, so you can ask where a wallet's money went or what labels an address carries, without writing the query yourself. The full histories are also sold as files on the Bitquery Data Store, for TRON, Bitcoin, Ethereum, Solana, BNB Chain and Polygon.
FAQ
Was Ledger hacked?
Ledger says its own systems show no sign of a breach. On 10 October it said one victim's device "contained an unauthorized hardware implant", and on 13 October it said the implant copies the 24 words off the screen during setup. Wallets of people who bought Ledger devices from the reseller CryptoBilis were drained by someone who held their keys, and CryptoBilis has stopped selling hardware wallets while Ledger investigates.
What is CryptoBilis?
CryptoBilis, also spelled CryptoBillis, is a crypto hardware shop that sells Ledger devices in Indonesia, Malaysia and the Philippines. News reports describe it as an official Ledger reseller. On 9 October 2026 Ledger asked it to stop all sales and shipments of Ledger devices while it investigates.
How much was stolen in the Ledger CryptoBilis hack?
We count $102.0M taken from 335 wallets on TRON, Bitcoin, Ethereum, Solana, BNB Chain and Polygon. Most of it was USDT on TRON. Early counts of about $86 million covered only the ten public addresses.
Can a Ledger be hacked?
The device is built so the recovery phrase never leaves it. If someone else gets that phrase, they control the wallet without the device. That can happen through a tampered device, a pre-printed recovery card, a fake app or a phishing site. In this case the thief clearly held the keys. Ledger found a hardware implant in one victim's device that reads the 24 words off the screen during setup and sends them out over the mobile network. Whether every key leaked that way is not yet known.
Is my Ledger safe if I bought it from a reseller?
If you bought from CryptoBilis, follow Ledger's advice: don't set up an unused device, and move your coins to a new device with a new recovery phrase. Many victim wallets were first funded in June 2026, before Ledger's 90-day window, so earlier buyers should take the same step. MediaMarkt Saturn in Europe also stopped selling Ledger devices on 13 October after one implant report, while the investigation continues. If you bought a Ledger from any reseller in Southeast Asia or Hong Kong, Ledger has asked those sellers to pull their stock, so treat an unused device from them with the same care.
Can the stolen crypto be recovered?
About $10 million in USDT is frozen by Tether, which can later reissue frozen coins. The Bitcoin has not moved, and most of the ETH still sits in known wallets. The first USDC that came out of the mixers was moved on before it could be frozen, and the thief later moved the USDC we flagged as well. About $0.3M in USDC and USDT still sits in the thief's own wallets, where Circle and Tether can freeze it. The thief sent all its USDD through THORChain to be swapped into ETH.
Is this the same as the 2023 Ledger hack?
No. In December 2023 a fake version of Ledger's Connect Kit code library drained people who used certain crypto websites for a few hours. In 2020 a breach exposed customer emails and home addresses. This case is different: the thief held the recovery keys of hundreds of wallets and emptied them directly.
This article is provided for informational and educational purposes only and reflects analysis of publicly available on-chain data as of the dates indicated. It does not constitute legal, financial, compliance, or investment advice, and nothing in it is a recommendation to buy, sell, or hold any token or asset.
The findings describe transfers, approvals and balances observed on TRON, Bitcoin, Ethereum, Solana, BNB Chain and Polygon between 24 September and 16 October 2026. Attributions come from Bitquery's address labels and from on-chain behaviour; they may be incomplete or incorrect and may be revised as more data becomes available.
References to Ledger, CryptoBilis, Tether, Bybit, Binance, Gate.io, Aeroswap or any other named company, service or protocol describe what the record shows about addresses and transactions linked to them. They are not statements about any party's security practices, compliance or conduct, and nothing here asserts that any named party acted unlawfully or negligently. The wallets that received the drained funds are described by their behaviour and attributed to nobody.
Nothing herein should be relied upon as a definitive determination of fact. Readers should conduct their own independent verification before taking any action. The authors and publisher accept no liability for any loss or damage arising from reliance on this material. All trademarks and company names are the property of their respective owners.
Reported by Gaurav Agarwal for Bitquery Research, with AI tools; every figure was checked against the raw data.
Run the next investigation in minutes
Ask any question of the blockchain. Bitquery's AI Investigations agent traces funds, attributes wallets, and writes auditable reports across every major chain. Prefer to do it yourself? Connect the Bitquery MCP server to your AI assistant, pull the raw datasets, or query the chain directly with the Bitquery API.