InvestigationExchange hackBitgetUpdated Sep 30

Bitget hack: how $387M left, and where it is now

It started with a 93 TRX test on Tron. We checked all 23 transfers out of Bitget, each on its own chain, from that first test to the last, and followed the money over the six days that came after.

Live story. Balances below are as of 09:10 UTC on September 29, 2026, and the Zcash figures as of 11:59 UTC on September 30. Bitget said a full incident report would follow within 24 hours; on September 30 it shared the findings of the two firms it hired (section 08). We will add dated lines here as the money moves.
Update, September 25, 10:40 UTC: The attacker has now moved almost all the stolen TRX and BNB, and part of it has already been swapped into Bitcoin. Sections 06 and 07 show the routes.
Update, September 25, 11:11 UTC: The attacker's Tron wallet is now empty. The ETH that went through Chainflip came out as 13.22 BTC, so every exit we have traced to its end so far lands in Bitcoin.
Update, September 25, 11:55 UTC: By our count, 106.54 BTC, about $9.1 million, has now been paid out in Bitcoin for stolen BNB and TRX. Section 06 breaks it down.
Update, September 25, 14:34 UTC: Tether has frozen 239,113 USDT in two attacker wallets. On the XRP Ledger, one attacker account has started sending XRP out in chunks, 4.64 million XRP so far. Our Bitcoin count is now 126.71 BTC.
Update, September 26, 02:54 UTC: Bitget now puts the loss at about $387.5 million, after finding more stolen ZEC and TRX. A wallet paid from Binance sent 457.9 ETH into the attacker's main Ethereum wallet. On the XRP Ledger, 27.63 million XRP has now left the attacker's accounts. And reports that 6,300 ETH of the loot went through Tornado Cash do not match the chain. Section 07 has the details.
Update, September 28, 07:00 UTC: The attacker is moving the rest. All the stolen XRP has left its accounts, 90.5% of it swapped for Bitcoin. On Ethereum, two of the eight holding wallets began paying out on September 27, and part of that went through a Chainflip account that has taken out 74.46 BTC. 48,923 ETH still sits in six wallets that have never sent anything. Section 07 has the routes.
Update, September 29, 09:10 UTC: Bitget has given a fuller timeline. Its CEO says the first test transfers raised no alert and its monitoring caught the theft at 19:05 UTC, so we have corrected the timeline to match. On the chain, five more holding wallets have moved since September 28. 10,000 ETH still sits in one wallet that has never sent anything. Section 07 has the routes.
Update, September 30, 11:59 UTC: Bitget also lost ZEC. Two transfers from its Zcash hot wallet sent the attacker 18,917 ZEC, worth $29.4 million at the time. With them we count 23 transfers on nine chains, worth $386.80M, close to Bitget's $387.5 million, so we have updated the count throughout. Since September 25 the attacker has moved 3,259 ZEC into Zcash's new private pool, where the chain no longer shows where it goes. Section 07 has the details.
At a glance
On the evening of September 24, 2026, wallets belonging to the crypto exchange Bitget paid out about $387 million to an attacker, on nine blockchains. Most of it went in two bursts that hit five chains within seconds, and the transfers were signed by Bitget's own wallets with settings its customer withdrawals never use. The exchange says its monitoring caught the theft at 19:05 UTC and blocked customer withdrawals, yet its wallets kept paying the attacker for more than two hours after that. The attacker sold stablecoins for ETH within minutes, moved money from other chains to Ethereum, and began turning stolen BNB into Bitcoin. For two days most of the haul sat still. Since then the attacker has swapped almost all the XRP for Bitcoin and ETH, begun emptying the ETH wallets and started moving the stolen ZEC into a private pool. Bitget first put the loss at $351.6 million and later raised it to about $387.5 million, close to our own count.
$387.5M
Taken, by Bitget's latest figure (first put at $351.6M)
9
Blockchains the money left on
2h18m
From Bitget's alert at 19:05 UTC to the last transfer out
10,000 ETH
Stolen ETH in wallets that have never sent a transaction, as of 09:10 UTC on September 29
Key findingsEach line has its own share link
  1. $387.5M

    Bitget's latest figure, up from $351.6M after it found more stolen ZEC and TRX. Priced in the hour of each transfer, the 23 transfers we traced on nine chains come to $386.80M.

  2. 15 sec

    Bitget wallets paid the attacker on five chains in 15 seconds at 19:01 UTC, then on five chains in 9 seconds at 19:16.

  3. 2h18m

    From 19:05 UTC, when Bitget says its monitoring flagged the theft and blocked customer withdrawals, to the last transfer out at 21:23. Money kept leaving even after Bitget moved hot wallet funds to reserves at 20:40.

  4. 7

    Theft transfers from Bitget's Ethereum hot wallets used fixed gas limits of 100,000 or 200,000. Customer withdrawals from those wallets never did that week.

  5. 10,000 ETH

    Still in one wallet that has never sent a transaction, as of 09:10 UTC on September 29: about 7% of the loss. The XRP is gone, 90.5% of it swapped for Bitcoin.

  6. 3,259 ZEC

    Stolen ZEC the attacker had moved into Zcash's new private pool, Ironwood, by 11:59 UTC on September 30. Past that point the chain no longer shows where it goes. 15,657 ZEC was still in the attacker's address.

  7. 457.9 ETH

    Sent into the attacker's main Ethereum wallet on September 26 by a wallet funded the day before by five Binance withdrawals. Binance can see who made them.

  8. 6,300 ETH

    Reports that 6,300 ETH of the loot went through Tornado Cash do not match the chain. The 6,300 ETH and $19.4 million figures belong to an earlier theft, reported in January 2026.

