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

> Tìm hiểu các trường hợp sử dụng getBlockHeight, 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 [`getBlockHeight`](https://www.helius.dev/docs/api-reference/rpc/http/getblockheight) là một cách đơn giản để truy vấn chiều cao khối hiện tại từ một nút Solana. Chiều cao khối biểu thị số lượng khối đã được xử lý kể từ khối khởi nguyên (slot 0).

Phương thức này hữu ích để nhanh chóng xác định chuỗi đã tiến triển đến đâu hoặc tham chiếu chiều cao khối mới nhất ở một mức cam kết cụ thể.

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

* **Theo dõi tiến trình của chuỗi:** Gọi phương thức này định kỳ để theo dõi sự tiến triển của chuỗi.
* **Lấy thông tin nhanh về độ dài chuỗi:** Xác định tổng số khối đã được xử lý đến một thời điểm nhất định (dựa trên mức cam kết).
* **Đối chiếu với dữ liệu khác:** Sử dụng chiều cao khối làm điểm tham chiếu khi phân tích dữ liệu hoặc sự kiện khác trên chuỗi.

## Tham số

`getBlockHeight` có thể nhận một đối tượng cấu hình làm tham số đầu tiên (hoặc được gọi mà không có tham số để sử dụng các giá trị mặc định):

1. `config` (đối tượng, không bắt buộc): Một đối tượng cấu hình có các trường sau:
   * `commitment` (chuỗi, không bắt buộc): Chỉ định mức cam kết dùng cho truy vấn. Giá trị mặc định là `finalized`.
     * `finalized`: Nút sẽ truy vấn khối 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.
     * `confirmed`: Nút sẽ truy vấn khối gần đây nhất đã được siêu đa số trong cụm bỏ phiếu.
     * `processed`: Nút sẽ truy vấn khối gần đây nhất của nó. Lưu ý rằng khối có thể chưa hoàn tất.
   * `minContextSlot` (số, không bắt buộc): Slot tối thiểu mà tại đó yêu cầu có thể được đánh giá. Điều này đảm bảo chiều cao khối được trả về đến từ một slot lớn hơn hoặc bằng `minContextSlot`.

Nếu không cung cấp tham số, phương thức thường mặc định sử dụng mức cam kết `finalized`.

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

* **Mức cam kết rất quan trọng**: Chiều cao khối được trả về có thể thay đổi tùy theo mức `commitment` được chỉ định. `finalized` cung cấp chiều cao ổn định nhất, trong khi `processed` có thể cung cấp chiều cao mới hơn nhưng có khả năng chỉ tồn tại tạm thời.
* **`minContextSlot` để đảm bảo tính nhất quán**: Sử dụng `minContextSlot` nếu cần đảm bảo chiều cao khối được truy vấn từ một trạng thái ít nhất cũng mới bằng một slot cụ thể mà bạn đang theo dõi.
* **Không phải số slot**: Hãy nhớ rằng chiều cao khối khác với số slot. Slot là một khoảng thời gian và không phải slot nào cũng tạo ra khối (các slot này được gọi là slot bị bỏ qua). Chiều cao khối là số lượng khối thực tế đã được tạo.
* **Kiểm tra cơ bản tình trạng chuỗi**: Dù đơn giản, `getBlockHeight` có thể là một phần trong quy trình kiểm tra cơ bản về tình trạng hoặc khả năng đồng bộ của chuỗi cho ứng dụng hay hệ thống giám sát của bạn.

## Phản hồi

Trường `result` trong phản hồi JSON-RPC sẽ là một số duy nhất:

* `blockHeight` (số): Chiều cao khối hiện tại (u64) của nút theo mức cam kết đã chỉ định.

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

```json theme={"system"}
{
  "jsonrpc": "2.0",
  "result": 275123456, // Example block height
  "id": 1
}
```

Giá trị này biểu thị số lượng khối trên chuỗi dài nhất, tính từ khối khởi nguyên (slot 0) đến phần đầu hiện tại của chuỗi, theo góc nhìn của nút được truy vấn.

## Ví dụ: Lấy chiều cao khối hiện tại

Hãy lấy chiều cao khối hiện tại từ RPC Devnet của Helius.

**Lưu ý:** Thay `YOUR_API_KEY` bằng khóa API Helius thực tế của bạn trong các ví dụ dưới đây.

<CodeGroup>
  ```bash curl theme={"system"}
  curl https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY -X POST -H "Content-Type: application/json" -d \
  '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "getBlockHeight",
    "params": [] 
  }'
  ```

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

  async function getCurrentBlockHeight() {
    const rpcUrl = 'https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY'; // Replace YOUR_API_KEY
    const connection = new Connection(rpcUrl, 'confirmed');

    try {
      const blockHeight = await connection.getBlockHeight();
      console.log(`Current Block Height: ${blockHeight}`);

    } catch (error) {
      console.error('Error fetching block height:', error);
    }
  }

  getCurrentBlockHeight();
  ```

  ```typescript Kit theme={"system"}
  import { createSolanaRpc } from "@solana/kit";

  const rpc_url = "https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY";
  const rpc = createSolanaRpc(rpc_url);

  let blockHeight = await rpc.getBlockHeight().send();

  console.log("block height:", blockHeight);
  ```

  ```rust Rust theme={"system"}
  use anyhow::Result;
  use solana_client::nonblocking::rpc_client::RpcClient;
  use solana_sdk::commitment_config::CommitmentConfig;

  #[tokio::main]
  async fn main() -> Result<()> {
      let client = RpcClient::new_with_commitment(
          String::from("https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY"),
          CommitmentConfig::confirmed(),
      );

      let block_height = client.get_block_height().await?;

      println!("Block height: {:#?}", block_height);

      Ok(())
  }
  ```
</CodeGroup>
