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

> Tìm hiểu các trường hợp sử dụng getSlot, 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 [`getSlot`](https://www.helius.dev/docs/api-reference/rpc/http/getslot) trả về slot hiện tại mà nút RPC cho là đã đạt đến một mức cam kết cụ thể. Đây là phương thức cơ bản để hiểu trạng thái hiện tại của blockchain theo góc nhìn của nút.

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

* **Lấy tiến trình hiện tại của mạng:** Xác định slot gần đây nhất đã được nút xử lý hoặc xác nhận.
* **Kiểm tra khả năng đồng bộ hóa của nút:** So sánh slot từ các nút khác nhau có thể cho biết trạng thái đồng bộ hóa của chúng.
* **Gắn dấu thời gian cho hoạt động:** Sử dụng slot hiện tại làm điểm tham chiếu cho các hoạt động hoặc để xác định độ cũ của một số dữ liệu.
* **Đầu vào cho các lệnh gọi RPC khác:** Một số phương thức RPC có thể sử dụng số slot làm điểm tham chiếu.

## Tham số yêu cầu

Phương thức này nhận một đối tượng cấu hình không bắt buộc làm tham số đầu tiên:

1. **`options`** (`object`, không bắt buộc): Một đối tượng cấu hình không bắt buộc có các trường sau:
   * **`commitment`** (`string`, 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. Các giá trị được hỗ trợ là `finalized`, `confirmed` hoặc `processed`. Nếu bỏ qua, mức cam kết mặc định của nút RPC sẽ được sử dụng (thường là `finalized`).
     * `processed`: Nút sẽ truy vấn slot gần đây nhất của nó. Lưu ý rằng slot này có thể chưa được cụm xác nhận và có khả năng bị bỏ qua.
     * `confirmed`: Nút sẽ truy vấn slot gần đây nhất đã được siêu đa số trong cụm bỏ phiếu.
     * `finalized`: Nút sẽ truy vấn slot gần đây nhất được siêu đa số trong cụm xác nhận là đã đạt mức khóa tối đa (không thể hoàn tác).
   * **`minContextSlot`** (`number`, không bắt buộc): Slot tối thiểu mà tại đó yêu cầu có thể được đánh giá. Tham số này đặt slot tối thiểu cho ngữ cảnh của nút. Nếu trạng thái của nút cũ hơn slot này, nút có thể trả về lỗi hoặc một số slot phản ánh trạng thái hiện tại (cũ hơn) của nó so với mức tối thiểu này.

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

Trường `result` trong phản hồi JSON-RPC là một giá trị `u64` duy nhất (số nguyên 64 bit không dấu), biểu thị số slot hiện tại theo mức cam kết đã chỉ định.

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

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

## Ví dụ

### 1. Lấy slot hiện tại (mức cam kết mặc định)

Ví dụ này lấy slot hiện tại bằng mức cam kết mặc định của nút (thường là `finalized`).

<CodeGroup>
  ```bash cURL theme={"system"}
  # Replace <api-key> with your Helius API key
  curl https://mainnet.helius-rpc.com/?api-key=<api-key> -X POST -H "Content-Type: application/json" -d \
    '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "getSlot"
    }'
  ```

  ```javascript JavaScript (using @solana/web3.js) theme={"system"}
  // Replace <api-key> with your Helius API key
  const { Connection } = require('@solana/web3.js');

  async function getCurrentSlot() {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    try {
      const slot = await connection.getSlot();
      console.log('Current slot (default commitment):', slot);
    } catch (error) {
      console.error('Error fetching current slot:', error);
    }
  }

  getCurrentSlot();
  ```
</CodeGroup>

### 2. Lấy slot hiện tại với một mức cam kết cụ thể

Ví dụ này lấy slot hiện tại đã đạt mức cam kết `confirmed`.

<CodeGroup>
  ```bash cURL theme={"system"}
  # Replace <api-key> with your Helius API key
  curl https://mainnet.helius-rpc.com/?api-key=<api-key> -X POST -H "Content-Type: application/json" -d \
    '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "getSlot",
      "params": [
        {
          "commitment": "confirmed"
        }
      ]
    }'
  ```

  ```javascript JavaScript (using @solana/web3.js) theme={"system"}
  // Replace <api-key> with your Helius API key
  const { Connection } = require('@solana/web3.js');

  async function getConfirmedSlot() {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    try {
      const slot = await connection.getSlot('confirmed');
      console.log('Current slot (confirmed commitment):', slot);
      // Note: For @solana/web3.js v1.30.0 and later, you can pass commitment directly.
      // For older versions or more complex options, use an object:
      // const slot = await connection.getSlot({ commitment: 'confirmed' });
    } catch (error) {
      console.error('Error fetching confirmed slot:', error);
    }
  }

  getConfirmedSlot();
  ```
</CodeGroup>

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

* **Mức cam kết rất quan trọng:** Số slot được trả về phụ thuộc nhiều vào mức `commitment` đã chỉ định. Tham khảo [Các mức cam kết của Solana](https://www.helius.dev/blog/solana-commitment-levels) để biết thông tin chi tiết. `processed` sẽ là slot cao nhất (gần đây nhất) mà nút biết, trong khi `finalized` sẽ là một slot cũ hơn đã được toàn bộ mạng xác nhận. Hãy chọn mức cam kết phù hợp với yêu cầu về tính hoàn tất của dữ liệu trong trường hợp sử dụng của bạn.
* **Sự khác biệt giữa các nút:** Các nút RPC khác nhau có thể trả về số slot hơi khác nhau cho cùng một mức cam kết do độ trễ lan truyền mạng hoặc trạng thái xử lý riêng của chúng. Điều này đặc biệt đúng với các mức `processed` và `confirmed`.
* **`minContextSlot`:** Tham số này đảm bảo rằng nút xử lý yêu cầu của bạn ít nhất đã đạt đến `minContextSlot`. Nếu nút chưa đạt đến slot này, hành vi có thể khác nhau (ví dụ: trả về lỗi hoặc slot cao nhất hiện tại của nút, nhỏ hơn `minContextSlot`). Tham số này thường được dùng trong các trường hợp nâng cao, khi cần đảm bảo truy vấn được thực hiện trên một trạng thái đủ mới.

`getSlot` là một phương thức đơn giản nhưng thiết yếu để tương tác với blockchain Solana và nắm được tiến trình hiện tại của nó.
