claimSnowman() Causes Permanent Gas DoS on All Airdrop ClaimsclaimSnowman() reads the caller's Snow token balance in wei (18 decimals) and passes it to Snowman.mintSnowman(), which loops that many times to mint NFTs. The Ethereum block gas limit is 30 million.
For any user holding 1 Snow token, this attempts 1e18 loop iterations, requiring roughly 3.3e22 gas. The function reverts for every user with a realistic balance, permanently breaking the airdrop claim mechanism.
Likelihood:
100% of eligible claimants are affected — this is an inherent logic bug, not an edge case or timing issue
No attacker is required; the DoS triggers on every legitimate claimSnowman() call when the receiver holds any realistic Snow balance
The measured DoS threshold is approximately 891 wei (~8.9e-16 Snow) — any balance above this makes claiming impossible
Impact:
The airdrop claim mechanism is completely non-functional — every eligible claimant who holds Snow tokens will have their transaction revert due to out-of-gas
The DoS cannot be worked around without redeploying the contract
amount is also used in the Merkle leaf hash (line 86), meaning the Merkle tree itself encodes wei values — the unit confusion is systemic
Alternatively, use a fixed mint count per claimant (e.g., 1 NFT per claim) or include the intended mint count in the Merkle leaf data.
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.