On-chain investigationBNB Chain27 October 2026

29 Predict.fun wallets lost $398K, each drain signed with the owner's own key. A first wave hit five days before the first public post

Traders on a BNB Chain prediction market woke up to missing money. We followed every transfer to learn how it left, when it really started and where it went.

At a glance
Between 22 and 27 October, someone emptied 29 accounts on Predict.fun, a prediction market on BNB Chain, and took 397,708 USDT. Each drain was signed with that wallet's owner key, and no Predict.fun contract was broken. We found no public report of the 22 October wave. Within two hours of each wave the money was on Ethereum, and 166.8 ETH of it went into Tornado Cash. Predict.fun blames a hacked API docs site and has promised refunds. One more account was drained about an hour after that statement.
397,708
USDT taken from 29 Predict.fun accounts
2 waves
22 and 27 October, five days apart
166.8 ETH
Sent into Tornado Cash
0
Predict.fun contracts called in 33 drains
Key findingsEach line has its own share link
  1. $398K

    Taken from 29 Predict.fun accounts in two waves, 22 and 27 October: 397,708 USDT.

  2. 0 contracts

    Called in 33 drains. Each was signed with the wallet's own owner key, so no Predict.fun contract was broken.

  3. 5 days

    Between the waves. We found no public report of the first, 125,029 USDT from six accounts on 22 October.

  4. 11 min

    From the main run on 27 October to the first Tornado Cash deposit. The last deposit was done before the first post on X.

  5. 166.8 ETH

    Went into Tornado Cash, after crossing from BNB Chain to Ethereum through Relay, LI.FI and Across.

  6. 1 hour

    After Predict.fun's statement, one more account lost 4,900 USDT the same way, and the money went into Railgun.

01 · What happenedWhat happened in the Predict.fun hack

On Tuesday morning, traders on Predict.fun found money missing. One posted that about five thousand dollars was gone and that others had been hit too. Later that day, Predict.fun put the losses near $400K.

Predict.fun is a prediction market on BNB Chain. You buy shares in an outcome, like who wins a match or where bitcoin closes, and get paid if you are right. Predict.fun also runs the prediction market inside Binance Wallet.

Bitquery traced every transfer with its BNB Chain data. The record shows 29 accounts emptied of $398K in USDT, a dollar stablecoin, in two waves five days apart. Every theft was signed with the account's own owner key, the secret that controls it. No Predict.fun contract was broken. The 22 October wave took $125K, and we found no public report of it. Within two hours of each wave, nearly all the money had crossed to Ethereum and gone into Tornado Cash, a mixer that hides where coins came from. The drains did not stop when Predict.fun spoke up. One more account was hit an hour after its statement.

02 · How the accounts workHow a Predict.fun account holds your money

Your money on Predict.fun sits in a smart wallet. That is a wallet built as a small program on BNB Chain, and Predict.fun creates one for you when you sign up. Its design is Kernel, made by the wallet company ZeroDev.

A smart wallet obeys one owner key. Predict.fun's sign-in runs on Privy, a service that creates that key for each user and keeps it behind their login. Any transfer the owner key signs, the wallet carries out.

Traders who run bots use Predict.fun's API, a way to place orders from their own code. Predict.fun's own developer kit tells them to use the Privy key exported from their account. Once a key leaves the account, whoever gets a copy can do anything the owner can, including send all the money out. We have traced bot wallets drained with their own keys before, at LootBot and Bloom.

Smart wallets also pay gas, the small network fee on every action. A gas sponsor is a service that pays it for you and bills you in a token instead, here USDT.

03 · Not a contract hackNot a contract hack: the owner key signed every drain

Every drain looked the same. First, an action signed with the owner key let a gas sponsor take USDT for fees. Seconds later, a second action sent the USDT to a fresh address. That second step was the theft.

Each time, the smart wallet checked the signature as it always does. It worked out who had signed and found its own owner key. So the wallet did what its owner key told it. We checked all 33 drain transactions, and none touched a Predict.fun market or exchange contract.

