
Date: October 14 to 15, 2026
Chain: Ethereum, BNB Chain, Base and Robinhood Chain
Loss: about $808K realized by the attackers across four chains per UNCX's incident report (Blockaid's earlier count was about $1.49M), starting with about $86K on Ethereum
Class: vesting share accounting that let one position release tokens deposited by others
At 14:50 UTC on October 14, 2026, Blockaid's monitoring picked up activity around UNCX Network's Vesting V2 contract on Ethereum. About an hour later, a single transaction pulled roughly $86,000 in EDGEN, ZC, pepecoin, LO0P and PAAL out of a shared pool where projects had locked those tokens to prove to their communities that the tokens couldn't move early.
That first transaction was a template. By October 15, copycat wallets and MEV bots had repeated the method on Ethereum, BNB Chain, Base and Robinhood Chain, and Blockaid's count stood at 11 drain transactions and about $1.49M. UNCX's own incident report later confirmed the 11 transactions and put what the attackers actually realized at about $808,000. Every one of them worked for the same reason: the vesting contract's release() function paid out against the pool's full token balance in proportion to shares, and a sequence of ordinary calls could make the share count fall further than the deposits it was supposed to describe.
UNCX, formerly Unicrypt, runs liquidity locks and token vesting for crypto projects. Teams deposit tokens into a vesting contract with a schedule, and the contract releases them over time, which gives holders a credible promise that insider tokens stay put until the schedule says otherwise.
UNCX's Vesting V2 contract, the VestingManager, holds every project's deposits of a given token in one shared pool and tracks each vesting position as shares of it. When a position calls release(), the contract converts its shares into tokens using the pool's current balance and that position's fraction of the total shares. Sharing a pool is efficient, and it also means every depositor's tokens sit behind the same arithmetic. If the total share count drops lower than it should, every remaining share is suddenly worth more of the pool, including shares held by someone who just walked in.
ExVul, which examined the first Ethereum transaction, traced the flaw to how VestingManager tracked released and canceled shares, according to The Crypto Times, and the DeFiHackLabs reproduction confirms it against the contract's verified source on Etherscan. When a position called release(), the contract reduced the global _totalTokenShares but left the released shares recorded in that position's _depositedShares. Later, when a position was canceled, the contract worked out how many shares to remove using the full recorded deposit, without subtracting what had already been released, so the same shares came off the global total a second time.
Each double deduction shrank the denominator every other position was measured against. The pool's tokens hadn't gone anywhere, but the shares claiming them had become fewer, so a small position left standing could release tokens that other projects had deposited. A direct token donation into the pool pushed the ratio further.
A share is a claim on a pool, and the total number of shares has to stay equal to the sum of what every position still holds. Once one function updates the total and a different function updates the position, any sequence that runs both can open a gap between them, and in a shared pool that gap is paid for by everyone else. Picture a shared vault where the manager crosses your withdrawal off the master ledger but leaves your passbook showing the full deposit, then crosses the full passbook amount off the ledger again when you close the account.
The first drain came from a plain wallet at 0x78C9B11853E4f183a34C63fFd1924d2319a2f5B3 working through its own exploit contract, and it landed in Ethereum block 26191745 at 11:49 a.m. ET (15:49 UTC) on October 14. DeFiHackLabs replays it token by token. For each of EDGEN, ZC, pepecoin, LO0P and PAAL, the contract flash-borrowed working capital from a Uniswap pool, created a payout vesting plus one or two helper vestings whose schedules had ended one second before the block, so they were fully releasable the moment they existed, and released the helpers to pull shares off the global total. It then topped the helpers up and canceled them, which pulled the same shares off a second time, sometimes donated spare tokens into the pool to raise its balance, and finally released the payout vesting against the shrunken total. Each flash loan was repaid in the same step, and what stayed behind was other vesters' tokens. None of it needed a role, an owner key or a signature, since any address can create and manage its own vestings. ExVul estimated the drained tokens at about $87,700 at spot prices, the exploit contract's holdings at about $85,600, and the attacker's profit at around $84,200 after 0.5624 ETH in fees and gas.
Blockaid's first public alert went out at about 16:26 UTC, flagging the attack as ongoing with about $3.25M still in the affected Ethereum contract. Because every step in the sequence was an ordinary user call, anyone who saw the first transaction could repeat it. By October 15, Blockaid counted 11 drain transactions, including copycat addresses and MEV bots, for losses of about $969,000 on BNB Chain, $242,000 on Ethereum, $169,000 on Robinhood Chain and $114,000 on Base. UNCX listed ten affected tokens: pepecoin, EDGEN, ZC, X, LO0P and PAAL on Ethereum, IMO on Base, BTCLE on BNB Chain, and CASHCAT and RKST on Robinhood Chain. Its incident report, which counts only proceeds the attackers realized and leaves out spot valuations of the drained tokens, puts the totals lower: about $567,500 on BNB Chain, $124,600 on Robinhood Chain, $77,200 on Ethereum and $38,400 on Base, or about $807,600 in all. The largest single drain was on BNB Chain, where one wallet put in about $400,000 of its own USDT to buy BTCLE, ran the share sequence, and after selling came out about 567,481 USDT ahead.
UNCX confirmed the incident was isolated to the Vesting V2 contracts and said its liquidity lockers and legacy vesting contracts weren't affected. To stop new positions from being opened against the flaw, it froze new vesting positions, raised flat fees above 1,000 ETH per new lock, removed client and contract paths that bypassed fees, and raised token fees to 5%, the maximum the V2 contracts allow. It advised holders not to trade the affected tokens' pools until each project issued guidance, and said it was working with law enforcement and SEAL 911.
Some of the funds came back. On October 15, whitehat c0ffeebabe.eth sent 15.76 ETH tied to the IMO drain on Base directly to the IMO project, and on October 16 a white-hat participant returned 8.10 ETH and 82.1 million X on Ethereum. UNCX's October 17 recap credits c0ffeebabe.eth and the MEV operator Yoink, which front-ran some of the attacker transactions, with about $58,000 in returned ETH, and says the remaining attackers hadn't answered the 48-hour return window it had given them. The recap adds that an affected protocol had filed a complaint with law enforcement, and that because the V2 contracts don't use upgradeable proxies, they can't be changed and will never accept a new vesting position again.
Olympix reads a contract the way an attacker does, as states, transitions and entry points, and it uses the context around the code, here a shared pool that many unrelated projects deposit into, to infer the rules the system relies on. In VestingManager, the states that matter are each position's _depositedShares, the global _totalTokenShares, and the pool's token balance, and createVesting, topUpVesting, release and cancel are the transitions that move them. The signal Olympix's static analysis surfaces is a payout computed from the contract's full shared balance in proportion to shares, where the global share total and the per-position record are updated in different functions that don't reconcile with each other. Olympix has flagged this class before in other codebases.
BugPoCer's job here is to treat that mismatch as a question about the whole pool. Running Counterexample-Guided Invariant Refutation, it infers from VestingManager's own bookkeeping the rule every depositor relies on: the global share total must always equal the sum of the shares each position still holds, so no position can ever release more than it put in. It then strings together create, top-up, release and cancel calls, including vestings whose schedules are already over, until the share total and the positions behind it stop adding up.
The counterexample is the October 14 sequence: create positions, release a large one, donate tokens, cancel a topped-up position, and release from the small one left behind, ending with that position holding tokens another depositor put in. BugPoCer returns it with the minimal conditions that trigger it and a generated Forge test that replays it, which is this exploit produced in development instead of on mainnet. Because Olympix runs at every merge and before release, the same test would run against any later change to how VestingManager records releases or cancellations.
Eleven drain transactions across four chains came from one bug that needed no special access, which is why copycats could join within hours. For builders of shared-pool contracts, every function that changes a total has to change the matching per-position record in the same step, and the rule that no position can take out more than it put in is worth testing directly against every sequence of calls a user can make. To see how Olympix tests your contracts' accounting against the call sequences an attacker would chain together, book a technical walkthrough.
Protocol: UNCX Network Vesting V2 (VestingManager)
Chains: Ethereum, BNB Chain, Base, Robinhood Chain
Date: October 14, 2026, first drain at 15:49 UTC on Ethereum; spread to four chains by October 15
Loss: about $807,609 realized per UNCX's incident report (BNB Chain about $567.5K, Robinhood Chain about $124.6K, Ethereum about $77.2K, Base about $38.4K); Blockaid's earlier count was about $1.49M; 11 drain transactions
Block (first drain): 26191745
Attacker EOA (first drain): 0x78C9...f5B3
Exploit contract (first drain): 0xf6D0...C35E
VestingManager (victim, Ethereum): 0xA98F...99F5
First drain tx: 0x3520...823d
VestingManager (BNB Chain): 0x7f3f...FAAB
VestingManager (Base): 0x7ca3...20c5
VestingManager (Robinhood Chain): 0xB31e...AAF3
BNB Chain drain tx (BTCLE): 0xbd1b...d9c5
Base drain tx (IMO, primary): 0x9a67...71aa
Robinhood Chain drain tx (CASHCAT): 0xb727...4f65
Robinhood Chain drain tx (RKST): 0xe9af...bece
Ethereum drain tx (X): 0xbf7e...8a7c
Ethereum ZC copycat txs: 0x55b3...72fc, 0xf57b...6bae
White-hat return txs: 0x7ed6...37ca (Base, 15.76 ETH), 0x0761...02d2 (Ethereum, 8.10 ETH), 0xf0ae...7301 (Ethereum, 82.1M X)
UNCX Network: Smart Token Vesting V2 Cross-Chain Incident Report
UNCX on X: Vesting V2 Incident Recap and Update
The Crypto Times: Blockaid Reports $86K Drained in UNCX Vesting Pool Exploit