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

# Giới hạn tốc độ của Helius

> Hướng dẫn đầy đủ về giới hạn tốc độ của Helius trên tất cả các gói và sản phẩm.

## Giới hạn tốc độ là gì?

Giới hạn tốc độ kiểm soát số lượng yêu cầu bạn có thể gửi mỗi giây. Khi vượt quá giới hạn tốc độ, bạn sẽ nhận được phản hồi HTTP 429. Để biết cách xử lý khi gặp lỗi 429 hoặc lỗi tạm thời khác, hãy xem phần [Thử lại và xử lý lỗi](#thử-lại-và-xử-lý-lỗi) bên dưới.

## Giới hạn tốc độ tiêu chuẩn

Gói của bạn có hai nhóm giới hạn tốc độ tiêu chuẩn: một nhóm dành cho các yêu cầu RPC và một nhóm dành cho các yêu cầu DAS API. Sau đây là giới hạn tốc độ cơ bản của từng gói Helius:

<table>
  <thead align="left">
    <tr>
      <th width="200">Gói</th>
      <th width="260">Giới hạn tốc độ RPC</th>
      <th width="260">DAS và API nâng cao</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td><strong>Miễn phí</strong></td>
      <td>10 yêu cầu/giây</td>
      <td>2 yêu cầu/giây</td>
    </tr>

    <tr>
      <td><strong>Nhà phát triển</strong></td>
      <td>50 yêu cầu/giây</td>
      <td>10 yêu cầu/giây</td>
    </tr>

    <tr>
      <td><strong>Doanh nghiệp</strong></td>
      <td>200 yêu cầu/giây</td>
      <td>50 yêu cầu/giây</td>
    </tr>

    <tr>
      <td><strong>Chuyên nghiệp</strong></td>
      <td>500 yêu cầu/giây</td>
      <td>100 yêu cầu/giây</td>
    </tr>

    <tr>
      <td><strong>Enterprise</strong></td>
      <td>Tùy chỉnh</td>
      <td>Tùy chỉnh</td>
    </tr>
  </tbody>
</table>

### Tăng giới hạn tốc độ

Các nhóm sử dụng gói Chuyên nghiệp có thể mua thêm 100 RPS với giá \$100/tháng.

Nếu cần giới hạn tốc độ tùy chỉnh trước khi ra mắt, hãy [liên hệ với đội ngũ bán hàng của chúng tôi](https://www.helius.dev/contact). Nếu đang sử dụng gói Nhà phát triển hoặc Doanh nghiệp, vui lòng nâng cấp gói để tăng giới hạn tốc độ.

## Giới hạn tốc độ đặc biệt

Một số điểm cuối và sản phẩm chuyên biệt của Helius có giới hạn tốc độ riêng do yêu cầu tính toán của chúng.

### Gửi giao dịch

<table>
  <thead align="left">
    <tr>
      <th width="200">Điểm cuối</th>
      <th width="100">Miễn phí</th>
      <th width="100">Nhà phát triển</th>
      <th width="100">Doanh nghiệp</th>
      <th width="100">Chuyên nghiệp</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td><code>Sender</code></td>
      <td>50/giây</td>
      <td>50/giây</td>
      <td>50/giây</td>
      <td>50/giây</td>
    </tr>

    <tr>
      <td><code>sendTransaction</code></td>
      <td>1/giây</td>
      <td>5/giây</td>
      <td>50/giây</td>
      <td>100/giây</td>
    </tr>

    <tr>
      <td><code>sendBundle</code></td>
      <td>—</td>
      <td>—</td>
      <td>5/giây</td>
      <td>5/giây</td>
    </tr>

    <tr>
      <td><code>simulateBundle</code></td>
      <td>10/giây</td>
      <td>50/giây</td>
      <td>200/giây</td>
      <td>500/giây</td>
    </tr>
  </tbody>
</table>

Nếu đang sử dụng gói Chuyên nghiệp và cần tăng giới hạn tốc độ `sendTransaction`, hãy [liên hệ với đội ngũ bán hàng của chúng tôi](https://www.helius.dev/contact).

Người dùng gói Chuyên nghiệp cũng có thể [yêu cầu](https://www.helius.dev/contact) tăng giới hạn tốc độ và thiết lập tiền tip tùy chỉnh cho Sender nhằm hỗ trợ các ứng dụng giao dịch có thông lượng cao hơn.

### Lệnh gọi RPC phức tạp

<table>
  <thead align="left">
    <tr>
      <th width="200">Điểm cuối</th>
      <th width="100">Miễn phí</th>
      <th width="100">Nhà phát triển</th>
      <th width="100">Doanh nghiệp</th>
      <th width="100">Chuyên nghiệp</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td><code>getProgramAccounts</code></td>
      <td>5/giây</td>
      <td>25/giây</td>
      <td>50/giây</td>
      <td>75/giây</td>
    </tr>
  </tbody>
</table>

### Dữ liệu lịch sử

Khi gửi yêu cầu theo lô cho các phương thức dữ liệu lịch sử, các giới hạn sau sẽ được áp dụng:

<table>
  <thead align="left">
    <tr>
      <th style={{width: '300px'}}>Phương thức</th>
      <th style={{width: '300px'}}>Kích thước lô tối đa</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td><code>getTransaction</code></td>
      <td>100 mục cho mỗi yêu cầu</td>
    </tr>

    <tr>
      <td><code>getTransactionsForAddress</code></td>
      <td>Không cho phép yêu cầu theo lô</td>
    </tr>

    <tr>
      <td><code>getTransfersByAddress</code></td>
      <td>Không cho phép yêu cầu theo lô</td>
    </tr>

    <tr>
      <td>Tất cả các phương thức dữ liệu lịch sử khác</td>
      <td>10 mục cho mỗi yêu cầu</td>
    </tr>
  </tbody>
</table>

<Warning>
  Việc vượt quá giới hạn lô sẽ dẫn đến phản hồi lỗi. Đối với `getTransactionsForAddress` và `getTransfersByAddress`, mỗi địa chỉ phải được truy vấn trong một yêu cầu riêng.
</Warning>

### LaserStream

<table>
  <thead align="left">
    <tr>
      <th width="200">Tài nguyên</th>
      <th width="50">Miễn phí</th>
      <th width="100">Nhà phát triển</th>
      <th width="100">Doanh nghiệp</th>
      <th width="150">Chuyên nghiệp</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>Mạng</td>
      <td>—</td>
      <td>Devnet</td>
      <td>Devnet, Mainnet</td>
      <td>Devnet, Mainnet</td>
    </tr>

    <tr>
      <td>Số khóa công khai tối đa</td>
      <td>—</td>
      <td>10M</td>
      <td>10M</td>
      <td>10M</td>
    </tr>

    <tr>
      <td>Kết nối đang hoạt động</td>
      <td>—</td>
      <td>—</td>
      <td>10</td>
      <td>100</td>
    </tr>
  </tbody>
</table>

### Wallet API

[Wallet API](/docs/vi/api-reference/wallet-api) áp dụng cùng giới hạn tốc độ với DAS và API nâng cao. Tất cả các điểm cuối đều dùng chung các giới hạn này:

<table>
  <thead align="left">
    <tr>
      <th width="200">Điểm cuối</th>
      <th width="100">Miễn phí</th>
      <th width="100">Nhà phát triển</th>
      <th width="100">Doanh nghiệp</th>
      <th width="100">Chuyên nghiệp</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>Tất cả điểm cuối Wallet API</td>
      <td>2/giây</td>
      <td>10/giây</td>
      <td>50/giây</td>
      <td>100/giây</td>
    </tr>
  </tbody>
</table>

Các điểm cuối này bao gồm tra cứu danh tính, số dư, lịch sử, chuyển khoản và nguồn nạp tiền. Tìm hiểu thêm trong [tài liệu Wallet API](/docs/vi/wallet-api/overview) của chúng tôi.

### Luồng đã phân tích cú pháp

<table>
  <thead align="left">
    <tr>
      <th width="200">Tài nguyên</th>
      <th width="100">Miễn phí</th>
      <th width="100">Nhà phát triển</th>
      <th width="100">Doanh nghiệp</th>
      <th width="100">Chuyên nghiệp</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>Kết nối đồng thời</td>
      <td>5</td>
      <td>10</td>
      <td>50</td>
      <td>50</td>
    </tr>

    <tr>
      <td>Đăng ký trên mỗi kết nối</td>
      <td>25</td>
      <td>25</td>
      <td>25</td>
      <td>25</td>
    </tr>
  </tbody>
</table>

Các kết nối được tính theo từng dự án, trên tất cả khóa API của dự án đó. Dự án đạt giới hạn kết nối sẽ nhận được HTTP 429. Xem [giới hạn Luồng đã phân tích cú pháp](/docs/vi/api-reference/parsed-streams/overview#giới-hạn) để biết giới hạn theo từng bộ lọc và tin nhắn.

### LaserStream WebSocket

<table>
  <thead align="left">
    <tr>
      <th width="200">Tài nguyên</th>
      <th width="100">Miễn phí</th>
      <th width="100">Nhà phát triển</th>
      <th width="100">Doanh nghiệp</th>
      <th width="100">Chuyên nghiệp</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>Kết nối đồng thời</td>
      <td>5</td>
      <td>150</td>
      <td>250</td>
      <td>1,000</td>
    </tr>

    <tr>
      <td>Đăng ký trên mỗi kết nối</td>
      <td>1,000</td>
      <td>1,000</td>
      <td>1,000</td>
      <td>1,000</td>
    </tr>

    <tr>
      <td>Loại WebSocket</td>
      <td>Tiêu chuẩn</td>
      <td>Tiêu chuẩn, Nâng cao</td>
      <td>Tiêu chuẩn, Nâng cao</td>
      <td>Tiêu chuẩn, Nâng cao</td>
    </tr>
  </tbody>
</table>

### Webhook

<table>
  <thead align="left">
    <tr>
      <th width="200">Tài nguyên</th>
      <th width="100">Miễn phí</th>
      <th width="100">Nhà phát triển</th>
      <th width="100">Doanh nghiệp</th>
      <th width="100">Chuyên nghiệp</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>Số webhook tối đa</td>
      <td>5</td>
      <td>50</td>
      <td>50</td>
      <td>50</td>
    </tr>

    <tr>
      <td>Số địa chỉ trên mỗi webhook</td>
      <td>100k</td>
      <td>100k</td>
      <td>100k</td>
      <td>100k</td>
    </tr>
  </tbody>
</table>

### Nén ZK

<table>
  <thead align="left">
    <tr>
      <th width="200">Dịch vụ</th>
      <th width="100">Miễn phí</th>
      <th width="100">Nhà phát triển</th>
      <th width="100">Doanh nghiệp</th>
      <th width="100">Chuyên nghiệp</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>Photon API</td>
      <td>2/giây</td>
      <td>10/giây</td>
      <td>50/giây</td>
      <td>100/giây</td>
    </tr>

    <tr>
      <td><code>getValidityProof</code></td>
      <td>1/giây</td>
      <td>5/giây</td>
      <td>10/giây</td>
      <td>20/giây</td>
    </tr>
  </tbody>
</table>

## Thử lại và xử lý lỗi

Khi ứng dụng nhận được phản hồi `429 Too Many Requests`, `503 Service Unavailable` hoặc phản hồi `5xx` tạm thời, hãy chờ một lúc rồi thử lại — đừng thử lại ngay lập tức. Việc thử lại ngay sẽ khiến các yêu cầu dồn lại và làm quá trình phục hồi sau khi vượt giới hạn tốc độ chậm hơn, chứ không nhanh hơn.

### Chiến lược đề xuất

* Chờ khoảng **1 giây** trước lần thử lại đầu tiên.
* **Tăng gấp đôi thời gian chờ** sau mỗi lần thử lại, tối đa **30 giây**.
* Thêm một khoảng biến thiên ngẫu nhiên nhỏ **±25%** vào mỗi lần chờ để nhiều ứng dụng không thử lại cùng một thời điểm.
* Dừng sau **5 lần thử** và trả lỗi về mã đã gọi bạn.

### Những lỗi nên thử lại

| Trạng thái                 | Thử lại? | Lý do                                                                        |
| -------------------------- | -------- | ---------------------------------------------------------------------------- |
| `400`, `401`, `403`, `404` | Không    | Lỗi máy khách — việc thử lại sẽ không thay đổi kết quả.                      |
| `408`                      | Có       | Yêu cầu hết thời gian chờ.                                                   |
| `409`                      | Không    | Xung đột — xử lý tại mã gọi.                                                 |
| `422`                      | Không    | Lỗi xác thực dữ liệu.                                                        |
| `429`                      | Có       | Đã vượt quá giới hạn tốc độ — hãy chờ và thử lại với thời gian chờ tăng dần. |
| `500`, `502`               | Có       | Lỗi máy chủ tạm thời.                                                        |
| `503`                      | Có       | Dịch vụ không khả dụng — hãy chờ và thử lại với thời gian chờ tăng dần.      |
| `504`                      | Có       | Cổng kết nối hết thời gian chờ.                                              |
| Lỗi mạng                   | Có       | Kết nối bị đặt lại, lỗi DNS hoặc socket hết thời gian chờ.                   |

### Ví dụ

<CodeGroup>
  ```ts TypeScript theme={"system"}
  const RETRYABLE = new Set([408, 429, 500, 502, 503, 504]);

  export async function callWithRetry<T>(
    request: () => Promise<Response>,
    maxAttempts = 5,
  ): Promise<T> {
    let delay = 1000;
    for (let attempt = 1; attempt <= maxAttempts; attempt++) {
      const res = await request();
      if (res.ok) return (await res.json()) as T;

      if (!RETRYABLE.has(res.status) || attempt === maxAttempts) {
        throw new Error(`${res.status} after ${attempt} attempt(s): ${await res.text()}`);
      }

      const jitterMs = delay * (0.75 + Math.random() * 0.5);
      await new Promise((r) => setTimeout(r, jitterMs));
      delay = Math.min(delay * 2, 30_000);
    }
    throw new Error("unreachable");
  }
  ```

  ```python Python theme={"system"}
  import random
  import time

  RETRYABLE = {408, 429, 500, 502, 503, 504}

  def call_with_retry(request, max_attempts: int = 5):
      delay = 1.0
      for attempt in range(1, max_attempts + 1):
          response = request()
          if response.ok:
              return response.json()

          if response.status_code not in RETRYABLE or attempt == max_attempts:
              response.raise_for_status()

          time.sleep(delay * random.uniform(0.75, 1.25))
          delay = min(delay * 2, 30.0)
  ```

  ```bash Shell theme={"system"}
  call_with_retry() {
    local attempt=1 delay=1 body status
    while [ "$attempt" -le 5 ]; do
      response=$(curl -sS -w "\n%{http_code}" "$@")
      body=$(printf '%s\n' "$response" | sed '$d')
      status=$(printf '%s\n' "$response" | tail -n1)
      case "$status" in
        2*) printf '%s\n' "$body"; return 0 ;;
        408|429|500|502|503|504) ;;  # fall through and retry
        *) printf '%s\n' "$body" >&2; return 1 ;;
      esac
      # ~delay seconds with 25% jitter
      sleep "$(awk -v d="$delay" 'BEGIN { srand(); print d * (0.75 + rand() * 0.5) }')"
      delay=$(( delay * 2 > 30 ? 30 : delay * 2 ))
      attempt=$(( attempt + 1 ))
    done
    return 1
  }
  ```
</CodeGroup>

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

Tất cả Helius API đều trả về nội dung JSON có cấu trúc khi xảy ra lỗi. Các điểm cuối JSON-RPC (Solana RPC, DAS, Sender, Priority Fee, ZK Compression) trả về cấu trúc bao JSON-RPC 2.0 tiêu chuẩn:

```json theme={"system"}
{
  "jsonrpc": "2.0",
  "error": { "code": -32005, "message": "Too many requests" },
  "id": "1"
}
```

Các điểm cuối REST (Wallet API, Admin API) trả về:

```json theme={"system"}
{
  "error": "RATE_LIMIT_EXCEEDED",
  "code": 429,
  "details": "Too many requests. Retry after 2 seconds."
}
```

Xem [Các mã lỗi thường gặp](/docs/vi/api-reference/common-error-codes) để biết danh sách đầy đủ các mã lỗi và ý nghĩa của từng mã.