One drain, two steps, the owner's own keywhat each of the 32 drain transactions did
ONE DRAIN, TWO STEPS · BOTH SIGNED WITH THE OWNER KEYOwner key signsthe key the wallet obeysset when it was openedStep 1: approvelet Candide's gas sponsortake USDT for feesStep 2: transferseconds laterUSDT to a fresh addressWallet checkssigner = registered ownerso it carries it outThe same in all 33 drains:Signed bythe wallet's owner key, in all 33Checked bythe wallet's normal owner check (Kernel smart wallet)Gas paid byCandide's USDT gas sponsor, about 0.2 USDT a timeSent to the chain byCandide's bundler in 28, another bundler in the restOwner key changed first?no, one key per account since it was openedPredict.fun contracts called0
The wallet ran its normal owner check every time, and the key it found was its own.

The attacker's tools came from outside Predict.fun. The gas sponsor belongs to Candide, a public wallet company. So does the bundler in 28 of the 33 drains. A bundler is the service that sends these actions to the chain. Predict.fun's wallets were set up through other providers. Outside the two drain days, nobody used that sponsor at all in October. The attacker brought its own kit and needed nothing from Predict.fun's servers.

Each account had a single owner key, set when it was opened, and none was changed before the drains. Whoever did this held 29 different keys.

04 · The first waveThe first wave: 22 October

The drain everyone saw on Tuesday was the second. Five days earlier, on 22 October, the same tools hit six accounts. It began with three test transfers of a dollar or two from one account, spread over the afternoon. Then it got serious. Five more accounts were emptied in under an hour, ending with a single transfer of 82,000 USDT.

Two waves, five days apartUSDT taken, adding up, 22 and 27 October (UTC)
USDT TAKEN, ADDING UP · EACH DOT IS ONE DRAIN, SIZED BY AMOUNT22 October0100K200K13:0014:0015:0016:00125,029 USDT27 October0100K200K05:0007:0009:0011:0013:0015:00272,679 USDTTimes in UTC. The three test transfers on 22 October were 1, 1 and 2.10 USDT.
The first wave took 125,029 USDT. The second took 272,679 USDT, most of it in 34 minutes.

The account behind it lost $109K in two transfers, the biggest loss in this story. Less than an hour and a half later, that day's money was in Tornado Cash.

We found no public post about these drains before the second wave. Predict.fun's own total, about $400K, only adds up if it counts them, so its figure appears to include the first wave.

05 · 27 October27 October: 19 wallets in 34 minutes

The second wave opened with one small drain just after 5am UTC. Twenty minutes later the main run began. Over the next 34 minutes, 19 accounts lost $262K, about one every two minutes.

Each stolen amount went to a fresh pass-through address. Within a minute, that address sent it into Relay, a bridge that moves money between chains, and Relay paid out ETH on Ethereum seconds later. The whole trip, from the victim's account to ETH on another chain, took a minute or so each time.

19 drains in 34 minutes27 October, main run: drain, bridge deposit, ETH payout
27 OCTOBER, MAIN RUN · DRAIN → RELAY DEPOSIT → ETH · ROWS IN USDTdrain on BNB Chainsent into RelayETH paid on Ethereum05:3005:4005:5006:009,6307,5606,62560,50053,70041,00020,8006,2806,04517,3853,9953,4202,5455,7003,5503,0002,0852,9304,845Each row runs from the drain to the payout. Most rows look like a single dot because the whole trip took about a minute.
Every stolen amount was on Ethereum as ETH within about a minute of leaving the account.

All but one of those amounts was a round multiple of five dollars. Two more drains came later that morning through LI.FI, a bridge router, and Across, another bridge. One of them hit an account for the second time. The last of the morning, a small one, came just before 9am UTC.

06 · Who got hitWho got hit

All 29 accounts traded on Predict.fun in the week before they were drained. Twelve made more than a thousand trades that week, which usually means a bot. The busiest made hundreds of thousands. Five made fewer than a hundred.

Bots and light traders were both hittrades in the week before against USDT lost, one dot per account
EACH DOT IS ONE ACCOUNT · TRADES IN THE WEEK BEFORE vs USDT LOST22 Oct27 Oct1101001K10K100K1101001K10K100KTrades on Predict.fun in the week before (log scale)USDT lost (log scale)1,000 trades a week358,433 trades5 trades, 53,700 USDT lostTrades: transactions with Predict.fun's four exchange contracts. Counts are approximate.
The account that lost 53,700 USDT made only five trades that week. The busiest made hundreds of thousands.

