On-chain investigationEthereum24 October 2026

One millionth of a token won the X100 Senate. Then $4.85M left its only trading pool

Three wallets walked through the same open door at X100 in half an hour. We followed every coin, from the vote to the wallets that hold it today.

At a glance
On 24 October, three wallets used X100's own voting system to drain its treasury. X100's Senate has three seats, held by whoever locks up the most X. The first attacker took two of them with a flash loan, by locking one millionth of an X more than a member, then voted to make the treasury sell 400,000 X for $35.68. It left with $4.75M, most of it money the Senate's own members had put into the pool minutes earlier. A second attacker took $96,382 and cashed out through ChangeNOW. The first attacker's 2,022.86 ETH has not moved, and two seats are still open to anyone.
$4.85M
USDT taken from X100's pool in two transactions
0.000001 X
The margin that won the first two Senate seats
99%
Of the pool's new money that came from Senate members
2,022.86 ETH
The first attacker's ETH, unmoved in five wallets
Key findingsEach line has its own share link
  1. $4.85M

    Taken in USDT from X100's only trading pool in two transactions, 24 minutes apart.

  2. 0.000001 X

    The margin that won two of the three Senate seats. Each attacker locked a hair more X than the stake it had to beat.

  3. 99%

    Of the USDT that went into the pool on the day of the attack came from Senate members buying X. The last buy landed two minutes before the attack.

  4. $35.68

    What the treasury got for 400,000 X. The proposal set the minimum price to zero and used a pool the attacker had just made.

  5. 2,022.86 ETH

    The first attacker's haul, swapped to ETH and parked in five new wallets. None of it has moved.

  6. 2 of 3

    Senate seats still held by the second attacker's helper contracts, which take calls from anyone. The treasury's sell limit is used up.

01 · What happenedA vote won by one millionth of a coin

A stranger won a vote at X100, a new crypto project, and took $4.75 million. The winning margin was one millionth of a coin. Two more wallets used the same trick within half an hour. By then, the coin's only market was close to empty.

X100 is a new crypto token on Ethereum. Its coin is called X, and most of it sits in smart contracts, programs on the blockchain that hold coins and follow their code. In a post on X, the project said a Senate would decide how those coins are used in its market. The Senate is three seats. The three wallets that lock up the most X hold them, and any two of them can tell X100's treasury what to do with its coins.

The first attacker borrowed nearly $2 million for a few seconds and used it to buy two of those seats. Then it voted to make the treasury sell 400,000 X into a market the attacker had set up moments before. The treasury got $35.68 back. The attacker sold part of that X in the real market, paid back the loan and kept the rest.

Bitquery traced all three attacks of 24 October with its Ethereum data and the treasury's own records. Most of the money the first attacker took had arrived only minutes before, from X100's own Senate members, who were buying X. A second attacker took a smaller share and was cashing out within half an hour. The first attacker's ETH has not moved since. Two of the three seats are still held by contracts that anyone can use. And some of the first public counts were wrong, including how many wallets hold the stolen ETH.

02 · How the Senate worksLock up X, get a seat, steer the treasury

X100 keeps its treasury in a contract called the Freezer. Holders "freeze" X in it, which locks the coins for one, three or five years. Anyone who has frozen X can pay a 100 X fee to stand for the Senate.

The Senate is simply the three wallets with the most X frozen at any moment. The amount each has frozen is its stake. A seat holder can propose an action for the Freezer, such as adding its X to the market or swapping X for dollars. Two yes votes pass it. It can then run straight away, in the same transaction as the vote. A transaction is one signed instruction to the blockchain, and everything inside it happens together or not at all.

How a Senate vote moves the treasurythe Freezer's rules, read from its verified code
FIVE STEPS FROM LOCKED X TO A TREASURY SWAPLock Xfreeze any amount+ 100 X fee to standRank by staketop 3 stakes right now= the 3 seatsPropose + vote2 of 3 yes votes passno waiting periodExecutethe Freezer runs itsame transactionTreasury swapany pool that existsprice set by proposerThe attackers changed nothing. They used each step as written.Seats3, set by whoever has the most X locked at that momentTo pass2 yes votes out of 3Waiting timenone: propose, vote and execute can share one transactionPool checkthe pool only has to exist; anyone can create onePrice checkset by the proposal; every attacker set it to zeroSell limit1,000,000 X into markets, minus X taken back; all of it used
Every step worked as written. The attackers only needed the most locked X for a few seconds.

