The SnowmanAirdrop
contract implements a fundamentally flawed airdrop mechanism that violates established industry standards for Merkle tree-based token distributions. The contract uses dynamic balance checking (i_snow.balanceOf(receiver)
) to generate Merkle tree leaves during claim verification, while the original Merkle tree was constructed with fixed snapshot values. This approach contradicts standard airdrop practices where Merkle trees contain immutable snapshot data, and balance verification is performed separately from proof validation.
Standard airdrop implementations follow these principles:
Fixed snapshot data: Merkle trees contain immutable (address, amount)
pairs from a specific block/timestamp
Separate balance verification: Current token balance is checked independently from Merkle proof validation
Deterministic leaf generation: Leaves are generated using fixed values, not dynamic state
The current implementation breaks these standards by making leaf generation dependent on mutable state (balanceOf
), creating a fundamental mismatch between the static Merkle tree structure (built with amount = 1
for all users) and dynamic runtime verification.
User transfers 0.5 SNOW tokens to another address, reducing balance to 0.5
User attempts claimSnowman()
Function reverts immediately with SA__ZeroAmount()
due to balance check
User loses airdrop eligibility through normal token usage
Complete breakdown of airdrop functionality
Users lose legitimate airdrop rewards
The vulnerability makes any token activity (transferring, receiving) incompatible with claiming, which contradicts the fundamental expectation that snapshot-based airdrops should be independent of post-snapshot token movements.
****
Implement standard airdrop pattern with fixed claim amounts:
Required Merkle tree reconstruction:
Update input.json
generation to match new approach and regenerate Merkle tree with consistent leaf structure.
Claims use snow balance of receiver to compute the merkle leaf, making proofs invalid if the user’s balance changes (e.g., via transfers). Attackers can manipulate balances or frontrun claims to match eligible amounts, disrupting the airdrop.
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.