During claimSnowman, the receiver's Snow tokens are transferred to the airdrop contract. The contract has no function to withdraw, burn, or otherwise move those tokens out. The Snow is permanently locked.
There is no corresponding withdrawSnow, burnSnow, unstake, or recoverTokens function anywhere in the contract. The airdrop contract does not inherit Ownable and has no access-control mechanism that could gate a withdrawal.
Likelihood :
Every single claim call transfers Snow tokens into the contract. Over the lifetime of the airdrop, the contract accumulates all claimed Snow with no mechanism to move it.
Impact :
Snow tokens that cost real ETH/WETH to mint are removed from circulation and locked in a dead contract. There is no economic or governance mechanism to recover them.
If the intent is to "burn" the tokens, using a blind transfer to a contract with no withdrawal function is fragile -- there is no event, no explicit burn, and no way to prove the tokens are intentionally destroyed.
If the Snow is meant to be burned, call burn on the token or transfer to a canonical burn address with an explicit TokensBurned event. If the Snow is meant to be staked (as the README states), add a permissioned withdrawal function:
If neither is acceptable (e.g., the contract must remain ownerless), at minimum emit the transfer as a burn-like event and document that tokens are intentionally destroyed.
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.