01 · The first burstFive chains in fifteen seconds

At 19:01 UTC on September 24, 2026, Bitget's wallets started paying a stranger on five blockchains at once. First, 19.67 million USDT0, Tether's stablecoin on Arbitrum, left for the same address that had taken a small test transfer on Ethereum half an hour earlier. Within 15 seconds, USDC and a gold token had left on Ethereum, ETH on Optimism and Base, and XRP on the XRP Ledger. This was the heart of the Bitget hack. On every chain that shares Ethereum's address format, the money went to one address.

Bitget is a centralized exchange, or CEX. Its customers deposit coins, trade them and withdraw them. Like every CEX, it keeps some of that money in hot wallets, which pay out withdrawals on their own, day and night. The rest sits in warm and cold wallets that move less often. That evening, some of the hot and warm wallets paid the attacker instead.

Bitget first put the loss at about $352 million, and later raised it. We went to the chains to see how it left and where it went. Bitquery indexes every transfer on the chains involved, so we could pull out each one from a Bitget wallet to the attacker and check it on its own chain. We found 23 transfers on nine chains, all within three hours; the two on Zcash we added on September 30. Then we kept following the money as it moved. It is still moving, so every balance below comes with the time we checked it.

02 · The timelineTwo bursts, then three more waves

The timelineSeptember 24, 2026, UTC
Twenty-three transfers out of Bitget, September 24, 2026Each dot is one transfer to the attacker, sized by its dollar value at the time. Hollow dots are small tests. UTC.EthereumXRP LedgerArbitrumOptimismBaseBSCAvalancheTronZcash20:40 Bitget hot wallets move balances to reserve wallets21:30 CEO posts the first notice18:3019:0019:3020:0020:3021:0021:3019:05 Bitget's alert; customer withdrawals blockedFirst burst: five chains in 15 secondsSecond burst: five chains in 9 seconds19:01:2019:01:2319:01:2319:01:2919:01:3219:01:3319:01:3519:16:1419:16:1519:16:1819:16:2019:16:23ArbitrumEthereumEthereumOptimismXRP LedgerBaseEthereumBSCAvalancheTronXRP LedgerEthereum19.67M USDT012.85M USDC3,000.32 XAUt5,737.68 ETH2.25M XRP1,555.32 ETH7,130.86 ETH12,719.46 BNB821,011.97 AVAX20.59M TRX91.42M XRP13,965.93 ETH$19.7M$12.9M$12.8M$15.4M$3.4M$4.2M$19.2M$9.9M$8.6M$7.0M$140.1M$37.5M
Every transfer from a Bitget wallet to the attacker. The two panels under the chart list each burst, second by second. Wallet roles come from our labels, except on Zcash, where the wallet is identified by its behaviour (section 03).

The first transfers were tests: 93 TRX on Tron and 0.84 ETH on Ethereum, eleven seconds apart. Bitget first gave that minute as the moment it spotted the theft. Its CEO later said the two tests were too small to trip its risk controls and raised no alert. Half an hour on, a much larger sum of USDT left on Ethereum, and then came the two bursts. Between them, a Bitget hot wallet on Zcash sent 17,198 ZEC. Bitget's monitoring flagged a gap at 19:05 UTC and blocked customer withdrawals. The second burst went out eleven minutes later anyway. The second one drew on a warm wallet on the XRP Ledger, which alone sent 91.4 million XRP.

That was not the end. Two more Ethereum transfers followed about an hour later, twelve seconds apart. Then Bitget's hot wallets on BNB Chain and Ethereum sent hundreds of balances into Bitget's reserve wallets within a few minutes. It looks like an emergency sweep, and it did not stop the theft. Fifteen minutes later a hot wallet on Avalanche sent the attacker 8.2 million USDC, and over the next half hour the XRP warm wallet sent 9.3 million XRP, the Zcash hot wallet another 1,719 ZEC, and an Ethereum hot wallet 223.2 ETH. Bitget's CEO posted the first public notice seven minutes after that.

03 · The haul$387M across nine chains

By the time that notice went up, the money was gone.

What was takenBy chain
What left Bitget, chain by chainDollar value at prices in the hour of each transfer. Bitget's latest count of the loss is $387.5 million.XRP LedgerEthereumZcashArbitrumAvalancheOptimismBSCTronBase$157.8M · XRP$126.6M · ETH, USDT, USDC, XAUt$29.4M · ZEC$19.7M · USDT0$16.8M · AVAX, USDC$15.4M · ETH$9.9M · BNB$7.0M · TRX$4.2M · ETHTotal $386.80M across 9 chains
Values at prices in the hour of each transfer, from Bitquery's price data. XRP at the price in the five minutes around each transfer.

