Snowman.mintSnowman mints amount NFTs in an UNBOUNDED loop, and the airdrop calls it with amount = i_snow.balanceOf(receiver) (the recipient's full allocation):
Because the loop runs once per token, a large allocation makes the single claimSnowman transaction exceed the block gas limit, so the recipient can NEVER claim their airdrop (no batched/partial path).
Likelihood: Medium
Airdrop allocations routinely reach the hundreds/thousands. The claim amount equals the recipient's snapshot Snow balance and cannot be reduced (the merkle leaf is fixed to it).
Impact: Medium
Recipients with allocations >= ~904 Snow are permanently unable to claim their Snowman NFTs (locked entitlement).
Forge test measures the real cost (PASSES):
Output: total gas 33,156,420 for amount=1000 (> 30M block limit); ~33,156 gas/mint; max claimable amount ~904.
Do not mint one NFT per token in an unbounded loop. Mint exactly ONE Snowman per claim, or cap amount per call with resumable state:
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.