On-chain investigationWAX · Solana · Ethereum22 October 2026

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.

At a glance
On 22 October an account withdrew $90.5K from the WAX bridge without paying for it. Each withdrawal set the fee to minus the amount, so the account was charged nothing, while the bridge paid out real USDC on Solana and USDT, DAI, WETH and WBTC on Ethereum. Within 38 minutes, all but 50 cents of it had gone into HitBTC deposit addresses. The wallet that paid for gas got its first ETH on Ethereum from Tornado Cash. A second account tried the same trick five hours later and got nothing.
$90.5K
Taken from the WAX bridge on 22 October
38 min
From the first withdrawal to HitBTC
$115.6K
Sent to HitBTC that morning by the thief's wallets
5 h 11 m
Until WAX replaced the contract code
Key findingsEach line has its own share link
  1. $90.5K

    Taken from the WAX bridge in five withdrawals over 86 seconds, each with the fee set to minus the amount.

  2. 38 min

    From the first withdrawal to the last stolen coin reaching a HitBTC deposit address.

  3. $15,100

    In WETH and WBTC. Early reports of a $75,000 loss counted only the stablecoins.

  4. Tornado Cash

    Where the gas wallet got its first ETH on Ethereum, 0.098 ETH. It sent 0.1 ETH back in after the theft.

  5. 5 h 11 m

    Until WAX replaced the contract code. A copycat tried the same trick minutes before the fix and got nothing.

  6. 97%

    Of the bridge's USDC on Solana went in one withdrawal. WAX added per-transfer caps 6 hours 45 minutes later.

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.

One minus signa normal withdrawal, and the thief's
A WAX BRIDGE WITHDRAWAL · THE NORMAL CASE AND THE ATTACKA normal withdrawalHolds 100 WAXUSDCthe WAX copy of USDCWithdraws 100fee 0Charged 100100 + 0 = 100Bridge pays 100 USDCon SolanaWhat the thief sentHolds 0 WAXUSDCa balance opened that secondWithdraws 52,986fee −52,986Charged 052,986 + (−52,986) = 0Bridge pays 52,986 USDCsigned 49 seconds laterSince 15 June, all 446 withdrawals by other accounts set the fee to 0.
Each withdrawal is charged the amount plus the fee. With the fee set to minus the amount, the charge was zero, and the bridge still paid.

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)WithdrawsFeeChargedPaid on
09:46:1852,986.497732 WAXUSDC−52,986.497732 WAXUSDC0Solana
09:47:3121,558.252354 WAXUSDT−21,558.252354 WAXUSDT0Ethereum
09:47:40840.2750339 WAXDAI−840.2750339 WAXDAI0Ethereum
09:47:422.54669928 WAXWETH−2.54669928 WAXWETH0Ethereum
09:47:440.10993227 WAXWBTC−0.10993227 WAXWBTC0Ethereum

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.

The thief took 81% or more of every vaultshare of each bridge vault's coins taken, 22 October
HOW MUCH OF EACH BRIDGE VAULT THE THIEF TOOKUSDC · Solana97% takenUSDT · Ethereum85% takenDAI · Ethereum81% takenWETH · Ethereum97% takenWBTC · Ethereumall but 87 satstaken by the thiefleft in the vault
Each withdrawal took most of what its vault held. The WBTC vault was left with 87 sats, about 7 cents.

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.

Each withdrawal against the new capsthe thief's withdrawals as a multiple of the per-transfer cap WAX set at 16:31 UTC
EACH WITHDRAWAL, MEASURED AGAINST THE CAP WAX ADDED THAT AFTERNOONUSDC21x the 2,500 USDC capUSDT22x the 1,000 USDT capDAI1.7x the 500 DAI capWETH10x the 0.25 WETH capWBTC11x the 0.01 WBTC capthe new per-transfer cap (1x)
Before 16:31 on 22 October, nothing stopped a single withdrawal of 52,986 USDC.

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.

What was taken: $90.5Kby token, at the thief's own swap prices
WHAT WAS TAKEN · $90.5K AT THE THIEF'S OWN SWAP PRICESUSDC$52,986USDT$21,558DAI$840WBTC$9,005WETH$6,138Stablecoins$75,385the ~$75K in reportsWETH + WBTC$15,100left out of themstablecoinsWETH and WBTC
USDC, USDT and DAI count at $1. WETH and WBTC are valued at the prices the thief got when it swapped them for ETH.

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.

TokenPaid onAmountValueShare of the vault
USDCSolana52,986.497732$52,98697%
USDTEthereum21,558.252354$21,55885%
DAIEthereum840.2750339$84081%
WETHEthereum2.54669928$6,13897%
WBTCEthereum0.10993227$9,005all 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.

From WAX to HitBTC in 38 minutesminutes after the first withdrawal, 22 October
FROM THE FIRST WITHDRAWAL TO HITBTC · MINUTES AFTER 09:46 UTC, 22 OCTOBERWAXSolanaEthereum0 min5 min10 min15 min20 min25 min30 min35 min40 minFive withdrawalsBridge signs all fiveGas arrives52,986 USDC claimedGas arrivesFour tokens claimedUSDC to HitBTC depositSwapped to ETH15.58 ETH to HitBTC deposit
Each receiving wallet needed gas before it could claim. The stolen coins sat in the thief's wallets for less than half an hour.

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.