XRP was the largest single asset, about two fifths of the total. The Ethereum chain came second, with ETH, two stablecoins and the gold token XAUt, and Zcash third. Priced in the hour each transfer left, our total comes to just under Bitget's latest figure. Bitget's CEO put the count at 19 transfers. We count 23, three of them small tests.

Our labels mark every paying wallet as Bitget's except the one on Zcash, a chain missing from our labels. That wallet has made thousands of payments since 2021, the way an exchange hot wallet does. It has sent nothing since the second theft, which fits Bitget's pause on withdrawals, and Bitget has said ZEC was among what it lost. One of the labelled wallets, 0xffa8…cd54, is marked as a cold wallet in our labels and by public trackers. But it sends routine transfers most days and tops up the hot wallets, which is how a warm wallet behaves: the middle layer, between hot wallets that pay customers and cold ones that rarely move. Bitget says its cold wallets were not touched.

04 · The fingerprintSigned by Bitget's own wallets

How does that much leave an exchange in one evening? The transfers themselves hold part of the answer.

Each one was an ordinary transaction, signed by the Bitget wallet it left from, in the same queue as customer payouts. On Ethereum, a theft sits between two of them, with the next nonce and the same fee settings. The XRP transfers carry the same signing key and fee as a routine Bitget move made that morning.

One setting gives them away. Every Ethereum transaction sets a gas limit, the most it may spend on fees. Bitget's hot wallets use the same limit for almost every ETH payout and a fresh estimate for each token payout. Every theft used a fixed round number instead.

The fingerprintGas limits, Ethereum hot wallets
The fingerprint: gas limits on Bitget's two Ethereum hot walletsEvery transaction sent by 0x1ab4…8f23 and 0x5bdf…f7ef, 17:00 to 22:00 UTC on September 24.Grey: every other transaction, mostly customer withdrawals. Pink: transfers to the attacker.0100,000200,000300,00017:0018:0019:0020:0021:0022:004,000,000 (failed transfer to a Bitget wallet, off scale)Customer ETH withdrawals: about 63,00020:41 sweep to reserve walletsSix transfers to the attacker: 200,000USDT to the attacker: 100,000
In the eight days to September 24, the two hot wallets sent 35,678 transactions. Customer ETH withdrawals used about 63,000. Only the seven transfers to the attacker used 100,000 or 200,000. Bitget's warm wallet uses fixed limits like these for its own internal transfers.

Theft transfers on the other EVM chains used fixed limits too. Zcash has a tell of its own. A payment there is built from coins the wallet received earlier, and each one it uses is an input. In thousands of other payments since the start of last year, the Zcash hot wallet never used more than 54 inputs. The two to the attacker used 1,074 and 956, and between them took almost everything the wallet held. That fits what Bitget's CEO, Gracy Chen, said later. In a live Q&A, as Cointelegraph reported, she said attackers broke into a backend system of the wallet service and faked transfer orders. She said those orders then went through Bitget's normal signing process, and that no private keys leaked. The chain cannot show what happened inside Bitget. It does show transfers that look like Bitget's own internal moves rather than customer payouts, signed by Bitget's wallets.

05 · The first hoursWhere the money went first

Once the money landed, the attacker moved fast, starting with the coins that could be frozen.

Where the money wentFrom Bitget to September 26
rwNhef…CTck0x770b…63ee0xd2c2…f8990x600c…84b20x9fa3…4fa00xa6bf…b2720xfd5e…9e540xed5a…1a510xdc29…dc630x52f0…d2840x7c96…3e1c0xa6dd…55450x770b…63ee0xe410…d9460x770b…63ee0x94a4…5da00x770b…63ee0x469a…25dc0x770b…63ee0xe07b…7d570xe07b…7d570xa6dd…5545TBWNgu…YwKDTBWNgu…YwKDWhere the money went, wallet by walletEvery arrow is money we followed on chain, to 02:54 UTC on September 26. Click an address to open it.Stolen, and first attacker walletNext hopCollected inWhere it sat, Sep 26XRP Ledger · 102.98M XRP75.35M XRPEthereum · 24,597 ETHEight wallets · 68,295 ETHArbitrum · 19.67M USDT0Optimism · 5,738 ETHBase · 1,555 ETHBNB Chain · 12,719 BNBTHORChain51.26 BTCTron · 20.59M TRX13 wallets, from 08:25 UTCTBWNgu emptied by 10:49in six attacker accounts4.64M XRP later moved on from one+ 34.75M USDT, 12.85M USDC,3,000 XAUtnone has sent a transactionsold the USDT, USDC andXAUt for ETHtook in 43,698 ETHpaid out 43,698 ETHto five walletsAvalanche · 821K AVAX,8.20M USDCon Ethereum: USDC overCCTP, ETH over Acrosson Ethereum, via Stargate,Across, deBridge, CCTPon Ethereum, viaStargate and Relaythen 0x7c96, 10,712 BNB toon Ethereum, via Across andMayan; holds 0 ETH;Tether froze 218,023 USDT,Circle froze 99,990 USDCthen 0x1508…cfd3 and achain of new wallets; 10 ofthem swapped on THORChain37 swaps from 05:36UTC, Sep 25; BNB isnet of refundspaid to 15 Bitcoin addresses;all swaps paidone was active before thehack; the rest are new6.46M USDT bridged toEthereum; part went on toTHORChain and ChainflipAmounts rounded. The eight wallets plus 0 ETH in 0xe07b…7d57 made 68,295 ETH on September 26. Addresses open in Bitquery's explorer.The same addresses 0x770b, 0x7c96, 0xe07b and 0xa6dd appear on more than one chain: the attacker reused them.split into five new accounts24,596 ETH, all of it but gas money, straight to three walletshub on Ethereum10,00010,00010,00010,00010,00010,0004,5963,698all tokens22,613 ETH43,698 ETHbridged12,558 ETHbridged5,629 ETHbridged1,542 ETHbridged1,358 ETH5,897 BNB5,686 BNBBTC20.59M TRXswapped, bridged
Each arrow is a transfer, swap or bridge we followed on chain, with its amount. Click an address to open it in Bitquery's explorer, or follow the attacker's wallets with the Bitquery MCP.