Two more details in the code made the attack cheap. A swap proposal checks only that the pool it names exists, and anyone can create a new pool in seconds. The proposal also sets its own minimum price, and all three attackers set it to zero.

There are two guards. After every proposal, the Freezer must still hold at least as much X as its users have frozen, which kept users' locked X out of reach. And the treasury may put no more than 1,000,000 X into markets, minus any X it takes back. That limit capped the damage. The attackers used every last bit of it.

03 · Launch dayThe treasury filled up the same afternoon

The Senate was brand new. Every X was created in one go a month earlier and sent to a single wallet. On the day of the attack, that wallet and one other moved 13.0 million X into the Freezer. The last big transfer landed less than an hour before the first attack. Three wallets formed the Senate that lunchtime, with 1,000 X frozen each.

On Ethereum, X trades in one place, a pool on Uniswap. A trading pool holds two coins, here X and USDT, Tether's dollar stablecoin. Traders swap one for the other, and the mix in the pool sets the price. That morning the pool held only a few thousand dollars. Within an hour of forming, the Senate had passed six proposals that added 600,000 X from the treasury to the pool, as six separate deposits.

Launch day, then the attack24 October, 11:00 to 15:00 UTC
24 OCTOBER, UTC · X100'S LAUNCH DAY AND THE ATTACK11:0012:0013:0014:0015:00TreasurySenateSenate buysAttacks1.0M X in10M X in2M X inSenate formed6 liquidity votes$55,869$100,000$846,525$1.00M$2.82M1st attack2nd3rd
The treasury and the Senate both took shape that afternoon, and the pool filled up with them. The first attack came 47 minutes after the last big transfer into the treasury.

Then the buying started. Senate members bought X with USDT and froze much of it to raise their stakes. The biggest buyer was the member wallet 0xa13a. In June it had received $5 million in USDT from a wallet our labels mark as a Bitget hot wallet. It bought three times, and its last and largest buy, at $50.83 per X, filled the pool to the highest level it ever reached.

The pool peaked at $4.75M, two minutes before the attackUSDT held by the X/USDT pool on Uniswap, 24 October (UTC)
USDT IN X100'S ONLY TRADING POOL, 24 OCTOBER (UTC)$0$1M$2M$3M$4M$5M11:0012:0013:0014:0015:00$4.75M at 14:09:47, after a $2.82M buy14:11:471st attacktakes 99.98%13:27 a liquidity provider withdraws $135,726
Each step up is a purchase of X. The pool never refilled after the first attack.

Two minutes after 0xa13a's last buy, the first attack took nearly all the pool's dollars.

The Senate's members supplied 99% of the moneyUSDT that went into the pool from 11:00 until the first attack
WHO PUT USDT INTO THE POOL, 11:00 TO THE FIRST ATTACK · $4.89M IN ALLSenate member 0xa13a…716e$3.88M · 79%Senate member 0xe921…308b$946,525 · 19%Senate member 0xb18c…7cb2$7,580 · under 1%Everyone else$55,333 · 1%Counts buys only; the 13:27 liquidity withdrawal is left out.
Counts purchases of X by each wallet. The biggest buyer, 0xa13a, held the first Senate seat all day.

So the prize was mostly the Senate's own money. The three member wallets supplied 99% of the dollars that went into the pool that day before the attack. At the last price, the whole supply of X was worth $712 million on paper, while the pool that set that price held less than $5 million.

04 · One millionth of a coinHow a seat was won by the last digit

Seats go to the three biggest stakes, so to win two of them you have to beat the second-biggest. Just before the attack, that was the member wallet 0xe921.

The first attacker created two helper contracts and froze a hair more X in each than 0xe921 held. The gap was one millionth of an X, the smallest amount the token can count. That was enough. The helpers took seats two and three, and two seats out of three is a majority.

One millionth of an Xthe three Senate seats at four moments on 24 October
THE THREE SENATE SEATS, BY X LOCKED · SNAPSHOTS ON 24 OCTOBER (UTC)12:17 · Senate formedSeat 1 · 0xb18c (member)1,000 XSeat 2 · 0xa13a (member)1,000 XSeat 3 · 0xe921 (member)1,000 X14:03 · before the attackSeat 1 · 0xa13a (member)20,500 XSeat 2 · 0xe921 (member)19,000 XSeat 3 · 0xb18c (member)1,000 X14:11:47 · 1st attackSeat 1 · 0xa13a (member)20,500 XSeat 2 · 1st attacker19,000.000001 XSeat 3 · 1st attacker19,000.000001 XOut · 0xe921 (member)19,000 X14:35:59 · 2nd attackSeat 1 · 0xa13a (member)75,500 XSeat 2 · 2nd attacker19,000.000002 XSeat 3 · 2nd attacker19,000.000002 XOut · 1st attacker19,000.000001 XEach attacker locked one or two millionths of an X more than the stake it had to beat.
Each attacker locked a tiny fraction more X than the stake it needed to beat. The member wallets' later top-ups could not win the seats back.

