> 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.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://d3fenders.gitbook.io/d3fenders/10.-airdrop-tool.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