Tether and Circle, which issue USDT and USDC, can freeze tokens in a wallet. Here the tokens did not sit still long enough. The USDT was passed on eight minutes after it arrived and had all been sold for ETH within twenty minutes. The USDC and the gold token went the same way within about half an hour. Dumping 3,000 XAUt at once lined up with the gold token dipping more than 2% at its low that hour.

Money on Arbitrum, Avalanche, Optimism and Base came to Ethereum next. Most of it was sold for USDC on its home chain and crossed over Circle's CCTP bridge. The rest crossed as ETH through Stargate, Across, deBridge and Relay. The swaps ran through DEX aggregators, MetaMask Swaps among them. Most of that ETH met in one hub wallet on Ethereum, which passed 43,698 ETH on to five new wallets. By the next morning the ETH sat in nine wallets. Eight of them had not sent a single transaction.

06 · Into BitcoinTurning BNB and TRX into Bitcoin

The next morning, the stolen BNB started moving too. THORChain is a cross-chain DEX: anyone can swap a coin on one chain for a coin on another, and it needs no account. The attacker's wallets on BNB Chain sent it BNB again and again, and each swap named a Bitcoin address to be paid. By 14:05 UTC that day, THORChain had paid 51.26 BTC for that BNB.

The BNB is not the only thing turning into Bitcoin. We added up every swap we could match to a Bitcoin payment, and by 14:38 UTC, 126.71 BTC, about $10.6 million, had been paid out for stolen money. That is more than half of what the stolen BNB and TRX were worth, and about 2.8% of everything taken. At that point the big pile of ETH had not been touched, and most of the XRP still sat where it landed.

RouteBitcoin paidSwaps paidStill waiting
BNB, swapped on THORChain51.26 BTC37none
TRX, bridged to Ethereum, then THORChain48.05 BTC18300,000 USDC
TRX, bridged to Ethereum, then Chainflip3.56 BTC49,997 USDT
TRX, through Umbra and Arbitrum, then Chainflip21.65 BTC6none
TRX, straight into THORChain on Tron2.20 BTC1none
Total126.71 BTC662 swaps
As of 14:38 UTC, September 25, 2026. Each THORChain payment on the Bitcoin chain names the swap it pays; Chainflip payments are matched by address, time and amount. 31 Bitcoin addresses have been paid so far.

The Bitcoin side is messier. The same Bitcoin addresses also take a second stream: USDT from Tron, some of it routed through the attacker's own Ethereum wallets. Both streams meet in one Bitcoin wallet, so not all the Bitcoin in it is Bitget's money.

The Tron end of that stream has its own twist. One of the wallets feeding it was getting money five hours before the hack began, and it did not come out of nowhere. It is one of a set of Tron wallets that sprang up two days earlier. Each new one was topped up with TRX for fees by an older one, and the first USDT into the set came out of KuCoin.

Before the hack, that same wallet took in USDT from five older wallets. One of them had just taken 200,000 USDT out of Bybit and passed it on 15 minutes later. It looks like a desk that swaps money for several clients, and KuCoin and Bybit can see which of their accounts the money came from. The next morning, the attacker's Tron address sent that wallet 5.57 million stolen TRX, which puts it on the attacker's route. Whose money came in before the hack, and who runs these wallets, we cannot say.

07 · Where it is nowThe XRP is gone, and the ETH is moving

For two days, the biggest piles hardly moved. Then the attacker went back to them.