Within a minute, 0xa13a began freezing more X, in six transactions over ten minutes. It made no difference. One wallet holds one seat, and the other two were already gone.

Twenty-four minutes later, a second attacker played the same game, one millionth more again, and pushed the first attacker out.

Frozen X stays locked for at least a year, so the X behind those seats is stuck in the Freezer. It cost $1.94 million, and the attack covered that and left $4.75 million on top.

05 · The flash loan governance attackThe first attack, step by step

A flash loan is a loan that is borrowed and repaid inside one transaction. If the money is not back by the end, the whole transaction is cancelled, so the lender takes no risk and asks for no collateral. For a few seconds, anyone can act like a whale.

The first attack was a single transaction. It borrowed USDT from Aave, a lending app, and spent almost all of it on X. The two new helpers froze that X and took their seats. One of them proposed a swap, with the description "testnet flash governance proof". The other voted yes, and the proposal ran at once.

The proposal told the Freezer to sell 400,000 X for USDT in a PancakeSwap pool. That was all the room left under the treasury's limit after the Senate's own deposits. The attacker had made that pool earlier in the same transaction and put just $100 in it. With the minimum price at zero, the Freezer took whatever that tiny pool could pay. That was $35.68. On paper, the X it gave away was worth $20.3 million.

The attacker then pulled its X back out of its own pool and sold part of it into the real pool on Uniswap. It paid back Aave and kept $4.75 million.

Borrow, vote, sell, keep $4.75Mthe first attack's USDT, all inside one transaction
THE FIRST ATTACK IN ONE TRANSACTION · USDT IN AND OUT, 14:11:47 UTC$0$2M$4M$6M+$1.94MBorrowflash loan from Aave−$1.94MBuy X38,200 Xfor two seatsFreezer gets $35.68for 400,000 XVote400,000 X dumpedinto a $100 pool+$6.69MSell X131,703 X soldinto the real pool−$1.94MRepayloan plusa small fee$4.75MKeptsent to 0x7ec2
The vote step moved no USDT to the attacker directly. It made the treasury hand over 400,000 X for $35.68.

The real pool held only so many dollars, so selling more X would have brought in very little. The rest of the X is still sitting in the attack contract.

06 · Two more walletsTwo more wallets, through the same door

Buyers kept coming after the first attack, and between the first and second attacks they put another $96,333 into the pool.

The second attacker, wallet 0xfc3f, took its flash loan from Morpho, another lending app. It won the two seats with its own helpers and pulled the treasury's five smaller deposits back out of the pool. Taking that X back freed room under the limit. Then it had the Freezer dump the same X into a new pool it had just made. This wallet is no beginner. It has created hundreds of contracts since March.

Its helpers never checked who was calling them. About five minutes later, a third wallet, 0xdab1, used them without freezing any X of its own. It voted with the second attacker's seats and pulled the treasury's last and largest deposit out of the pool. Then it routed that X through the pool made in the first attack, and on to itself.

Twelve seconds after that, c0ffeebabe.eth, a well-known bot that copies profitable transactions, tried the same route and found almost nothing left.

Time (UTC)WalletSeats fromWhat the treasury gave upTaken
14:11:47First attacker, 0x7ec2Two new helpers, flash loan from Aave400,000 X for $35.68$4.75M in USDT
14:35:59Second attacker, 0xfc3fTwo new helpers, flash loan from Morpho5 pool deposits, then 50,000 X for nothing$96,382 and 9,895 X
14:40:47Third wallet, 0xdab1The second attacker's open helpersIts last pool deposit, 550,012 X549,916 X and $1,909
14:40:59c0ffeebabe.ethThe same open helpersLess than 36 XUnder $200
What each wallet tookUSDT and X taken on 24 October
WHAT EACH WALLET TOOK, 24 OCTOBER (UTC)USDTX1st attacker14:11:47$4.75M268,284 X2nd attacker14:35:59$96,3829,895 X3rd wallet14:40:47$1,909549,916 Xc0ffeebabe bot14:40:59under $20035.7 X
The first attacker's X sits in its attack contract. The third wallet took X and almost no dollars.

