Under normal operation, mintSnowman(receiver, amount) should mint a number of Snowman NFTs proportional to a user’s entitlement (e.g., derived from staked or held Snow tokens) and complete successfully in a single claim transaction.
The issue is that mintSnowman performs an unbounded linear loop over amount, and each iteration calls _safeMint (storage writes + optional ERC721Receiver callback). As amount grows, gas usage grows linearly until the transaction exceeds the block gas limit and reverts, making large mints practically unclaimable.
Likelihood:
amount scales directly with entitlement (e.g., token balance) and grows without a protocol-enforced ceiling, so large holders naturally produce large amount values.
Claims that mint to contract receivers (or receivers that implement onERC721Received) incur additional per-mint gas overhead, making the revert threshold easier to hit even at smaller amount values.
Impact:
Eligible users with large amount values are unable to claim because the mint transaction repeatedly reverts due to out-of-gas / block gas limit constraints.
Claiming becomes unreliable and can be used to create operational/UX DoS conditions for “whales” or any user whose entitlement grows over time.
Shows a small mint succeeds under a fixed gas stipend
Shows a larger mint fails under the same gas stipend
Optionally shows the failure happens sooner when minting to a contract (because _safeMint triggers onERC721Received)
Note: If the protocol must support large entitlements, replace the hard cap with batched minting (e.g., mintSnowman(receiver, count) callable multiple times) while still enforcing a safe per-call maximum.
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.