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

> Tìm hiểu các trường hợp sử dụng getSupply, 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 [`getSupply`](https://www.helius.dev/docs/api-reference/rpc/http/getsupply) cung cấp thông tin về nguồn cung SOL hiện tại trên mạng Solana. Phương thức này trình bày chi tiết tổng nguồn cung, nguồn cung lưu hành, nguồn cung không lưu hành và có thể tùy chọn liệt kê các tài khoản không lưu hành.

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

* **Tìm hiểu mô hình kinh tế của SOL:** Xem nhanh thông tin phân bổ SOL hiện tại.
* **Phân tích kinh tế:** Theo dõi những thay đổi của các chỉ số nguồn cung theo thời gian.
* **Hiển thị số liệu thống kê mạng:** Cung cấp cho người dùng thông tin mới nhất về nguồn cung SOL trên bảng điều khiển hoặc trình khám phá.
* **Theo dõi lạm phát:** Mặc dù `getInflationRate` và `getInflationGovernor` cung cấp dữ liệu lạm phát trực tiếp hơn, `getSupply` có thể cung cấp bối cảnh tổng quát hơn.

## Tham số yêu cầu

Phương thức `getSupply` chấp nhận một đối tượng cấu hình không bắt buộc với các trường sau:

1. **`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. Nếu bỏ qua, mức cam kết mặc định của nút RPC sẽ được sử dụng.
2. **`excludeNonCirculatingAccountsList`** (boolean, không bắt buộc): Nếu được đặt thành `true`, mảng `nonCirculatingAccounts` sẽ bị loại khỏi phản hồi. Giá trị mặc định là `false`. Tùy chọn này có thể giúp giảm kích thước phản hồi nếu không cần danh sách từng tài khoản không lưu hành.

**Ví dụ về cấu hình:**

```json theme={"system"}
{
  "commitment": "finalized",
  "excludeNonCirculatingAccountsList": true
}
```

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

Phản hồi là một đối tượng JSON có các trường sau:

* **`value`**: Một đối tượng chứa thông tin nguồn cung:
  * **`total`** (u64): Tổng nguồn cung SOL tính bằng lamport.
  * **`circulating`** (u64): Nguồn cung SOL lưu hành tính bằng lamport.
  * **`nonCirculating`** (u64): Nguồn cung SOL không lưu hành tính bằng lamport.
  * **`nonCirculatingAccounts`** (mảng chuỗi, không bắt buộc): Mảng khóa công khai (dưới dạng chuỗi được mã hóa base58) của các tài khoản nắm giữ SOL không lưu hành. Trường này sẽ bị bỏ qua nếu `excludeNonCirculatingAccountsList` được đặt thành `true` trong yêu cầu.
* **`context`**: Một đối tượng chứa:
  * **`slot`** (u64): Slot tại thời điểm truy xuất thông tin.

**Ví dụ về phản hồi (với `excludeNonCirculatingAccountsList: false`):**

```json theme={"system"}
{
  "jsonrpc": "2.0",
  "result": {
    "context": {
      "slot": 169890374
    },
    "value": {
      "circulating": 423105827585008800,
      "nonCirculating": 123456789012345678, // Example value
      "nonCirculatingAccounts": [
        "Stake11111111111111111111111111111111111111",
        "Vote11111111111111111111111111111111111111",
        // ... other non-circulating accounts
      ],
      "total": 546562616597354478
    }
  },
  "id": 1
}
```

**Ví dụ về phản hồi (với `excludeNonCirculatingAccountsList: true`):**

```json theme={"system"}
{
  "jsonrpc": "2.0",
  "result": {
    "context": {
      "slot": 169890380
    },
    "value": {
      "circulating": 423105830000000000,
      "nonCirculating": 123456780000000000, // Example value
      "total": 546562610000000000
      // nonCirculatingAccounts field is absent
    }
  },
  "id": 1
}
```

## Ví dụ mã

<CodeGroup>
  ```bash cURL theme={"system"}
  # Basic Request:
  curl -X POST -H "Content-Type: application/json" -d \
    '{"jsonrpc":"2.0","id":1,"method":"getSupply"}' \
    <YOUR_RPC_URL>

  # Request with excludeNonCirculatingAccountsList:
  curl -X POST -H "Content-Type: application/json" -d \
    '{"jsonrpc":"2.0","id":1,"method":"getSupply", "params": [{"excludeNonCirculatingAccountsList": true}]}' \
    <YOUR_RPC_URL>

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

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

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

    try {
      const supplyInfo = await connection.getSupply();
      console.log('Supply Information:', supplyInfo.value);
      console.log('Total SOL:', supplyInfo.value.total / 1_000_000_000); // Convert lamports to SOL
      console.log('Circulating SOL:', supplyInfo.value.circulating / 1_000_000_000);
      console.log('Non-Circulating SOL:', supplyInfo.value.nonCirculating / 1_000_000_000);

      if (supplyInfo.value.nonCirculatingAccounts) {
        console.log('Non-circulating accounts count:', supplyInfo.value.nonCirculatingAccounts.length);
      }

      // Example with options
      const supplyInfoWithoutAccountsList = await connection.getSupply({
        commitment: 'finalized',
        excludeNonCirculatingAccountsList: true,
      });
      console.log('\nSupply Information (excluding non-circulating accounts list):');
      console.log('Total SOL:', supplyInfoWithoutAccountsList.value.total / 1_000_000_000);
      console.log('Circulating SOL:', supplyInfoWithoutAccountsList.value.circulating / 1_000_000_000);

    } catch (error) {
      console.error('Error getting supply information:', error);
    }
  }

  getNetworkSupply();
  ```
</CodeGroup>

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

* **Lamport và SOL:** Các giá trị được trả về bằng lamport. Hãy nhớ chia cho `1,000,000,000` (1 SOL = 10^9 lamport) để chuyển đổi sang SOL.
* **Độ mới của dữ liệu:** Dữ liệu phản ánh trạng thái tại slot được chỉ định trong đối tượng `context` và dựa trên mức cam kết đã sử dụng.
* **`excludeNonCirculatingAccountsList`:** Sử dụng tùy chọn này nếu chỉ cần các số liệu nguồn cung tổng hợp để tối ưu hóa kích thước phản hồi và thời gian xử lý, đặc biệt khi danh sách tài khoản không lưu hành rất dài.
* **Giá trị động:** Các số liệu nguồn cung có thể thay đổi thường xuyên do cơ chế phát hành token (lạm phát) và đốt token.

Hướng dẫn này sẽ giúp bạn sử dụng hiệu quả phương thức RPC `getSupply` để truy vấn dữ liệu nguồn cung của Solana.

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

<CardGroup cols={2}>
  <Card title="getInflationRate" href="/docs/vi/api-reference/rpc/http/getinflationrate">
    Lấy tỷ lệ lạm phát hiện tại
  </Card>

  <Card title="getInflationGovernor" href="/docs/vi/api-reference/rpc/http/getinflationgovernor">
    Lấy các tham số quản trị lạm phát
  </Card>
</CardGroup>
