Normal behavior: An airdrop contract should hold ERC-20 tokens that it can distribute to claimants; deployer or owner normally deposits tokens into the contract before claims start.
Issue: The MerkleAirdrop contract (see MerkleAirdrop.sol) never provides a way to deposit or pull ERC-20 tokens into the contract (the constructor only stores the token address). As a result, claims will attempt to transfer tokens from the contract balance and will fail when the contract holds no tokens.
Likelihood:
During airdrop setup, deployer will expect the contract to be funded via a contract method but will not find one, causing claim attempts to fail when users try to redeem tokens.
Automated or scripted claim flows will trigger failed transactions and revert gas, because safeTransfer will revert when the contract lacks sufficient token balance.
Impact:
All legitimate claims will revert and users will not receive tokens until the contract is funded externally.
Lost gas costs and degraded trust in the airdrop; owner may be blamed for a broken distribution flow.
Notes: Ensure callers approve the contract (approve(contractAddress, amount)) before calling fundAirdrop / depositAirdrop. Consider emitting an event on deposit and validating total available airdrop balance if needed.
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.