Bots are a big part of prediction markets. On Polymarket, about 1 in 200 wallets trade around the clock, and they make 63% of all trades. A mix of heavy bots and light accounts fits one group best: traders who used the API, which is how bots trade. A light user who tried the API once would have exported the key just the same.

Losses ranged from a few dollars to $109K. Most were in the thousands, and the five biggest made up 73% of all the money taken.

Five accounts lost 73% of the moneyUSDT lost by each of the 29 accounts
USDT LOST PER ACCOUNT, LARGEST FIRSTdrained 22 Octoberdrained 27 October0xd14c…a660109,0000x9064…d3ab60,5000x107d…cf0053,7000x57fb…718a44,5380x9bc4…b56e20,8000x91ea…ed9317,3850xa516…4d4013,9200xa99a…0da49,6300x3b8b…c54c7,5600xa068…6f066,6250xa342…e56b6,2800x39ca…f84d6,0450xdd2b…e79b5,7000xd02b…df7d4,9000x8686…ab884,8450x9e61…7ea53,9950x0d3a…9cec3,5500xc291…4a6c3,4200xaf8f…f9b73,0000xc621…20352,9300x08c7…4e672,5450x62d7…27832,4350xf05b…13522,0850x773b…8e4a1,4100x8ae7…c0d05350x49a6…e3741600x19af…97f01110x6b95…df5b1000xe9de…b8aa4.10The median account lost 4,845 USDT.
The median account lost 4,845 USDT.

The accounts were opened over the past ten months, the oldest in December. Two were opened just three days before they were emptied.

07 · The money trailFrom BNB Chain to Tornado Cash

On both days the money took the same road. USDT left BNB Chain through Relay, LI.FI or Across and landed on Ethereum, either as ETH or as USDT that was swapped to ETH. Then almost all of it went into Tornado Cash, which pools deposits so a withdrawal cannot be matched to the deposit behind it. We looked at that mixer in our Tornado Cash audit.

The same road on both dayshow the money crossed from BNB Chain to Tornado Cash
BNB CHAIN → BRIDGE → ETHEREUM → TORNADO CASH22 October6 accounts125,029 USDTdrained 12:36 to 15:39Relay and LI.FI4 Relay depositsLI.FI for the rest3 Ethereum walletsplus one that pooledthe leftoversTornado Cash51.8 ETH23 deposits27 October23 accounts272,679 USDTdrained 05:10 to 15:42Relay, LI.FI, Across22 Relay depositsLI.FI and Across for 2Ethereum wallets6 got 112.8 ETH2 more via AcrossTornado Cash115 ETH16 depositsEach Relay deposit went from a fresh pass-through address and came out as ETH within seconds.The 27,000 USDT LI.FI drain on 22 October was paid out as ETH to the same main wallet.The two LI.FI and Across drains came out as USDT, swapped to ETH, then pooled with change from the main run.The drain after Predict.fun's statement went into Railgun instead. Change left unspent: 0.043 and 0.048 ETH.Fake 'ETH' tokens sent by address-poisoning bots are left out.
Relay carried most of it. LI.FI and Across carried the rest.

Tornado only takes fixed sizes, so the deposits came in lots. The 22 October drains put 51.8 ETH into the mixer and the 27 October drains put in 115 ETH. The one drain after Predict.fun's statement took a new exit. Its 2.08 ETH went into Railgun, another tool for hiding coins, five minutes later.

166.8 ETH into Tornado Cashdeposits by lot size, 22 and 27 October (UTC)
ETH INTO TORNADO CASH, ADDING UP · MARKS SHOW THE LOT SIZE10 ETH1 ETH0.1 ETH22 October05010015:3016:0016:3017:0051.8 ETH27 October05010005:3006:0006:3007:0007:30115 ETHRead from Tornado Cash's own deposit records. ETH in units; times in UTC.
Tornado only takes fixed sizes, so the attacker paid in lots of 10, 1 and 0.1 ETH.

Small change stayed behind. The ETH from two small drains on Tuesday morning, a few hundredths of an ETH each, sits in two wallets of its own. Neither wallet had moved when our data ends. Both can be watched with the Bitquery MCP, which lets you ask an AI assistant where a wallet's money goes next.

Scammers showed up too. Bots sent dust from look-alike addresses and made fake "ETH" tokens appear to leave the attacker's wallets, hoping to be copied by mistake later. That trick is address poisoning. We left those fake transfers out of every total.