WhereHeldWorth nowStatus
Ethereum, one holding wallet10,000.00 ETH$27.2MHas never sent a transaction
Ethereum, holding wallet 0x600c…84b20.00 ETH$0Paid out from 20:08 UTC on September 27 to 08:05 UTC on September 29, refilled by the holding wallets below
Ethereum, holding wallet 0xd2c2…f8990.00 ETH$0Emptied on September 27, 07:40 to 20:06 UTC
Ethereum, four more holding wallets0.00 ETH$0Emptied into 0x600c…84b2 on September 28 and 29
Ethereum, holding wallet 0xfd5e…9e547,023.58 ETH$19.1MPaying out on its own since 07:59 UTC on September 29
Ethereum, new wallets those seven paid1,468.11 ETH, 268,236 USDC$4.3MNot yet moved on
Ethereum, hub wallet0.00 ETH$12Sent 628.36 ETH to a holding wallet at 07:59 UTC on September 26
XRP Ledger, six accounts30.31 XRP$46All moved on by 07:43 UTC on September 27
Tron, first address0.40 TRX$020.59 million TRX moved out from 08:25 UTC
BSC, 51 wallets0 BNB$111Almost all of the 12,719 BNB already swapped, bridged or sent to THORChain
Bitcoin paid out126.71 BTC$10.6MFor stolen BNB and TRX in 66 swaps; 2 more waiting (section 06)
Frozen by Circle99,989.91 USDC$100KFrozen at 05:00 UTC
Frozen by Tether239,113.50 USDT$239KTwo wallets, frozen at 12:19 and 14:09 UTC
Zcash, attacker address t1WgMd…MDVG15,657.43 ZEC$22.2M3,259 ZEC moved into a private pool since September 25 (section 07)
As of 09:10 UTC, September 29, 2026. Balances read from public nodes; values at prices for the 08:00 UTC hour. The Bitcoin line is as of 14:38 UTC on September 25; the Tron and BSC lines as of September 25. The Zcash line is as of 11:59 UTC on September 30, at the ZEC price for the 10:00 UTC hour.

The XRP went first. The six accounts holding it sent it out in chunks, and by 07:43 UTC on September 27 they were empty. Each chunk passed through new accounts and ended in THORChain. Every swap there carries a memo that names the coin and the address to be paid, so we can see what the XRP became. Of all the stolen XRP, 90.5% was swapped for Bitcoin, and most of the rest for ETH.

What the stolen XRP becameXRPShare
Bitcoin, through THORChain93.22 million XRP90.5%
ETH, through THORChain7.86 million XRP7.6%
BNB, through THORChain1.36 million XRP1.3%
Other coins, through THORChain149,963 XRP0.1%
Sent to older accounts374,336 XRP0.4%
Still in the new accounts9,049 XRPunder 0.1%
Stolen102.98 million XRP100%
Net of the 7.91 million XRP that THORChain sent back. Each swap names the coin and the address to be paid; 112 Bitcoin addresses in all. The XRP passed through 233 new accounts first. About 8,000 XRP went on fees and small moves we did not follow. As of 07:41 UTC on September 29.

Then the ETH. At 07:40 UTC on September 27, one of the eight holding wallets sent its first payment, and by 20:06 it was empty. Two minutes later a second one started, and it became the payout wallet: from September 28, four more holding wallets emptied into it. On September 29 a seventh began paying out on its own, straight to the same relay wallets. Together the seven have sent 51,899 ETH into new wallets, which passed it on to swap services and bridges.

Where it wentAmountWorth nowHow we know
Into THORChain, swapped for Bitcoin29,088 ETH$79.0MNet of 948 ETH sent back; the swaps name 39 Bitcoin addresses
Into a Chainflip liquidity account, taken out as Bitcoin2,450 ETH$6.7MWithdrew 74.46 BTC to one Bitcoin address, and 99 ETH back to the attacker's wallets
Into Chainflip swaps, almost all for Bitcoin812 ETH and 14.60 million in stablecoins$16.8M103 deposits; the swaps name ten Bitcoin addresses
Bridged to Arbitrum over Stargate6,740 ETH and 0.87 million USDC$19.2MDestination read from LayerZero
Bridged to Linea and Optimism over Stargate235 ETH$639KDestination read from LayerZero
Bridged to Arbitrum over Across1,132 ETH and 0.29 million USDC$3.4MDestination read from the bridge record
Swapped for USDC, sent to Noble over Circle's CCTP bridge6.64 million USDC$6.6M31 Noble addresses
Swapped for USDC, sent to Solana over Circle's CCTP bridge2.95 million USDC$2.9MDestination read from the bridge record
Swapped for USDC, sent to Osmosis with Skip Go Fast0.96 million USDC$962KEach order forwards it to Noble
Swapped for USDT, bridged to Tron over USDT03.62 million USDT$3.6MDestination read from LayerZero
Through a router to four more new wallets755 ETH$2.1MPassed on to one-off addresses
Other services and wallets3,450 ETH and 86,008 in stablecoins$9.5MSwaps through a gateway and a router whose output we could not trace, and smaller sends
Still in the new wallets1,468 ETH, 268,236 USDC$4.3MNot yet moved on
ETH that left the seven holding wallets that moved, from 07:40 UTC on September 27 to 09:10 UTC on September 29, followed through 409 new wallets. Swaps are followed to what they paid out. Some other attacker money joined on the way, such as 294 ETH paid out by THORChain for stolen XRP, so the rows add up to more than the ETH that left. Values at prices for the 08:00 UTC hour.