07 · Where the money wentETH in five wallets, and a fast exit through ChangeNOW

The thief's wallet, 0x7ec2, was new. Before the attack, its only money was a little ETH for network fees. It came six minutes earlier from FixedFloat, a swap service our labels mark as no-KYC.

Within six minutes of the attack, it swapped all of its USDT for ETH through UniswapX, where market makers compete to fill each order. Wintermute, a big market maker, filled this one. A minute later the ETH went to a fresh wallet, 0x8296, which split most of it into four new wallets of 400 ETH each and kept the rest.

Where the dollars wentthe two attackers who took USDT, 24 October (UTC)
WHERE THE USDT WENT · 24 OCTOBER (UTC)1st attacker0x7ec2…fd63$4.75M USDT14:11:47UniswapX orderfilled by Wintermute14:16 and 14:172,022.02 ETHback to 0x7ec2+ 0.86 ETH gas from FixedFloat0x8296…42e5got 2,022.86 ETHkeeps 422.86 ETH400 ETH0xf637…35ea400 ETH0x6790…6391400 ETH0x64b1…81ae400 ETH0x4fdb…bef3Split 14:39 to 14:43. None of the five wallets has sent anything since.2nd attacker0xedac…d0c8$96,382 USDT14:35:59OKX routerswapped to 40.9 ETH14:37Two fresh wallets10 ETH and 30.9 ETH14:45 and 14:48ChangeNOW40.9 ETH in14:54 and 14:57ChangeNOW and FixedFloat are swap services our labels mark as no-KYC.
The first attacker's ETH has not moved. The second attacker's ETH reached ChangeNOW within half an hour.

None of those five wallets has sent anything since. Together they hold just over 2,022 ETH, worth about $4.75 million at the price the attacker got.

The second attacker did not wait. Its payout wallet swapped its USDT for ETH through OKX's swap router, and the ETH went through two fresh wallets to ChangeNOW, another no-KYC swap service. The whole trip took 21 minutes. ChangeNOW had also sent the attacker's main wallet ETH for fees the day before.

Someone also tried to trick that thief. Two wallets sent 0x7ec2 dust, no more than a billionth of an ETH each, from addresses that start and end like 0x8296. This is address poisoning. The hope is that the next copy and paste from the wallet's history picks the fake address.

08 · The X nobody can sellStolen coins, and nowhere to sell them

The attackers still hold about 827,000 X. They can't sell much of it, because the pool is down to under 200 X and about two dollars.

826,937 X stolen, almost no buyersstolen X still held, against what is left in the pool
STOLEN X STILL HELD · 826,937 X AGAINST A POOL HOLDING $2.263rd wallet, 0x0a67…66f2548,758 X1st attacker's contract268,284 X2nd attacker, 0xedac…d0c89,895 XX the pool holds now194 XSnapshot at 04:19 UTC on 25 October.
The pool can't absorb more than a sliver of the stolen X.

The third wallet has tried, in 95 small trades, at between fifty cents and a dollar seventy per X. Before the attack, X last traded at $50.83.

09 · Is it over?Two seats still take orders from anyone

Not yet. When we last checked, on the morning of 25 October, the Senate's three seats were 0xa13a and the second attacker's two helper contracts. Those helpers still take calls from anyone, so anyone can still pass a proposal.

The Freezer and the Senate todayread at 04:19 UTC on 25 October
THE FREEZER AND THE SENATE, 04:19 UTC ON 25 OCTOBER171,563 X · users' locked stakesafter every proposal the Freezer must still hold this much11.99 million X · the treasury's own Xits 1,000,000 X market limit is used upSeat 1 · Senate member0xa13a…716e75,500 X lockedcan vote, can't pass anything aloneSeat 2 · 2nd attacker's contract0xc2f6…73ba19,000.000002 X lockedtakes calls from anyoneSeat 3 · 2nd attacker's contract0xb21f…7cde19,000.000002 X lockedtakes calls from anyoneTwo of three seats is a majority, so any wallet that calls those two contracts can still pass a proposal.Read from the Freezer's own records at block 26,267,255.
Users' frozen stakes stay out of a proposal's reach, and the treasury has used up its limit on putting X into markets.

