Root + Impact
Description:
SnowmanAirdrop.sol uses EIP‑712 typed data for off‑chain signature verification in claimSnowman(), but the constant MESSAGE_TYPEHASH is defined with a spelling mistake:
The word “addres” is missing the “d”. Off‑chain signing tools build the digest for
"SnowmanClaim(address receiver, uint256 amount)" and will never match the on‑chain hash. As a result, valid signatures generated by standard libraries are rejected, blocking genuine claims and frustrating users.
Risk
Likelihood:
Users integrating with ethers.js, web3.js or similar will generate signatures for the correct struct spelling.
Every off‑chain signature will fail on‑chain verification.
Impact:
All legitimate claim attempts revert with “Invalid signature.”
Users will waste gas and submit support tickets.
Protocol reputation suffers due to poor UX and broken claim flow.
Proof of Concept
Explanation:
The digest computed off‑chain uses the correct type string, so ECDSA.recover fails against the typo’d MESSAGE_TYPEHASH.
Recommended Mitigation
After redeployment, update all signing scripts to use the corrected type string. Add a unit test:
This ensures on‑chain and off‑chain hashes align, restoring valid signature verification and eliminating blocked claims.
A typo in the `MESSAGE_TYPEHASH` variable of the `SnowmanAirdrop` contract will prevent signature verification claims. Used `addres` instead of `address`
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.