Where the stolen coins wentfrom the WAX account to HitBTC's hot wallets
WHERE THE STOLEN COINS WENT · 22 OCTOBER, UTCWAX accountfasdfas.al5 withdrawalsSolana wallet4H1p…8Q7claims at 10:00Ethereum wallet0x0166…5070claims at 10:05Swapped to ETHKyberSwap, Velora,one unnamed contractHitBTC depositH15J…eo9in at 10:12HitBTC deposit0x6290…27bbin at 10:24HitBTChot walletsSolanaDQ5J…msRvia a collectorEthereum0x8078…ee1aUSDC4 tokens52,986 USDC15.58 ETH sent onswept 10:51swept 10:43
Both payouts went into deposit addresses and were swept within the hour. The ETH went straight to a HitBTC hot wallet; the USDC went through a collector first.

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.

$115.6K reached HitBTC that morningfour deposits on 22 October, by source
WHAT REACHED HITBTC ON 22 OCTOBER · $115.6K IN FOUR DEPOSITSStolen USDC (Solana)$52,986deposited 10:12, swept 10:51Stolen tokens swapped to ETH$37,550deposited 10:24, swept 10:43SOL from a linked wallet$21,937deposited 10:34, swept 11:34USDT from the gas wallet (BNB Chain)$3,124deposited 10:40, swept 10:53Red: coins stolen from the bridge. Violet: money from the thief's other wallets, not from the bridge.
The red parts are the stolen coins. The violet parts came from the thief's other wallets, not from the bridge.

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.

The wallet that paid for gasone address used on Ethereum, Arbitrum and BNB Chain
THE WALLET THAT PAID FOR GAS · 0x9a99…07be ON ETHEREUM, ARBITRUM AND BNB CHAINTornado Cash0.1 ETH pool0.098 ETH at 06:51Same wallet, ArbitrumWBTC, WETH, USDCbridged 08:00–08:02HOT bridge1,783 USDTat 09:39Gas wallet, Ethereum0x9a99…07befirst funds: TornadoGas wallet, BNB Chainsame address1,418 USDT via RelayLinked Solana walletrRmg…MVr · 06:52Tornado Cash0.1 ETH back in · 10:37Solana wallet0.095 SOL gas · 09:58Ethereum wallet0.0082 ETH gas · 10:03HitBTC deposit3,124 USDT · 10:40via Relayvia Relayvia Relay
Grey shows Tornado Cash. Violet is money moving through the gas wallet, red is gas sent to the receiving wallets, and teal is the deposit at HitBTC.

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 copycat's four triesthe second account's withdrawals, 22 October, in UTC
THE COPYCAT'S FOUR TRIES · ACCOUNT lq52153yyb5r, 22 OCTOBER, UTCTimeWithdrawsFeeChargedWhat it shows14:47:471 USDC−10the same trick, on 1 USDC14:47:501 USDC−2−1balance goes up by 114:47:521 USDC01withdraws that 1, fee 014:52:50195.68 USDC−195.680the real attemptThe bridge signed none of the four, so nothing was paid out on Solana.
On the second try the fee was minus 2 on a 1 USDC withdrawal, so the balance went up by 1 instead of down.

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.

WAX's response22 and 23 October, in UTC
WAX'S RESPONSE · 22–23 OCTOBER, UTCno withdrawal signed for 30 hours22 Oct 12:0023 Oct 00:0023 Oct 12:00First withdrawal · 09:46Last stolen coin at HitBTC · 10:24Copycat tries14:47Contract code replaced14:57Withdrawal caps set16:31WAX posts on X22:02GoPlus posts its analysis11:56Withdrawals signed again15:52
The grey band marks the 30 hours when the bridge signed no withdrawals.

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.

Limits on these findings

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.

RoleAddress or transaction
Thief's WAX accountfasdfas.al
First withdrawal (WAX transaction)406b76e85ac057ac7322d4bf7ddbea6ac4a2b23539deaa00ea635d17518fb0c9
Receiving wallet, Solana4H1piNZ8LsYhZGYhkbJDbPDSghxRj3HWxJqVz5dve8Q7
Receiving wallet, Ethereum0x01664E199991b2F3fe412c2DE5B9b7A0dcDc5070
HitBTC deposit address, Solana (USDC)H15JEWrcrp1rTteRoorQTF4e54QF1QmZfxghBcT6ueo9
HitBTC deposit address, Ethereum (15.58 ETH)0x62907e044ffe22a24aa8794ff2a6ea20598227bb
HitBTC deposit address, Solana (SOL)8UqqJUKGDyQxKkQduUUJgJZKngn9TZGpjdhGp23Hisde
HitBTC deposit address, BNB Chain0x28a7f31f0a9cc904f7e2d5485a1b01f50dd9f6f7
HitBTC hot wallet, Ethereum0x80787af194c33b74a811f5e5c549316269d7ee1a
HitBTC hot wallet, SolanaDQ5JWbJyWdJeyBxZuuyu36sUBud6L6wo3aN1QC1bRmsR
Gas wallet (Ethereum, Arbitrum, BNB Chain)0x9a9935b48880867f7fd2a7e18cb5591ea91707be
Linked Solana walletrRmgU4dj2ND3HXBqreayVhLGDMoZwFyUSPfwXyLoMVr
Bridge vault, Ethereum0x24b22b031ae1b5a6b09f9a0fd33613a40e0d70e6
Copycat's WAX accountlq52153yyb5r
Run it yourself

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.

Follow the 15.58 ETH from the Ethereum wallet to HitBTCTrace where any Solana or Ethereum wallet's money came from and wentCheck an address against Bitquery's labelsRun your own SQL over Solana, Ethereum and BNB Chain transfers
Explore Bitquery MCP →WAX actions read from public history nodes; Solana, Ethereum and BNB Chain from Bitquery. Data read on 24 October 2026.
Legal disclaimer

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.