A proposal can do much less now. The Freezer still holds about 12 million X, and users' frozen stakes are a small part of it. The code keeps those stakes back after every proposal. The rest is the treasury's, but its limit on putting X into markets is used up, with two millionths of an X to spare. A swap can't sell more of it unless X first comes back into the treasury.

X100 had not posted about the attack on its X account when we checked. Someone did send 0x7ec2 an on-chain message offering a return-for-bounty deal and saying they were in touch with the X100 team. That wallet was first funded the same evening and has never sent coins to, or received coins from, any X100 wallet. We could not confirm that X100 had approved the offer.

10 · What the first reports saidChecking the early numbers

Blockaid, Chainalysis and Defimon posted about the attack within hours. Blockaid's thread got the totals right. We checked each claim against the record, including Chainalysis's summary and Defimon's breakdown.

SourceClaimWhat the record showsVerdict
BlockaidAbout $4.85M in USDT taken across two transactions4,846,108 USDT in two transactionsRight
BlockaidA third attacker pulled about 550,000 X549,916 X taken in the third transactionRight
BlockaidAbout 12.2M X still in the Freezer12.17 million X, of which 171,563 X is users' frozen stakeRight
ChainalysisAbout $4.7M in stablecoins across three transactions$4.85M across two. The third took X and $1,909Off
ChainalysisAbout 560,000 X unsold at attacker addresses826,937 X unsold, counting the X left in the first attack contractLow
ChainalysisSwapped to ETH and split across four wallets of 400 ETHTrue, and a fifth wallet still holds 422.86 ETHIncomplete
DefimonThe attacker sold the treasury's 400,000 X in the real poolIt sold 131,703 X. The other 268,284 X is still in its contractOff
DefimonAbout $4.75M taken and 361,800 X out of the treasury4,749,726 USDT; 400,000 X out, less the 38,200 X the attacker froze and paid in feesRight

11 · What it meansWhat the X100 hack means for holders and other DAOs

For people who hold frozen X, the code keeps proposals away from their coins. The open seats can still pass proposals, but the treasury has used up its limit on putting X into markets, and X has almost no market today. Anyone who bought X on 24 October now holds a coin that last traded far below what they paid.

For other projects, flash loan governance attacks are old news. The best known hit Beanstalk in April 2022, when a borrowed fortune passed a proposal that drained the protocol. Many voting systems now count votes from a snapshot taken before a proposal opens, so coins borrowed later don't count. Many also make a passed proposal wait, often for days, before it can run. The Freezer did neither. It also let a proposal pick any pool and any minimum price.

The same week, a single wallet drained Arkadiko on Stacks by buying enough votes to pass its own proposal. We traced that one in the Arkadiko hack. Other recent thefts we followed include the WAX bridge hack and the Initia hack.

12 · How we traced itMethod and limits

We read all three attack transactions, and every transfer around them, with Bitquery's real-time Ethereum data. We then checked the key figures a second way, against raw records from public Ethereum nodes. The seat rankings come from the Freezer's own event log and from its records at the blocks just before each attack. Our address labels named the swap services and routers. Dollar values use USDT at $1 and the attacker's own ETH price.

Any wallet in this story can be followed with the Bitquery MCP, which lets you ask an AI assistant where a wallet's money went. The full Ethereum history is also sold as files. Bitquery also does this work for clients through its crypto investigation services, and we traced the CoinDCX hack the same way.

Limits on these findings

Balances, seats and the Freezer's totals were read at block 26,267,255, 04:19 UTC on 25 October. Anything after that is not covered.

Dollar values count USDT at $1. ETH is valued at $2,349, the price the first attacker got when it swapped its USDT. X is not given a dollar value, because its only pool is almost empty.

We call 0xa13a, 0xe921 and 0xb18c Senate members because the Freezer's records show them holding seats and voting on its first six proposals. We do not know who controls them, or whether they speak for X100.

We name FixedFloat, ChangeNOW, Wintermute, OKX, Aave, Morpho and the other services only for the role their contracts or wallets played in a transfer. Nothing here suggests any of them knew about or took part in the attacks.

We found no direct transfer between the second attacker and the third wallet. That does not show they are unrelated.

The record shows which wallets moved money and when. It does not show who controls them.

13 · The addressesWhere to look

These are the main wallets, contracts and transactions in this story.

