> ## Documentation Index
> Fetch the complete documentation index at: https://www.helius.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Cách sử dụng requestAirdrop

> Tìm hiểu các trường hợp sử dụng requestAirdrop, ví dụ mã, tham số yêu cầu, cấu trúc phản hồi và các mẹo.

Phương thức RPC [`requestAirdrop`](https://www.helius.dev/docs/api-reference/rpc/http/requestairdrop) cho phép bạn yêu cầu airdrop SOL (lamport) đến một tài khoản được chỉ định. Phương thức này **chỉ dành riêng cho các môi trường không phải mainnet** như Devnet và Testnet, nơi phương thức này đóng vai trò là faucet cung cấp SOL miễn phí cho nhà phát triển để kiểm thử ứng dụng.

**Quan trọng: Phương thức này sẽ không hoạt động trên Mainnet Beta.**

## Các trường hợp sử dụng phổ biến

* **Cấp vốn cho ví kiểm thử:** Nhận SOL để thanh toán phí giao dịch và triển khai chương trình trên Devnet hoặc Testnet.
* **Kiểm thử tự động:** Các tập lệnh có thể sử dụng `requestAirdrop` để đảm bảo tài khoản kiểm thử có đủ SOL trước khi chạy các bộ kiểm thử.
* **Phát triển và thử nghiệm:** Nhanh chóng nhận SOL để tương tác với các chương trình on-chain trong quá trình phát triển.

## Tham số yêu cầu

1. **`pubkey`** (chuỗi, bắt buộc): Khóa công khai của tài khoản sẽ nhận lamport được airdrop, được cung cấp dưới dạng chuỗi mã hóa base-58.
2. **`lamports`** (u64, bắt buộc): Số lamport cần yêu cầu. (1 SOL = 1.000.000.000 lamport).
3. **`options`** (đối tượng, tùy chọn): Đối tượng cấu hình tùy chọn có thể bao gồm:
   * **`commitment`** (chuỗi, tùy chọn): Chỉ định [mức cam kết](https://www.helius.dev/blog/solana-commitment-levels) cần chờ khi xác nhận giao dịch airdrop (ví dụ: `"finalized"`, `"confirmed"`, `"processed"`). Nếu bỏ qua, hệ thống sẽ sử dụng mức cam kết mặc định của nút cho các airdrop.

## Cấu trúc phản hồi

Trường `result` trong phản hồi JSON-RPC là một chuỗi đơn đại diện cho chữ ký giao dịch của airdrop, được mã hóa bằng base-58.

**Phản hồi mẫu:**

```json theme={"system"}
{
  "jsonrpc": "2.0",
  "result": "5VERv8NMvzbJMEkV8xnrLkEaWRtSz9CosKDYjCJjBRnbJLgp8uirBgmQpjKhoR4tjF3ZpRzrFmBV6UjKdiSZkQUW",
  "id": 1
}
```

Sau đó, bạn có thể sử dụng chữ ký này với `getTransaction` hoặc trình khám phá Solana để theo dõi trạng thái của giao dịch airdrop.

## Ví dụ mã

<CodeGroup>
  ```bash cURL theme={"system"}
  # Request 1 SOL (1,000,000,000 lamports) to a Devnet address
  # Replace <YOUR_WALLET_ADDRESS> with an actual base-58 public key
  # Ensure you are targeting a Devnet RPC URL
  curl -X POST -H "Content-Type: application/json" -d \
    '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "requestAirdrop",
      "params": [
        "<YOUR_WALLET_ADDRESS>",
        1000000000
      ]
    }' \
    https://devnet.helius-rpc.com/?api-key=<api-key> 

  # Request 0.5 SOL with "confirmed" commitment
  curl -X POST -H "Content-Type: application/json" -d \
    '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "requestAirdrop",
      "params": [
        "<YOUR_WALLET_ADDRESS>",
        500000000,
        {
          "commitment": "confirmed"
        }
      ]
    }' \
    https://devnet.helius-rpc.com/?api-key=<api-key>
  ```

  ```javascript JavaScript (using @solana/web3.js) theme={"system"}
  const { Connection, PublicKey, LAMPORTS_PER_SOL } = require('@solana/web3.js');

  async function getAirdrop(walletAddress) {
    // Connect to Devnet
    const connection = new Connection('https://devnet.helius-rpc.com/?api-key=<api-key>', 'confirmed');
    const publicKey = new PublicKey(walletAddress);

    try {
      console.log(`Requesting airdrop of 1 SOL to ${walletAddress} on Devnet...`);
      
      // Request an airdrop of 1 SOL
      const airdropSignature = await connection.requestAirdrop(
        publicKey,
        LAMPORTS_PER_SOL // 1 SOL
      );

      console.log(`Airdrop requested. Transaction signature: ${airdropSignature}`);

      // Confirm the transaction
      // Note: The `confirmTransaction` method in web3.js has evolved.
      // For newer versions, you might use `connection.confirmTransaction({ signature: airdropSignature, blockhash: latestBlockhash.blockhash, lastValidBlockHeight: latestBlockhash.lastValidBlockHeight }, 'confirmed');`
      // For simplicity, we'll log the signature and you can check on an explorer.
      // Or, more robustly, you can poll getSignatureStatuses.

      await connection.confirmTransaction(airdropSignature);
      console.log(`Airdrop successful for ${walletAddress}!`);

      const balance = await connection.getBalance(publicKey);
      console.log(`Current balance for ${walletAddress}: ${balance / LAMPORTS_PER_SOL} SOL`);

    } catch (error) {
      console.error(`Error requesting airdrop for ${walletAddress}:`, error);
    }
  }

  // Replace with a Devnet wallet address you control
  const myDevnetWallet = 'REPLACE_WITH_YOUR_DEVNET_WALLET_ADDRESS'; 
  // Example: const myDevnetWallet = new Keypair().publicKey.toBase58(); // For a new temporary wallet

  if (myDevnetWallet === 'REPLACE_WITH_YOUR_DEVNET_WALLET_ADDRESS') {
    console.warn("Please replace 'REPLACE_WITH_YOUR_DEVNET_WALLET_ADDRESS' with an actual Devnet wallet address to run the example.");
  } else {
    // getAirdrop(myDevnetWallet);
    console.log("Uncomment the line above and replace the placeholder to run the airdrop example.");
  }
  ```
</CodeGroup>

## Mẹo dành cho nhà phát triển

* **Theo từng mạng:** Phương thức này chỉ hoạt động trên các mạng kiểm thử (Devnet, Testnet) có bật faucet. Phương thức sẽ thất bại trên Mainnet Beta.
* **Giới hạn tốc độ:** Các faucet airdrop thường bị giới hạn tốc độ để ngăn chặn hành vi lạm dụng. Nếu gửi quá nhiều yêu cầu trong thời gian ngắn, bạn có thể nhận được lỗi.
* **Giới hạn số lượng:** Có thể có giới hạn về lượng SOL bạn được phép yêu cầu cho mỗi lần airdrop hoặc trong mỗi khoảng thời gian.
* **Xác nhận:** Sau khi `requestAirdrop` trả về một chữ ký, giao dịch vẫn cần được mạng xử lý và xác nhận. Bạn có thể sử dụng `confirmTransaction` (từ `@solana/web3.js`) hoặc thăm dò `getSignatureStatuses` để chờ xác nhận.

Hướng dẫn này giải thích cách sử dụng `requestAirdrop` để cấp vốn cho các tài khoản kiểm thử trên mạng phát triển của Solana.

## Các phương thức liên quan

<CardGroup cols={2}>
  <Card title="getBalance" href="/docs/vi/api-reference/rpc/http/getbalance">
    Kiểm tra số dư SOL sau khi nhận airdrop
  </Card>

  <Card title="getSignatureStatuses" href="/docs/vi/api-reference/rpc/http/getsignaturestatuses">
    Thăm dò trạng thái giao dịch để xác nhận airdrop
  </Card>
</CardGroup>
