MESSAGE_TYPEHASH in SnowmanAirdrop has spelling errors, so signatures from standard EIP-712 wallets never match and claimSnowman always reverts.
To let someone else claim on your behalf, the user signs a message from their wallet using the EIP-712 standard. The contract and the wallet must compute this message in exactly the same way.
However, the type string in the contract has two errors: it says "addres" (missing an "s"), and it has an extra space after the comma.
As a result, the wallet and the contract each use a different message. The signature never matches, and claimSnowman reverts with SA__InvalidSignature for every user who signs with a standard wallet.
According to EIP-712, the correct type string for the SnowmanClaim struct is:
Likelihood: High. It affects every user who signs with a standard wallet (eth_signTypedData_v4).
Impact: Medium. The signature-based claim flow, one of the main features of the airdrop, does not work. No funds are stolen, but users cannot claim their NFTs this way.
The test shows that the hash used by the contract is different from the correct EIP-712 type hash that wallets compute.
A wallet signing a SnowmanClaim struct with eth_signTypedData_v4 uses the correct type hash, so the recovered signer in _isValidSignature will not equal the receiver, and claimSnowman reverts with SA__InvalidSignature.
Fix the type string to match the EIP-712 standard.
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.