RoleAddress or transaction
X token0x100a2c7f45fd48e217fdce72e658dc78fd43a100
Freezer (X100's treasury and Senate)0x79f35a33fe2813414851c4ae8daeacd14d822a46
X/USDT pool, Uniswap0x0d85edd90c94053fc5997551b1baa8a77aa02fa0
Pool made in the first attack, PancakeSwap0x9a03c41c539880b51508bebbc2dde7b738f6f075
Pool made in the second attack, Uniswap0x503f83894ad3df6bf001ea79cef45f2672a2673b
First attack0x38c60844f1923d53fdce7d99e9bc2a2d8c73a08e793341dfbb479f8cc74d81d0
First attacker0x7ec2afdf3ec5964899894f8d58afa95cbb8ffd63
First attacker's contract (unsold X)0x37541fc4a6f1ec86889ba506f51dc39f2bedd10a
Wallet holding 422.86 ETH0x8296721489d0a7e934edd66ea27159b1c88a42e5
Wallets holding 400 ETH each0xf637dcee7dd96e8fdab926c5993d558b52d635ea
0x6790cf09ba33d05ada2c13cbb4104f5b8b666391
0x64b135af3d80733c9c290d58873e2cccb34a81ae
0x4fdb9f9a44b356c8a9c2ea060a40fb7a9caabef3
Second attack0x77c46e1aa9037ed4fbc9cc7e00d199dcd752acf576b4b5d3446e785dc45235c0
Second attacker0xfc3facd67138966ab0c841e905b0c4bca1abe92f
0xedac2d8905bf2bf0033872d420c4ec6ef1ddd0c8
Helper contracts holding seats two and three0xc2f69b21bea8f0c64cbd4597f262c80c993073ba
0xb21f45868dcaae3be7c842971ae61dd93d4c7cde
Third attack0x7c49bf28865defd5c1345f6527210360d635e510fa49279d0b62e6e02cfad99a
Third wallet0xdab137f390df77caa97fd492540e973fd5e2f8c8
0x0a67804462f04b0be1c433fb1c2f7fb76e5166f2
Senate members0xa13a935dce629fbba304d3ebda8d96459b05716e
0xe921898c7dfd4fbb2797474f27c136b872c3308b
0xb18ce82eb3f1286892c67ceb901c41cb41b47cb2
Wallet that received all 14 million X0xfba2aac122f02c93088d062e78e575a1b8a33993
Run it yourself

Follow the X100 money in plain English

Every transfer in this story comes from Bitquery's 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 Ethereum dataset.

Watch the five wallets holding the first attacker's 2,022.86 ETHTrace where any Ethereum wallet's money came from and wentCheck an address against Bitquery's labelsRun your own SQL over Ethereum transfers and events
Explore Bitquery MCP →Ethereum transfers and events from Bitquery, checked against public nodes. Data read on 25 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 freeze any token or asset, or to use or avoid any protocol, exchange or service.

The findings describe transactions and balances observed on Ethereum between 21 September and 25 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 X100, Blockaid, Chainalysis, Defimon, FixedFloat, ChangeNOW, Wintermute, UniswapX, Uniswap, PancakeSwap, OKX, 1inch, Aave, Morpho, Bitget, c0ffeebabe.eth 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 X100 hacked?

Yes. On 24 October three wallets used X100's own voting system to make its treasury sell X for almost nothing. They took two of the three Senate seats by locking slightly more X than the holder they had to beat, then voted for swaps that sent the treasury's X into pools they controlled.

How much was stolen in the X100 hack?

About $4.85 million in USDT, taken in two transactions, almost all of it by the first attacker. A third wallet took X rather than dollars. The attackers still hold about 827,000 X that they have not been able to sell.

What is a flash loan governance attack?

It is a vote won with borrowed money. A flash loan lends coins for a single transaction. The attacker uses them to buy voting power, passes a proposal and pays the loan back before the transaction ends. It works when votes are counted at that moment and a passed proposal can run at once, as it could at X100.

Where did the stolen X100 funds go?

The first attacker swapped its USDT for ETH and spread it across five new wallets, which had not moved when we last checked. The second attacker swapped its share for ETH and sent it to ChangeNOW, a swap service, within half an hour.

Is the X100 Senate still controlled by the attackers?

Two of its three seats are still held by helper contracts left by the second attacker, and those contracts accept calls from anyone. Anyone who uses them can pass a proposal. But the treasury has used up its limit on putting X into markets, so a new swap can't sell more of its X unless some comes back first.

Can the attackers take frozen X?

No. After every proposal the Freezer must still hold at least as much X as users have frozen, so proposals cannot touch it. The treasury's own X is also hard to move now, because the treasury has used up its limit on putting X into markets.