> For the complete documentation index, see [llms.txt](https://d3fenders.gitbook.io/d3fenders/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://d3fenders.gitbook.io/d3fenders/10.-airdrop-tool.md).

# 10. Airdrop Tool

## D3fenders NFT Airdrop Tool

### Overview

The **D3fenders NFT Airdrop Tool** is a self-custody, visual application for distributing NFTs to large recipient sets across **Solana** and **EVM-compatible networks**, including **Avalanche custom L1s (subnets)**.

The tool is designed to be **easy to use, guided, and adaptive**, adjusting its workflow based on the network a founder is operating on.

All transactions are signed locally in the user’s wallet.\
**Private keys, seed phrases, and signing authority never leave the user’s device.**

***

### Why This Tool Exists

NFT projects shouldn’t require custom scripts, dev time, or complex tooling just to distribute assets.

The D3fenders NFT Airdrop Tool is designed to be **visual, intuitive, and flexible**, while adapting automatically to the capabilities of each chain.

Different networks support different levels of infrastructure.\
Instead of forcing one rigid workflow, this tool adjusts:

* Full automation where infrastructure exists
* Manual controls where it doesn’t
* Clear UI instead of hidden assumptions

The goal is simple:\
**make advanced NFT operations accessible to anyone**, not just developers.

When founders can operate confidently through a clear interface, they move more deliberately, avoid risky shortcuts, and create a more secure environment overall.

Manual workflows are not a fallback.\
They are a deliberate capability.

***

### Supported Networks

#### Solana

* Mainnet-beta
  * Automatic NFT discovery via Helius

#### EVM Networks

| Network                | Chain ID     | NFT Discovery       |
| ---------------------- | ------------ | ------------------- |
| Ethereum               | 1            | Automatic (Alchemy) |
| Polygon                | 137          | Automatic (Alchemy) |
| Arbitrum               | 42161        | Automatic (Alchemy) |
| Avalanche C-Chain      | 43114        | Automatic (Alchemy) |
| Avalanche Fuji Testnet | 43113        | Manual Entry        |
| Custom Avalanche L1s   | User-defined | Manual Entry        |

#### Pre-configured Avalanche L1s

* Dexalot (432204)
* Beam (4337)
* XANA Chain (8888)
* MELD (333000333)
* LOCO Legends (9393)

Custom L1s can also be added by providing:

* Chain ID
* RPC URL
* Native currency details
* Block explorer URL

***

### Supported Token Standards

#### Solana

* Legacy Metaplex NFTs (v1 / v2)
* Programmable NFTs (pNFTs) with rule set support
* MPL Core Assets

#### EVM

* **ERC-721** — Standard NFTs
* **ERC-1155** — Semi-fungible NFTs with quantity support

The tool automatically applies the correct transfer logic based on the token standard.

***

### How It Works

#### Airdrop Workflow

The airdrop process follows a guided, step-by-step flow:

1. **Connect Wallet** — Solana or EVM
2. **Select Collection** — When automatic discovery is available
3. **Select NFTs** — Individual or bulk selection
4. **Upload Recipients** — CSV or manual entry
5. **Choose Assignment Mode** — Sequential or random
6. **Review Assignments** — Clear preview of all transfers
7. **Execute Transfers** — Wallet-signed transactions
8. **View Results** — Completion summary with transaction links

The interface adapts automatically based on the connected network.

***

### Manual Asset Entry (Subnets & Testnets)

On networks without reliable NFT indexing (Avalanche Fuji, Avalanche L1s), the tool switches to **Manual Asset Entry** mode.

This mode is intentional and clearly communicated in the UI.

Manual Asset Entry allows users to:

* Enter NFT contract addresses directly
* Specify token IDs and quantities
* Verify ownership via direct RPC calls
* Optionally scan token ID ranges

This enables NFT distribution on **any EVM network**, even when third-party indexing is unavailable or incomplete.

***

### Recipient CSV Format

Recipient data is provided via CSV. Files are parsed **client-side only**.

#### Supported Headers

* wallet\_address, walletaddress, address, wallet, recipient
* quantity, amount, qty, count (optional, defaults to 1)

#### Example

```
wallet_address,quantity
0x1234...abcd,2
0x5678...efgh,1
```

#### Validation Includes

* Chain-specific address validation
* Duplicate detection
* Maximum 10,000 recipients
* Unicode and homograph attack protection

***

### Assignment Modes

#### Sequential (In Order)

NFTs are assigned in the order they are selected, matching the CSV order.

#### Random

NFTs are shuffled using the Fisher-Yates algorithm before assignment.

***

### Transfer Mechanisms

#### Solana Transfers

Solana transfers use the Metaplex UMI framework:

* pNFTs with rule sets and compute budgeting
* Core Assets via `mpl-core`
* Legacy NFTs via standard Metaplex transfers

All transactions are built first, signed in the wallet, and then sent sequentially.

***

#### EVM Transfers

The tool automatically selects the safest transfer method per chain.

**Multicall3 Batching (Preferred)**

* Up to \~50 transfers per transaction
* One-time `setApprovalForAll` per collection
* Used on major networks where Multicall3 is deployed

**Direct Transfers (Automatic Fallback)**

* Used on custom Avalanche L1s and testnets
* One transaction per transfer
* Uses standard `safeTransferFrom`

Multicall availability is detected **at runtime** by checking for deployed bytecode.

***

### Security Model

#### Self-Custody

* Wallet-signed transactions only
* No server-side signing
* No key storage

#### Approval Scoping

* Per-collection approvals only
* No blanket permissions
* Approvals can be revoked after completion

#### Input Validation

* Client-side CSV parsing
* Strict address validation
* No silent fallbacks

#### Transaction Safety

* User can cancel at any time
* Failed transfers are surfaced clearly
* Success confirmed via on-chain events

***

### Technology Stack

| Layer    | Technology                            |
| -------- | ------------------------------------- |
| Frontend | Next.js 14, React 18, TypeScript      |
| Styling  | TailwindCSS                           |
| State    | Zustand                               |
| Solana   | @solana/web3.js, Metaplex UMI         |
| EVM      | ethers.js v6                          |
| CSV      | PapaParse                             |
| Wallets  | EIP-6963 (EVM), Solana Wallet Adapter |

***

### Limitations

* Avalanche L1s require manual asset entry
* Fuji testnet does not support automatic discovery
* Solana pNFTs cannot be batched
* Max 10,000 recipients per CSV
* Subject to RPC rate limits on high-volume sends

***

### FAQ

**Why do I need to approve Multicall3?**\
Multicall3 allows batching transfers into fewer transactions to reduce gas costs. It is a widely used, audited utility contract.

**What happens if a transfer fails?**\
Failures are tracked and reported. You can retry them in a new session.

**Can I send multiple NFTs to the same wallet?**\
Yes. Each CSV row is processed independently.

**How do I add a custom Avalanche L1?**\
Use the subnet selector to add the chain ID, RPC URL, native currency, and explorer.