About half of it went into THORChain for Bitcoin, as before. The next largest piece was bridged to Arbitrum over Stargate. Chainflip took a large share too, mostly as USDC and USDT swapped for Bitcoin. Some reached Bitcoin another way. Instead of swapping, the attacker paid ETH into a Chainflip liquidity account, the kind that supplies coins for other people's swaps and can take out another coin later. All the ETH that account received came from the attacker's wallets, and it has taken out 74.46 BTC. Much of the rest was swapped for USDC or USDT and bridged away. The USDC went over Circle's own bridge to Noble, a chain in the Cosmos network where Circle issues USDC, and to Solana. The USDT went back to Tron.

The last holding wallet has not moved. It has never sent anything, and its 10,000 ETH is worth about 7% of Bitget's count of the loss.

The stolen TRX had gone days earlier. From 08:25 UTC on September 25 the attacker drained the Tron wallet on Tron, and by 10:49 UTC it was empty: 20.59 million TRX had gone out in 22 payments. Most of it was swapped for USDT and bridged to Ethereum over USDT0. Some of that went straight into THORChain, to be paid out in Bitcoin, mostly to the same addresses the stolen BNB used.

Another part took the long way round. It was sold for ETH and sent through Umbra, a tool that pays out to one-time addresses. Then it was bridged to Arbitrum and straight back, and fed into Chainflip, a swap service that moves coins between chains. Chainflip paid it out as 21.65 BTC to five Bitcoin wallets. Every hop makes the trail longer to follow.

The ZEC stayed put for a day. Then the attacker began sending it on in small amounts to other addresses, which moved it into Ironwood, the private pool Zcash opened in July. Over five days, 12 small payments went in. On the morning of September 30 bigger ones followed, 2,924 ZEC in a few hours.

Zcash has a public side and private pools. On the public side, every payment shows who paid whom and how much, as on Bitcoin, which is how we could follow the stolen coins this far. Coins moved into one of its private pools hide the sender, the receiver and the amount, so the trail stops there. Anyone can move coins in at any time. Our Zcash rich list explains how the pools work.

What the stolen ZEC becameZECShare
Moved into the Ironwood private pool, September 25 to 29, in 12 payments335.54 ZEC1.8%
Moved into the Ironwood private pool, September 30, in 5 payments2,923.75 ZEC15.5%
Still in the attacker's address15,657.43 ZEC82.8%
Stolen18,916.72 ZEC100%
As of 11:59 UTC on September 30. Each payment went from the attacker's address to another address, which then moved it into the pool. The amounts are net, read from node data for each payment; 0.0085 ZEC went on fees. Once coins are in the pool, the chain no longer shows where they go.

One of the addresses the attacker used on the way into the pool also took coins from elsewhere. On September 30 it got 760 ZEC that had just come out of the private pool through another address, and sent it straight back in. Whose coins those were, the chain cannot say.

Very little has been frozen. Circle froze the USDC held in one attacker wallet early the next morning. Tether froze the USDT beside it at 12:19 UTC, and another 21,091 USDT in a second attacker wallet at 14:09. Together that is about $339,000. Native coins such as XRP, ETH, TRX and ZEC have no issuer that can freeze them.

In the early hours of September 26, the attacker's hub wallet on Ethereum, the one that had passed the stolen ETH on to five new wallets, started filling up again. First came the ETH left in the attacker wallet whose USDT Tether had frozen. Three minutes later, 457.9 ETH arrived from a wallet we had not seen before. The day before, that wallet got almost all its money in five payouts from Binance hot wallets, in USDT and ETH. So either the attacker is pulling money out of Binance by a route we have not found, or someone else sent it. Binance knows whose account that money came from. Five and a half hours later, the hub sent all of it to one of the holding wallets, which kept it until September 28 and then emptied into the payout wallet.

UTC (month/day)FromToAmountTransaction
09/25 16:09Binance hot wallet 0xdfd5…963d0x4885…7c8e88.35 ETH0xd1f0…dfff
09/25 16:17Binance hot wallet 0x9696…69760x4885…7c8e89.36 ETH0xbaf8…31fb
09/25 16:18Binance hot wallet 0x28c6…1d600x4885…7c8e284,896.78 USDT0x077a…3229
09/25 16:23Binance hot wallet 0x21a3…55490x4885…7c8e260,125.05 USDT0x53d4…7856
09/25 16:27Binance hot wallet 0x56ed…b17f0x4885…7c8e79.93 ETH0xaa03…d6de
09/26 02:23Attacker wallet (USDT frozen by Tether) 0xe07b…7d57Attacker hub 0xa6dd…5545170.465 ETH0x08a5…5ec8
09/26 02:26Binance-funded wallet 0x4885…7c8eAttacker hub 0xa6dd…5545457.896 ETH0xacb8…97f7
Every transfer checked on a public node. Binance hot wallets identified by our labels. The USDT was swapped for 200.17 ETH before the wallet paid the hub. The hub held 628.364 ETH at 02:45 UTC on September 26.

