Each claim requires msg.value == FEE where FEE = 1e9 wei (1 gwei). This is enforced correctly.
Because claims are replayable (see first finding), the cost to drain N USDC scales with the number of transactions, not the value secured. An attacker spends negligible ETH per extra payout.
Likelihood:
The replay vulnerability exists on the deployed contract (no hasClaimed mapping).
The mempool is public on zkSync Era L2.
Impact:
Attackers extract the full USDC pool for sub-cent ETH cost at typical gas prices.
Honest users cannot claim after drainage; protocol reputation and user funds are lost.
Same as Missing claim tracking PoC: two claims cost 2 * 1 gwei and move 50e6 mock USDC. Scaling to full pool: ~4 gwei ETH to extract 100e6 USDC in the contest configuration.
Primary fix remains one-time claim tracking; fee increases only raise the bar for spam, not replay.
The contest is live. Earn rewards by submitting a finding.
Submissions are being reviewed by our AI judge. Results will be available in a few minutes.
View all submissionsThe contest is complete and the rewards are being distributed.