08 · Faster than the alarmFaster than the alarm

On Tuesday, the first Tornado deposit came under 11 minutes after the main run began. In the first wave it took under four minutes after the biggest drain. When the first trader posted, just after 8am UTC, the last deposit of the day was already 42 minutes old.

The money moved before the news diddrains, mixer deposits and public posts, both days (UTC)
WHEN THE MONEY MOVED, AND WHEN ANYONE SAID SO (UTC)22 Oct12:0014:0016:0018:00first test82,000 USDT drainedTornado startsTornado ends27 Oct05:0008:0011:0014:0016:30main runTornado startsTornado endsfirst post on XOnchain Lens alertPredict.fun statementone more drainNo public post about 22 October came before the second wave. On 27 October the last deposit was 42 minutes old at the first post.
We found no post about 22 October. On 27 October the mixer deposits were done before the first post, and one more drain came after Predict.fun's statement.

Speed matters. A bridge or an exchange can sometimes freeze stolen money, but only if someone raises the alarm while the money is still sitting with them. In this case, the money was in the mixer before anyone knew to ask.

09 · What Predict.fun saysWhat Predict.fun says, checked against the chain

Predict.fun answered on X that afternoon. It said some of its users had lost about $400K. Its first finding is that its API documentation site, run by an outside host, may have been hacked, and the site is now offline. Predict.fun said it will "fully reimburse all affected users" and publish a full report.

The size checks out. Our two waves add up to $398K, within 1% of Predict.fun's own figure, and that only works if the company counted the first wave too.

The drains did not stop with the statement. About an hour later, at 15:42 UTC, one more account lost 4,900 USDT the same way, and that money went into Railgun. Taking the docs site down does not stop keys that were already copied.

The cause fits too. API traders put the exported owner key in their own code, and the docs are where they learn how. A hacked docs page could have run code that copied keys, or talked visitors into pasting them. Either way, it would hand over the exact key that signed each drain. That is our reading of the record. Predict.fun has not said how the site was used.

Two things are still open. Predict.fun describes a short window, yet the drains came on two days five days apart, so keys taken once may have been used twice. And the small gap that remains could be drains by another route that our trace did not catch.

10 · The first reportsChecking the first reports

The first accounts on X came within hours, from a trader who lost money, from the researcher Naeven and from the alert account Onchain Lens. Here is how they hold up.

SourceClaimRecordVerdict
dethectiveDrained for about $5,000; names the receiving addressThat address took 24,655 USDT from seven accounts, 06:01 to 06:06 UTC. Two of those drains were near $5,000Matches
Naeven19 victims19 accounts in the main run of 27 October; 29 over both wavesRight for 27 October
Naeven105 ETH, about $260KRelay paid 112.8 ETH for those 19; 27 October took 272,679 USDTLow
Onchain LensPredict.fun on BNB Chain likely exploitedNo Predict.fun contract was called. Owner keys signed every drainNot a contract exploit
Onchain LensAbout $300K moving from multiple contractsThe contracts are the victims' smart wallets. $398K over two wavesLow
Predict.funAbout 400,000 USDT397,708 USDT over two wavesWithin 1%
Predict.funIts API docs site may have been hackedThe owner keys signed, and API traders hold exported keysFits, not proven
How big was it?public totals against the record, in US dollars
HOW BIG WAS IT? PUBLIC COUNTS AGAINST THE RECORD (USD)Naeven$260KOnchain Lens$300KPredict.fun$400KOn-chain, 27 Oct only$273KOn-chain, both waves$398KPredict.fun gave about 400,000 USDT. USDT counts at $1.
Predict.fun's own figure is the closest, because it counts both waves.

11 · If you use Predict.funIf you use Predict.fun

Predict.fun says it will refund everyone who lost money. Until its full report is out, the record points to one habit worth changing. The drain after the statement shows it is urgent.

If you ever exported your Privy key, for a bot or just to try the API, treat that key as exposed. Stop using it and move your funds to a wallet whose key has never left your own device. A key that has been copied into code, a browser tab or a bot can be used by anyone who got hold of it, for as long as the wallet holds money.

12 · How we traced itHow we traced the Predict.fun hack

