ERC-2612 Airdrop Distribution System
๐ญ Overview
A production-grade smart contract system for distributing token airdrops on-chain. Uses EIP-712 typed structured data signatures for gas-efficient, permissioned claiming โ users submit a signed claim rather than relying on a merkle tree or manual distribution.
๐ ๏ธ Architecture
๐ Smart Contract (Solidity 0.8.24 + OpenZeppelin v5)
- ๐ EIP-712 signature validation: each eligible recipient receives an off-chain signature; claiming requires submitting a valid signature โ prevents unauthorized claims without on-chain allowlist storage
- ๐ Campaign lifecycle management: start/deadline timestamps, campaign pause/resume, admin role controls
- ๐ฅ Role-based access control: OpenZeppelin AccessControl โ ADMIN_ROLE, SIGNER_ROLE, DISTRIBUTOR_ROLE
- ๐ Bonus reward tracking: separate bonus allocation per recipient, claimable independently
- ๐ก๏ธ Abuse prevention: per-address claiming status tracked on-chain, signature replay protection
๐งช Foundry Test Suite
- ๐ Property-based tests for cryptographic claim flows โ testing valid signatures, invalid signatures, expired signatures, and replay attacks
- ๐ Campaign lifecycle tests: start, deadline enforcement, pause/resume behavior
- ๐ฅ Role access control tests: unauthorized role operations, role grant/revoke flows
- โฝ Gas optimization tests: measuring claim transaction costs under various load patterns
๐ TypeScript Distribution Scripts
- ๐ CSV-based reward loading: reads recipient addresses and allocations from spreadsheet
- โ๏ธ Bulk EIP-712 signature generation for all recipients
- ๐ฆ Staged airdrop execution with batch transaction support
- ๐ก๏ธ Abuse detection pipeline: flags addresses matching known bot/sybil patterns before signing
โญ Key Highlights
- ๐ EIP-712 typed signatures: gas-efficient claiming without on-chain allowlists
- ๐งช Foundry test suite covering cryptographic flows, lifecycle management, and access control
- ๐ CSV-driven distribution pipeline enabling non-technical team members to manage reward lists
- ๐ก๏ธ Abuse detection before signature generation โ bad actors get no signatures, not just reverted claims