Several reports say the thief pushed 6,300 ETH, about $19 million, through Tornado Cash within hours. The chain does not show that. From the hack to early on September 26, 6,115 ETH went into Tornado's ETH pools on Ethereum, from 110 wallets. When we trace where each of those wallets got its money, three steps back, none leads to the attacker. About three quarters of it came from one wallet that got all its ETH a month before the hack. Another stream started on Tron, with money parked there since early September. Money that old cannot be Bitget's; whether the same people control it, the chain cannot tell. The 6,300 ETH and $19.4 million figures match another theft: a multisig wallet drained in December 2025, whose thief had pushed that much through Tornado by early January, as The Block reported at the time.

What is still in one place is the ETH in that last wallet and most of the stolen ZEC, and anyone can watch both.

08 · What Bitget saysBitget's account

Bitget's own statements cover what the chain cannot show. Chen posted the first notice on X that evening, and the company's account followed four minutes later. Bitget says the theft reached part of its hot and warm wallets and that cold wallets stayed safe. It says customer balances are accurate and the loss falls within its User Protection Fund, which Chen said holds over $464 million. On September 25, Bitget raised its count of the loss to about $387.5 million, from $351.6 million, after finding more stolen ZEC and TRX, The Record reported. Bitget said no new money had left. It launched a bounty that pays 5% of any stolen money frozen with outside help and another 5% of any it gets back, Crypto Times reported.

On September 28, in a live video on X, Chen gave a fuller account, The Block and U.Today reported. She said the attacker used a flaw in security software from an outside vendor to steal senior staff logins, then sent fake withdrawal orders to Bitget's wallet system that got past its risk checks. Monitoring flagged the theft at 19:05 UTC and blocked customer withdrawals. The wallet service was shut down at about 21:44, some twenty minutes after the last transfer we counted.

Withdrawals were paused. The next morning, Bitget's public coin list showed withdrawals switched off for every coin on every chain, while deposits stayed open on most of them. Bitget later said it would publish a plan to reopen them by 04:00 UTC on September 26. The plan came out that day. Bitcoin withdrawals reopened on September 28, and within an hour, Chen said, 4,098 BTC had gone out, Crypto Briefing reported. The plan put ETH next, on September 29, then USDT, with the other coins, fiat and P2P on October 2. She said the protection fund would be topped back up to over $300 million within a week. On September 30, Bitget shared what the two firms it hired, Mandiant and SlowMist, had found, BleepingComputer reported. The attackers broke into two outside security appliances through flaws no one had patched yet, and moved from there to the server that runs Bitget's wallet jobs. SlowMist traced the earliest malicious activity back to August 31. Its first and last theft transfers fall in the same minutes as the first and last ones we found.

Chen also said, as Cointelegraph and CNBC reported, that some attacker IP addresses matched VPN services used by a North Korean group. She added that the link is not certain, and we did not test it. The analytics firm Elliptic later said North Korea was likely behind the theft, Bloomberg reported. The obvious yardstick is the Bybit hack. About $1.5 billion was taken from Bybit in February 2025, and the FBI blamed North Korea five days later. Bitget's loss is about a quarter of that. For other thefts we have traced, see the Aquifer hack, the SecondFi drain and the Tron laundering circuit.

09 · How we did thisMethod and limits

We started from Bitget's wallets in our labels and the addresses that received the stolen money, and pulled every transfer between them. On Ethereum we also checked every large transfer out of Bitget that evening, to make sure none went to another new wallet. We checked each of the 23 on its own chain, then followed the money wallet by wallet, stopping at exchanges, bridges and swap services. When the XRP and the ETH began to move, we followed every payment through each new account or wallet it reached. Each THORChain swap carries a memo that names the coin and the address to be paid, and we read every one. For Chainflip and the bridges we used each service's own records. To test the Tornado Cash reports, we took every deposit into its Ethereum pools after the hack and traced each depositor's funding three steps back. Our labels hold no Zcash addresses. The Zcash transfers came to light on September 30, when the investigator ZachXBT posted the attacker's Zcash address; we checked both transfers on the chain, compared the paying wallet with its own history, and followed every coin the attacker sent until it went into the private pool or came back. Node data for each of those payments names the pool the coins went into. Prices are Bitquery's hourly prices.

Four limits apply. Bitget wallets missing from our labels would be missing here, as the Zcash ones were at first. On Zcash we see only the public side: once coins enter a private pool, we cannot follow them. We cannot say who controls the Bitcoin wallets at the end of the THORChain swaps. We did not follow the money past the bridges to Noble, Arbitrum and Tron. And the money is still moving, so every balance is tied to the time we checked it.

10 · The recordEvery transfer out of Bitget