We started from the address in the first public post and worked outward. For every drain, we read the full call record to see which key signed and which contracts it touched. Owner keys come from the record each smart wallet writes when it is created. On Ethereum, we used Bitquery's Ethereum data to match each Relay deposit to its payout by time and price. We counted Tornado deposits from the pools' own records. Our address labels identified Relay, LI.FI, Across and Candide. Relay's public records confirmed five of the bridge moves.

The full BNB Chain and Ethereum histories are also sold as files. Bitquery does this kind of tracing for clients through its crypto investigation services. We followed the X100 hack the same way.

Limits on these findings

Transfers were read to 16:22 UTC on BNB Chain and 15:57 UTC on Ethereum on 27 October. Anything after that is not covered.

USDT counts at $1. ETH amounts are the amounts recorded on-chain.

Trade counts come from database copies that can differ slightly from each other, so treat them as approximate.

The pass-through addresses on BNB Chain may be one-time deposit addresses run by Relay. They behave the same either way.

Two more accounts got the attacker's first step on 27 October with no drain after it. They are left out of the counts.

The record shows which key signed each drain. It does not show who held that key or how it was obtained.

13 · The addressesWhere to look

These are the main wallets and transactions in this story, with the full address under each. Each one links to the explorer.

0xd14ca6d1173a710706149a222b7e20324003a660
0xe3ceb8ca8d391e33e6538f51ce8fbc4533ed08d38b07b2a4380bc22f072ecf0a
0x1dcc6393610d2158fa20fa436f7fbb6fd8f741b0580d627498d5673aebca9c72
0x8b001d7378dbc19c1c62e39c0fc9ffad84182fba
0x8b1f6cb5d062aa2ce8d581942bbb960420d875ba
0xa3dc0ecd2f88dd1f4b0dde9e7ce33be732a0abbc
0xd500a43442253a4b92a025f6604df2dd57d78e6f
0x02f860b956253fe802fcd09d7dbb5c6bc55d9210977ee49098c96e3e556aad7b
0x0f6b5c0eaac200dd321bd1fc5d8cb03a4ce98c11
0xa82a374aeba53d770628cb2ebcf05f7db7853700
0xa0fb7152744986ba6f11436167b6b5f7d20c295d9ed79757c64d278f71e725af
0x729f92cc97f0f16cf6edfb8d78a781ace26166e8
Run it yourself

Follow the Predict.fun money in plain English

Every transfer in this story comes from Bitquery's BNB Chain and Ethereum 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 history is also sold as files on the Bitquery Data Store, as the BNB Chain dataset and the Ethereum dataset.

Watch the attacker's leftover ETHTrace any BNB Chain or Ethereum wallet across a bridgeCheck an address against Bitquery's labelsRun your own SQL over transfers on both chains
Explore Bitquery MCP →BNB Chain and Ethereum transfers, calls and events from Bitquery. Data read on 27 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 or hold any token or asset, or to use or avoid any prediction market, wallet, bridge, protocol, exchange or service.

The findings describe transactions and balances observed on BNB Chain and Ethereum between 22 and 27 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 Predict.fun, Privy, ZeroDev, Candide, Relay, LI.FI, Across, Tornado Cash, Railgun, Binance, Polymarket, dethective, Naeven, Onchain Lens 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 Predict.fun hacked?

Its users' wallets were. Over two waves in late October, someone used the owner keys of 29 Predict.fun accounts to take about $398K in USDT. No Predict.fun contract was broken. Predict.fun says its API documentation site may have been hacked.

How much was stolen in the Predict.fun hack?

The record shows about $398K in USDT taken from 29 accounts in two waves. That is close to Predict.fun's own figure of about $400K.

Is Predict.fun safe to use?

The drains used owner keys, and nothing in the record shows a flaw in Predict.fun's markets. Predict.fun has taken its API docs offline and promised a full report. Anyone who exported their Privy key should treat it as exposed and move their funds.

Will Predict.fun refund the victims?

Yes. Predict.fun said on X that it will fully repay every affected user for funds lost in this incident.

What happened to the Predict.fun API docs?

Predict.fun says its API documentation site, hosted by an outside provider, may have been hacked. It has taken the site offline while it investigates.

Where did the stolen money go?

It crossed from BNB Chain to Ethereum through Relay, LI.FI and Across, and 166.8 ETH went into Tornado Cash within two hours of each wave. The last drain, after Predict.fun's statement, went into Railgun instead.