> ## 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 getTokenSupply

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

Phương thức RPC [`getTokenSupply`](https://www.helius.dev/docs/api-reference/rpc/http/gettokensupply) trả về tổng nguồn cung của một mint SPL Token cụ thể. Thông tin này rất cần thiết để xác định tổng số lượng token đã được tạo.

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

* **Hiển thị thông tin token:** Hiển thị tổng nguồn cung của token trên trình khám phá hoặc trong giao diện ví.
* **Phân tích tokenomics:** Xác định tổng lượng phát hành tối đa hoặc hiện tại của token.
* **Xác minh:** Kiểm tra nguồn cung của token theo dữ liệu do chính tài khoản mint báo cáo.
* **Theo dõi thay đổi nguồn cung:** Nếu có thể mint thêm token, phương thức này có thể được dùng để theo dõi những thay đổi trong tổng nguồn cung theo thời gian (mặc dù với token có thể thay thế, nguồn cung thường cố định hoặc do một cơ quan mint quản lý).

## Tham số yêu cầu

1. **`mintAddress`** (chuỗi, bắt buộc): Khóa công khai được mã hóa base-58 của mint token có tổng nguồn cung mà bạn muốn truy vấn.

2. **`options`** (đối tượng, không bắt buộc): Đối tượng cấu hình không bắt buộc, có thể bao gồm:
   * **`commitment`** (chuỗi, không bắt buộc): Chỉ định [mức cam kết](https://www.helius.dev/blog/solana-commitment-levels) cho truy vấn (ví dụ: `"finalized"`, `"confirmed"`, `"processed"`).

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

Trường `result.value` trong phản hồi JSON-RPC là một đối tượng chứa thông tin chi tiết về nguồn cung của token:

* **`amount`** (chuỗi): Tổng nguồn cung của token theo đơn vị nhỏ nhất (số lượng thô), ở dạng chuỗi. Giá trị này chưa được điều chỉnh theo số chữ số thập phân.
* **`decimals`** (u8): Số chữ số thập phân được xác định cho mint token này. Thông tin này rất quan trọng để chuyển đổi `amount` thô sang định dạng con người có thể đọc được.
* **`uiAmount`** (số | null): Tổng nguồn cung của token dưới dạng số dấu phẩy động, được điều chỉnh theo `decimals` của token. Trường này có thể là null hoặc có độ chính xác thấp hơn; `uiAmountString` thường được ưu tiên để hiển thị.
* **`uiAmountString`** (chuỗi): Tổng nguồn cung của token dưới dạng chuỗi, được điều chỉnh theo `decimals` của token. Đây là cách biểu diễn tổng nguồn cung thân thiện nhất với người dùng.

**Ví dụ về phản hồi:**

```json theme={"system"}
{
  "jsonrpc": "2.0",
  "result": {
    "context": { "slot": 123456789 },
    "value": {
      "amount": "1000000000000000", // e.g., 1,000,000,000 tokens with 6 decimals
      "decimals": 6,
      "uiAmount": 1000000000.0,
      "uiAmountString": "1000000000.0"
    }
  },
  "id": 1
}
```

## Ví dụ mã

<CodeGroup>
  ```bash cURL theme={"system"}
  # Replace <TOKEN_MINT_PUBKEY> with the actual mint address
  curl -X POST -H "Content-Type: application/json" -d \
    '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "getTokenSupply",
      "params": [
        "<TOKEN_MINT_PUBKEY>"
      ]
    }' \
    <YOUR_RPC_URL>

  # Example with commitment level
  curl -X POST -H "Content-Type: application/json" -d \
    '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "getTokenSupply",
      "params": [
        "<TOKEN_MINT_PUBKEY>",
        { "commitment": "confirmed" }
      ]
    }' \
    <YOUR_RPC_URL>
  ```

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

  async function checkTokenSupply(mintAddress) {
    // Replace with your RPC endpoint
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    const mintPublicKey = new PublicKey(mintAddress);

    try {
      const tokenSupply = await connection.getTokenSupply(mintPublicKey);
      console.log(`Token Supply for Mint ${mintAddress}:`);
      console.log(`  UI Amount: ${tokenSupply.value.uiAmountString}`);
      console.log(`  Raw Amount: ${tokenSupply.value.amount}`);
      console.log(`  Decimals: ${tokenSupply.value.decimals}`);
      // For full details:
      // console.log(JSON.stringify(tokenSupply, null, 2));
    } catch (error) {
      console.error(`Error fetching token supply for mint ${mintAddress}:`, error);
    }
  }

  // Replace with the actual token mint public key you want to query
  const exampleTokenMint = 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v'; // USDC mint
  checkTokenSupply(exampleTokenMint);

  // Example with a different mint (e.g., Raydium)
  // const raydiumMint = '4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R';
  // checkTokenSupply(raydiumMint);
  ```
</CodeGroup>

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

* **Nguồn cung bất biến (thường là vậy):** Với hầu hết SPL Token, sau khi được mint, tổng nguồn cung theo góc nhìn của chính tài khoản mint sẽ cố định, trừ khi mint có một cơ quan mint cụ thể có thể tạo thêm token (hoặc đốt token, mặc dù việc đốt thường diễn ra từ các tài khoản token chứ không trực tiếp từ nguồn cung của mint).
* **`decimals` là yếu tố then chốt:** Luôn sử dụng trường `decimals` để diễn giải chính xác `amount` hoặc `uiAmountString`.
* **Nguồn dữ liệu:** Phương thức này truy vấn trực tiếp tài khoản mint để lấy thông tin nguồn cung.

Hướng dẫn này cung cấp thông tin cần thiết để sử dụng hiệu quả phương thức RPC `getTokenSupply` nhằm truy vấn nguồn cung SPL Token trên Solana.