UTCChainFrom Bitget walletAmountTransaction
18:31:00TronTJ7hhY…JSdb93.00 TRX (test)698c02…ec4b
18:31:11Ethereum0x1ab4…8f230.84 ETH (test)0xc195…7be6
18:58:59Ethereum0x1ab4…8f2334.75M USDT0xa3ae…9ce5
19:01:20Arbitrum0x1ab4…8f2319.67M USDT00xd032…84e3
19:01:23Ethereum0x1ab4…8f2312.85M USDC0x4090…d7ae
19:01:23Ethereum0x5bdf…f7ef3,000.32 XAUt0xa976…9d29
19:01:29Optimism0x5bdf…f7ef5,737.68 ETH0xf1a2…cc2c
19:01:32XRP LedgerrGDreB…GzFn2.25M XRP9926E4…25F4
19:01:33Base0x97b9…86891,555.32 ETH0x7692…f5c8
19:01:35Ethereum0x1ab4…8f237,130.86 ETH0x67a7…930c
19:03:23Ethereum0xffa8…cd540.65 ETH (test)0x37fa…2ebe
19:03:49Zcasht1Xd1L…JriY17,197.72 ZEC998042…4489
19:16:14BSC0xffa8…cd5412,719.46 BNB0xd456…6903
19:16:15Avalanche0xffa8…cd54821,011.97 AVAX0x9865…ddd6
19:16:18TronTJxe1M…UGx520.59M TRXce9b36…d13f
19:16:20XRP LedgerrwTTsH…XLEf91.42M XRP8DF2EC…4195
19:16:23Ethereum0xffa8…cd5413,965.93 ETH0x8469…0bfa
20:09:11Ethereum0x1ab4…8f231,879.20 ETH0xdd07…f606
20:09:23Ethereum0xffa8…cd541,395.90 ETH0x0c63…e97e
20:55:07Avalanche0x1ab4…8f238.20M USDC0x4d2d…4499
21:19:21XRP LedgerrwTTsH…XLEf9.31M XRP41EFBB…D42A
21:19:55Zcasht1Xd1L…JriY1,719.00 ZEC1ed1fb…ec36
21:23:11Ethereum0x1ab4…8f23223.20 ETH0x2305…9afb
September 24, 2026. Every transfer checked on a public node for its chain. Avalanche transactions are shown without a link.

FAQ

How much was stolen in the Bitget hack?

Bitget first put the loss at about $351.6 million, and on September 25 raised it to about $387.5 million after finding more stolen ZEC and TRX. Our own count of the 23 transfers we traced on nine blockchains, priced in the hour each one left, comes to $386.80M. The largest part was XRP, about two fifths of what we traced.

Is Bitget safe? Are customer funds covered?

Bitget says customer balances are accurate and that the loss falls within its User Protection Fund, which its CEO said holds over $464 million. Withdrawals were paused after the theft. Bitcoin withdrawals reopened on September 28, and the rest follow in stages to October 2. These are Bitget's claims; we have not tested them.

Was North Korea behind the Bitget hack?

Bitget's CEO said some attacker IP addresses matched VPN services used by a North Korean group, and that the link is not certain. Elliptic later said North Korea was likely behind it. We did not test that claim.

Where is the stolen money now?

Less of it is sitting still. As of 09:10 UTC on September 29, 10,000 stolen ETH sat in one wallet that has never sent a transaction. The XRP is gone, most of it swapped for Bitcoin through THORChain. Seven of the eight ETH holding wallets have paid out since September 27, mostly into Bitcoin, into USDC sent to the Cosmos chain Noble, and over bridges. The stolen TRX and BNB had mostly moved on by September 25. On Zcash, most of the stolen ZEC still sat in the attacker's address, and the rest was going into a private pool that cannot be followed. Circle and Tether had frozen about $339,000 of USDC and USDT. The tables in section 07 have the amounts and the times.

Did the Bitget hacker use Tornado Cash?

Not with the stolen money, as far as the chain shows. In the hours after the hack, about 6,115 ETH went into Tornado Cash on Ethereum, and none of the wallets behind it leads back to the attacker. The 6,300 ETH figure in some reports matches an earlier theft, reported in January 2026.

How does the Bitget hack compare to the Bybit hack?

About $1.5 billion was taken from Bybit in February 2025, and the FBI blamed North Korea. That makes Bitget's loss roughly a quarter the size of Bybit's.

Run it yourself

Follow the Bitget money in plain English

Every transfer above can be checked in data anyone can query. The Bitquery MCP server puts that data behind an AI assistant, so you can ask where a wallet sent its money, what a bridge paid out, or whether a stolen balance has moved, without writing the query yourself.

Follow a wallet across Ethereum, BNB Chain, Arbitrum, Base, Optimism and TronSee every transfer in and out of an address, with labelsWatch whether a stolen balance movesPrice any token at the hour of a transfer
Explore Bitquery MCP →Figures measured September 24 to 30, 2026, against Bitquery's data and public nodes for each chain; holdings as of 09:10 UTC on September 29, Zcash as of 11:59 UTC on September 30. Written by Bitquery Research with AI tools; every figure was checked against the raw data.
Scope, limits and attribution

This article is provided for informational and educational purposes only and reflects analysis of publicly available on-chain data as of the times stated. It does not constitute legal, financial, compliance, or investment advice.

The findings describe transfers from wallets identified as Bitget's by our labels on eight blockchains and by the wallet's own behaviour on Zcash, and the onward movement of that money, measured from on-chain data and checked on public nodes. Balances change; every holding is stated with the time it was read.

References to Bitget, THORChain, Circle, Tether, MetaMask and any other party describe on-chain activity or public statements. Wallets are identified by address only; nothing here states who controls them. Statements attributed to Bitget or its staff come from the linked sources.

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 the use of this article.