DODO Crowdpooling Contracts Exploited Via Repeatable Initialization Bug
On Tuesday, March 9, 2021, DODO's V2 Crowdpooling contracts were exploited using counterfeit tokens, with two separate actors draining several liquidity pools before the DODO team was alerted — notably by outside parties on Twitter rather than through internal monitoring.
The affected pools were WSZO, WCRES, ETHA, and FUSI, all built on DODO's V2 Crowdpooling design. Word of the incident reached the team first via a tip from Luciano, who flagged that the WCRES/USDT pool had already been drained using fake tokens.

According to DODO's own post-incident writeup — credited in part to @samczsun, @tzhen, PeckShield, and SlowMist — roughly $3.8 million was pulled from the four pools in total. Of that, $1.88 million was expected to be voluntarily returned, leaving a net loss closer to $2 million.
The root cause: a reusable init() function
The underlying flaw sat in the Crowdpooling smart contract, whose init() function could be called more than once. That allowed for the following attack sequence:
- Deploy a worthless counterfeit token and initialize the pool contract with it via init().
- Call sync() to zero out the "reserve" variable tracking the token balance.
- Call init() a second time, this time supplying a genuine DODO pool token.
- Take out a flash loan to drain the pool's real token holdings, sidestepping the flash-loan balance check in the process.
Two attackers, two different profiles
DODO's analysis identifies two parties behind the exploits, labeled Individual A and Individual B.
Individual B shows several signs of being an automated frontrunning bot: its contract address was mined to begin with a string of zeros, it made use of the CHI gas token, and it paid extreme gas fees — in one transaction, 93,148 gwei. Individual B's exploit transactions ran roughly ten minutes ahead of Individual A's.
Individual A's activity, reconstructed from on-chain data:
- Withdrew 0.46597 ETH from Binance (tx).
- Made seven rapid BUSD withdrawals in succession, possibly via Binance Bridge (example tx).
- Sent 67,416 BUSD to 0xa305fab8bda7e1638235b054889b3217441dd645 in two transfers (one, two).
- Sent 59,245.324743 USDT to the same address, also in two transfers (one, two).
- Carried out two separate exploits: one against the DODO-USDT test contract, with proceeds sent to 0xa305fab8bda7e1638235b054889b3217441dd645, and one against the WCRES-USDT contract, with proceeds sent to 0x56178a0d5f301baf6cf3e1cd53d9863437345bf9.
Individual A has since reached out to the DODO team through samczsun, offering to return the stolen funds. Their proceeds currently sit in 0xa305fab8bda7e1638235b054889b3217441dd645 and 0x56178a0d5f301baf6cf3e1cd53d9863437345bf9.
Individual B, believed to be purely automated — DODO referred to it as "a robododo" — operated through a suspected bot contract at 0x00000000e84f2bbdfb129ed6e495c7f879f3e634, triggered from 0x3554187576ec863af63eea81d25fbf6d3f3f13fc. Three exploits were carried out from this account:

Individual B's proceeds remain at the same two addresses listed above. DODO says it is attempting to contact the owners of both.
A modest haul, an uncertain motive
With roughly $2 million in net losses after the expected partial return, the incident is small by DeFi hack standards, and it remains unclear whether either actor intended to act as a white hat or simply took what was available. The episode also underscores how reliant even protocol teams remain on social media, rather than internal monitoring, to learn that their own contracts have been drained.
Get new scam files the moment we publish them — usually 2–3 emails a week.