A minus sign drained the WAX bridge. The stolen coins reached HitBTC in 38 minutes
We followed every coin from the WAX bridge theft across three chains, from a brand-new WAX account to an exchange's hot wallets.
- $90.5K
- 38 min
- $15,100
- Tornado Cash
- 5 h 11 m
- 97%
01 · What happenedThe WAX bridge paid out, and the coins went to HitBTC
On 22 October, the WAX bridge paid about $90,500 to someone who put nothing in. WAX is a blockchain built for games and NFTs. Its bridge moves dollars and other coins between WAX, Solana and Ethereum. Within 38 minutes, almost all the money had reached HitBTC, a crypto exchange.
The trick was a minus sign. To move coins out, you tell the bridge how much to send and the most you will pay as a fee. Your balance is charged the amount plus the fee. The thief set the fee to minus the amount, so the charge came to zero. The bridge paid out anyway.
Bitquery traced the whole theft. We read every step of it and followed the payouts with Bitquery's Solana and Ethereum data. The stolen coins went into HitBTC through two deposit addresses, the one-off addresses an exchange gives each user. The wallet that paid the thief's network fees got its first ETH on Ethereum from Tornado Cash, a mixer that hides where coins came from. Five hours after the theft, a second account tried the same trick and failed. And the loss is bigger than first reported, because the early figure counts only the stablecoins.
02 · How the bridge worksCopies on WAX, real coins in a vault
Coins can't jump between blockchains on their own. A bridge keeps the real coins in a vault on one chain and gives you a copy on the other. On WAX the copies have names like WAXUSDC and WAXUSDT. Each one is meant to be backed by a real coin in the bridge's vault on Solana or Ethereum.
Going back is the reverse. You call withdraw, name your address on the other chain and set a fee cap. The copies come out of your balance. Then the bridge's signer, the account that approves every payout, signs the withdrawal, and you claim the real coins from the vault.
Since June, all 446 withdrawals by other accounts set the fee to zero. In the bridge's full record, more than 3,100 withdrawals going back to March 2021, nobody had tried a fee below zero before 22 October.
03 · The bugA fee below zero
The withdraw function added the fee to the amount and took the total from the user's balance. It assumed the fee would be zero or more. It never checked. So a fee of minus the full amount makes the total zero, and nothing is charged.
GoPlus Security, a blockchain security firm, set out the bug in a post on 23 October. Its text says the attacker set the fee "to quantity". The thief's own calls show a negative fee. So does the screenshot in GoPlus's post. These are the five withdrawals.
| Time (UTC) | Withdraws | Fee | Charged | Paid on |
|---|---|---|---|---|
| 09:46:18 | 52,986.497732 WAXUSDC | −52,986.497732 WAXUSDC | 0 | Solana |
| 09:47:31 | 21,558.252354 WAXUSDT | −21,558.252354 WAXUSDT | 0 | Ethereum |
| 09:47:40 | 840.2750339 WAXDAI | −840.2750339 WAXDAI | 0 | Ethereum |
| 09:47:42 | 2.54669928 WAXWETH | −2.54669928 WAXWETH | 0 | Ethereum |
| 09:47:44 | 0.10993227 WAXWBTC | −0.10993227 WAXWBTC | 0 | Ethereum |
The thief opened each WAXUSDC, WAXUSDT or other balance in the same second as its withdrawal. All five balances still read zero.
04 · 86 secondsFive withdrawals took most of every vault
The thief's WAX account, fasdfas.al, was 40 minutes old when it struck. It was opened by an account called al, which also sent it a "Welcome to Alcor" gift of about $2 in wrapped ETH. Alcor is a DEX on WAX. The thief swapped part of the gift for WAX tokens, and that was all the setup it needed on that side.
Then the thief struck: USDC to Solana, then USDT, DAI, WETH and WBTC to Ethereum. Between the first and second withdrawals it staked some of its tokens for CPU, the network time every account on the chain needs. All five went out in 86 seconds, and the bridge signed each one in less than a minute.
Each withdrawal took most of that coin's vault, from 81% of the DAI to almost all the WBTC.
Nothing stopped a single withdrawal that large. That afternoon, WAX set its first ever limits on these five coins. The thief's USDC withdrawal was 21 times the new USDC cap.
05 · What was taken$90,500, and not only in stablecoins
With stablecoins at $1 and the rest at the thief's own swap prices, the five withdrawals were worth about $90,500. More than half of that was the USDC on Solana.
WAX told users on X that the exploit hit "a small number of stablecoins". The early press figure, for example in The Crypto Times, matches the stablecoins alone. That leaves out two coins. The WETH and WBTC add about $15,100 more.
| Token | Paid on | Amount | Value | Share of the vault |
|---|---|---|---|---|
| USDC | Solana | 52,986.497732 | $52,986 | 97% |
| USDT | Ethereum | 21,558.252354 | $21,558 | 85% |
| DAI | Ethereum | 840.2750339 | $840 | 81% |
| WETH | Ethereum | 2.54669928 | $6,138 | 97% |
| WBTC | Ethereum | 0.10993227 | $9,005 | all but 87 sats |
| Total | $90,528 |
06 · 38 minutesFrom WAX to HitBTC
The bridge had paid, but the coins still had to be claimed on each chain, and that takes gas, the small fee paid on every transfer. Both of the thief's new wallets were empty, so about 12 minutes in, the Solana wallet got a little SOL through Relay, a service that moves coins between chains. Two minutes later it claimed the USDC. On Ethereum, ETH for gas landed three minutes after that, and the wallet claimed the other four coins straight away.
Then the money moved to HitBTC. The Solana wallet sent its USDC to a HitBTC deposit address. The Ethereum wallet swapped the other four coins for ETH, mostly through the KyberSwap and Velora routers. It sent 15.58 ETH to a second deposit address, 38 minutes after the first withdrawal.
07 · Where the money wentDeposit addresses, then HitBTC's hot wallets
An exchange gives each user a deposit address, then sweeps it into a hot wallet, the working wallet it pays users from. Both deposits were swept within the hour. Our address labels mark the Ethereum hot wallet as HitBTC's, and that wallet has taken ETH from 145,899 senders in more than two years. On Solana the deposit went to a collector wallet that passes all of it on to a wallet our labels mark as HitBTC's.
Two more deposits reached HitBTC that morning from wallets tied to the thief. Neither was stolen from the bridge. One sent USDT on BNB Chain. The other sent SOL on Solana, mostly money from Artrade (ATR) tokens it had sold two hours earlier. Counting the stolen coins, about $115,600 went into HitBTC in four deposits.
An exchange can usually match a deposit address to the account that owns it, so the next step in this trail sits with HitBTC. Whether it has frozen anything is not something the chain shows, because the coins already sit in its own wallets.
08 · The gas walletTornado Cash at both ends
The gas for both claims came from one wallet, 0x9a99…07be, which the thief used on Ethereum, Arbitrum and BNB Chain. Its first ETH on Ethereum came out of Tornado Cash's 0.1 ETH pool, three hours before the theft. Tornado Cash pools many people's coins, so no one can tell whose coins come out. We looked at who uses it in our Tornado Cash audit.
A minute after that Tornado withdrawal, the gas wallet bridged a little ETH to a Solana wallet. Over the next three hours it gathered about $3,200 in USDT on BNB Chain. Part came from its own funds on Arbitrum through Relay, and the rest arrived through HOT, another bridge, from a wallet we did not trace. That USDT paid for the gas. Relay's public records name this wallet as the sender of the gas to both of the thief's receiving wallets.
Within an hour of the theft, the gas wallet sent 0.1 ETH back into Tornado Cash and its USDT to HitBTC. The record shows these wallets moving together, often to the second, from the Tornado withdrawal to the last deposit at HitBTC almost four hours later. It does not show who controls them.
09 · A copycat, then a fixA second account tries, and WAX closes the hole
Five hours after the theft, a second WAX account, lq52153yyb5r, tried the same trick. Unlike the thief's account, it was 11 months old. It started small, with 1 USDC. On its second try it set a fee of minus 2 on a 1 USDC withdrawal, and its balance went up instead of down. So the bug could also make WAXUSDC out of nothing.
The bridge never signed the copycat's four tries, so nothing reached Solana. WAX replaced the contract's code four minutes after the copycat's last try. It added the transfer limits an hour and a half later, and that night it told users on X that it had paused the bridge.
No withdrawal was signed for 30 hours. The bridge started signing again on the afternoon of 23 October, beginning with the requests left over from the day before.
10 · What it meansWhat the WAX bridge hack means for users and other bridges
For WAX users, the bridge works again. Each transfer now has a cap. WAX says its own coin, WAXP, and the chain itself were not affected. If you bridged out on 22 October and your coins have not arrived, follow WAX's own channels. Do not pay anyone who offers to recover them.
For other bridges, this hack needed no stolen key and no clever code. It needed one number the contract trusted. A user can type a negative fee, so the contract has to check for one. The new caps would have held the USDC withdrawal to under 5% of what the thief took. We have looked at other thefts that crossed chains, such as the KelpDAO bridge hack and the SingularityNET hack.
On the same day, someone drained Arkadiko on Stacks through a vote, and that thief was also funded from Tornado Cash. We traced it in the Arkadiko hack.
11 · How we traced itMethod and limits
We read every action of the two accounts, the bridge and its token contract from public WAX history nodes. Then we followed the payouts on Solana, Ethereum and BNB Chain with Bitquery's data. We checked each hop between chains against Relay's public records. Our labels named the exchange, the mixer and the swap routers. The prices come from the thief's own swaps.
Any Solana, Ethereum or BNB Chain wallet here can be followed with the Bitquery MCP. It lets you ask an AI assistant where a wallet's money went. The full histories are also sold as files, as the Solana, Ethereum and BNB Chain datasets. Bitquery also does this work for clients through its crypto investigation services. We traced the CoinDCX hack the same way.
We read WAX history from three public history nodes. The longest record starts in March 2021, so 'first ever' and 'nobody had tried' cover March 2021 to 23 October 2026.
Values use the thief's own swaps: ETH at $2,410 and WBTC at about $81,900. USDC, USDT and DAI count as $1. SOL is valued at about $104, the rate the linked wallet got that morning.
We call the four deposit addresses HitBTC's because the wallets they were swept into, directly or through a collector, carry our HitBTC hot-wallet labels, and the sweeps follow an exchange's usual pattern. The Solana collector wallet itself carries no label.
The record shows which wallets moved money and when. It does not show who controls them, or whether HitBTC has frozen any account.
We tie the gas wallet to the thief through Relay's records, which name it as the sender of gas to both receiving wallets, and through the timing of each hop. We did not trace its Arbitrum funds before 22 October or the wallet that sent USDT through HOT. It also bridged a little ETH to a Tron address that morning; that TRX has not moved.
We infer that the copycat's second try added to its balance from its third: a withdrawal of 1 USDC with no fee needs a balance of 1, and the account never received any WAXUSDC in its whole history, which starts in November 2025.
The Artrade sale behind the 210.91 SOL followed more than 1,600 automated transfers by a wallet the linked Solana wallet had funded with SOL and ATR. We did not decode those transfers and make no claim about them.
12 · The addressesWhere to look
These are the main accounts, wallets and transactions in this story.
| Role | Address or transaction |
|---|---|
| Thief's WAX account | fasdfas.al |
| First withdrawal (WAX transaction) | 406b76e85ac057ac7322d4bf7ddbea6ac4a2b23539deaa00ea635d17518fb0c9 |
| Receiving wallet, Solana | 4H1piNZ8LsYhZGYhkbJDbPDSghxRj3HWxJqVz5dve8Q7 |
| Receiving wallet, Ethereum | 0x01664E199991b2F3fe412c2DE5B9b7A0dcDc5070 |
| HitBTC deposit address, Solana (USDC) | H15JEWrcrp1rTteRoorQTF4e54QF1QmZfxghBcT6ueo9 |
| HitBTC deposit address, Ethereum (15.58 ETH) | 0x62907e044ffe22a24aa8794ff2a6ea20598227bb |
| HitBTC deposit address, Solana (SOL) | 8UqqJUKGDyQxKkQduUUJgJZKngn9TZGpjdhGp23Hisde |
| HitBTC deposit address, BNB Chain | 0x28a7f31f0a9cc904f7e2d5485a1b01f50dd9f6f7 |
| HitBTC hot wallet, Ethereum | 0x80787af194c33b74a811f5e5c549316269d7ee1a |
| HitBTC hot wallet, Solana | DQ5JWbJyWdJeyBxZuuyu36sUBud6L6wo3aN1QC1bRmsR |
| Gas wallet (Ethereum, Arbitrum, BNB Chain) | 0x9a9935b48880867f7fd2a7e18cb5591ea91707be |
| Linked Solana wallet | rRmgU4dj2ND3HXBqreayVhLGDMoZwFyUSPfwXyLoMVr |
| Bridge vault, Ethereum | 0x24b22b031ae1b5a6b09f9a0fd33613a40e0d70e6 |
| Copycat's WAX account | lq52153yyb5r |
Follow the stolen coins in plain English
The Solana, Ethereum and BNB Chain side of this story comes from Bitquery's data. The Bitquery MCP server puts that data behind an AI assistant, so you can ask where a wallet's money went, or which labels an address carries, without writing a query. The full histories are also sold as files on the Bitquery Data Store, as Solana, Ethereum and BNB Chain datasets.
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, hold or withdraw any token or asset, or to use or avoid any protocol, exchange or service.
The findings describe transactions and balances observed on WAX, Solana, Ethereum, Arbitrum and BNB Chain between 15 June and 23 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 WAX, HitBTC, Alcor, Relay, HOT, KyberSwap, Velora, Artrade, GoPlus Security, The Crypto Times, Tornado Cash or any other named project, company, service or person describe what the public record shows about addresses and transactions linked to them, and what those parties have said in public. They are not statements about any party's intent, security practices, solvency or conduct, and nothing here asserts that any named party acted unlawfully or negligently. The wallets that took the 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.
FAQ
Was the WAX bridge hacked?
Yes. On 22 October an account on WAX withdrew USDC, USDT, DAI, WETH and WBTC through the bridge without paying for them. It set each withdrawal's fee to minus the amount, so its balance was charged nothing, and the bridge paid out on Solana and Ethereum.
How much was stolen in the WAX bridge hack?
About $90,500, with stablecoins at $1 and the rest at the thief's swap prices. Stablecoins made up most of it, and WETH and WBTC added about $15,100.
Where did the stolen funds go?
To HitBTC, a crypto exchange, within 38 minutes. The USDC went into a deposit address on Solana, and the other coins were swapped to ETH and sent to a deposit address on Ethereum. Both deposits were swept within the hour, and the coins went on to wallets our labels mark as HitBTC's.
Can HitBTC freeze the stolen funds?
An exchange can usually tie a deposit address to one customer account, and law enforcement can ask it to act. Whether HitBTC has frozen anything does not show on-chain, because the coins were already in its own wallets.
Is the WAX bridge working again?
Yes. It started signing withdrawals again on the afternoon of 23 October, with a new limit on each transfer.