# Airdrop

The airdrop module manages the permissioned distribution of ERC-20 tokens using an on-chain contract. The main contract, `InceptionAirdrop.sol`, handles eligibility verification, claiming, and tracking of distributed amounts.

The module includes its own ERC-20 mock tokens for testing purposes and supports upgradable deployments via OpenZeppelin proxies.

## Components

#### 1. **InceptionAirdrop.sol**

* Core contract for processing token claims.
* Likely includes a Merkle proof-based eligibility verification system or an internal mapping of claimable balances.
* Handles validation, token transfers, and claimed state tracking.

#### 2. **IInceptionAirdrop.sol**

* Interface defining the functions exposed by the main airdrop contract.
* Enables integration with other contracts or frontend applications.

#### 3. **MockErc20Token.sol / Token.sol**

* Simple ERC-20 implementations used for testing.
* These are not production contracts.

#### 4. **Hardhat Setup**

* Hardhat config (`hardhat.config.ts`) and scripts automate deployment.
* Uses `.env_example` for environment configuration.

#### 5. **Deployment Metadata**

* `.openzeppelin/mainnet.json` tracks upgradeable deployment data.

## Flow Overview

1. A Merkle root or claim mapping is initialized with eligible addresses and claimable amounts.
2. A user calls the `claim()` function, passing the required proof (if applicable).
3. The contract validates eligibility and transfers the corresponding ERC-20 amount.
4. The contract marks the user as claimed to prevent re-claims.

## Smart Contract Highlights

| Contract                          | Role                                 |
| --------------------------------- | ------------------------------------ |
| `InceptionAirdrop.sol`            | Airdrop logic and eligibility checks |
| `IInceptionAirdrop.sol`           | Interface for external interaction   |
| `MockErc20Token.sol`, `Token.sol` | Mock tokens used in test environment |

## Notes

* Intended for token distributions controlled by Inception (e.g., Totem airdrops).
* Implementation details (e.g., Merkle root vs mapping) can be confirmed by inspecting the contract directly.
* Tests and scripts are provided but require environment setup via `.env`.

***
