# Airdrop

MoveFlow provides an efficient and automated solution for **distributing airdrops to thousands of recipients** across multiple blockchain networks. Whether you are rewarding community members, conducting token distributions, or engaging in ecosystem growth campaigns, MoveFlow simplifies the entire process with an intuitive interface and powerful automation features.

### **Key Features**

* **Batch Creation:** Easily distribute tokens to multiple addresses in a single transaction, saving time and reducing gas costs.
* **Airdrop SDK:** For large-scale distributions exceeding 2,000 addresses, our SDK enables seamless execution with greater flexibility.
* **Automated Token Transfers:** Recipients receive their tokens instantly without manual claims, ensuring a frictionless experience.
* **Multi-Chain Support:** Execute airdrops across various networks supported by MoveFlow.
* **Transparent Tracking:** Monitor airdrop progress with real-time analytics and transaction history.
* **Public Sharable Link:** Generate a public dashboard link to share the airdrop details with your community for enhanced transparency.

***

### How to Use MoveFlow for Airdrop

The airdrop creation process follows the same streamlined flow as token vesting, with two key differences:

1. **Batch Creation:** Unlike vesting, airdrops are typically distributed to multiple addresses at once. MoveFlow allows users to upload a CSV file or manually input addresses to facilitate bulk distributions efficiently.
2. **Airdrop SDK for Large-Scale Distributions:** If the number of recipients exceeds 2,000, users must leverage MoveFlow’s Airdrop SDK to handle large transactions seamlessly.

* #### Batch Create Streams(Airdrop)

```typescript
const now = Math.floor(Date.now() / 1000);
const interval = 60;

let test_batch_count = 10;

let names = [];
let recipients = [];
let deposit_amounts = [];
let cliff_amounts = [];

for (let i = 0; i < test_batch_count; i++) {
  names.push(`stream_${i}`);
  recipients.push(AccountAddress.from(`0x` + i.toString().padStart(64, "0")));
  deposit_amounts.push(10000);
  cliff_amounts.push(0);
}

const tx = (await stream.batchCreateSteam(
  new BatchCreateParams({
    execute: true,
    is_fa: true,
    asset_type:
      "0x355efcd852a0757eb4289f25b4627f368e72bae178d719ad6f7b435c7f201e59",
    _remark: "nothing",
    names,
    stream_type: StreamType.TypeStream,
    recipients,
    deposit_amounts,
    cliff_amounts,
    cliff_time: now + 450,
    start_time: now + 300,
    stop_time: now + 300 + interval * 60 * 12,
    interval,
    auto_withdraw: false,
    auto_withdraw_interval: 600,
    pauseable: OperateUser.Both,
    closeable: OperateUser.Both,
    recipient_modifiable: OperateUser.Sender,
  })
)) as PendingTransactionResponse;

await client.waitForTransaction({
  transactionHash: tx.hash,
  options: {
    checkSuccess: true,
  },
});

console.log("batch hash : ", tx.hash);
```


---

# Agent Instructions: 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://moveflow3.gitbook.io/moveflow-token-distribution-protocol/product/interactive-blocks.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.
