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

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

Phương thức RPC [`getBlockCommitment`](https://www.helius.dev/docs/api-reference/rpc/http/getblockcommitment) cung cấp thông tin về trạng thái [cam kết](https://www.helius.dev/blog/solana-commitment-levels) của một khối cụ thể trong sổ cái Solana. Thông tin này hữu ích để xác định mức độ chung cuộc của một khối dựa trên lượng stake đã bỏ phiếu cho khối đó.

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

* **Đánh giá tính chung cuộc của khối:** Xác định mức độ đồng thuận mà một khối đã đạt được bằng cách xem xét các phiếu bầu được tính trọng số theo stake ở những độ sâu xác nhận khác nhau.
* **Tìm hiểu tình trạng của cụm:** `totalStake` cung cấp thông tin về tổng lượng stake đang hoạt động trong cụm tại thời điểm khối được xử lý.
* **Logic xác nhận nâng cao:** Dành cho các ứng dụng yêu cầu mức bảo đảm rất cụ thể về tính chung cuộc của khối, vượt ngoài các cấp độ cam kết tiêu chuẩn (`confirmed`, `finalized`).

## Tham số

1. `slot` (number, bắt buộc): Số slot (u64) của khối cần truy vấn thông tin cam kết.

## Phản hồi

Trường `result` trong phản hồi JSON-RPC sẽ là một đối tượng chứa:

* `commitment` (mảng các số nguyên u64 | null):
  * Một mảng các số nguyên u64, trong đó mỗi số nguyên biểu thị lượng stake của cụm (tính bằng lamport) đã bỏ phiếu cho khối ở một độ sâu xác nhận cụ thể.
  * Mảng thường có 32 phần tử (biểu thị các độ sâu từ 0 đến `MAX_LOCKOUT_HISTORY`, tức là 31).
  * Chỉ mục `i` của mảng cho biết lượng stake đã bỏ phiếu cho khối, có tính đến các phiếu bầu cho chính khối đó và các khối hậu duệ của nó ở độ sâu tối đa `i` cấp.
  * Nếu không tìm thấy khối hoặc không có thông tin cam kết của khối đó (ví dụ: khối đã quá cũ và bị loại khỏi dữ liệu theo dõi cam kết), trường này sẽ là `null`.
* `totalStake` (number):
  * Tổng lượng stake đang hoạt động trong cụm (tính bằng lamport) tại slot mà khối này được xử lý. Giá trị này được dùng để tính tỷ lệ phần trăm stake đã cam kết với khối.

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

* **Diễn giải mảng `commitment`:**
  * Mảng `commitment` cho biết lượng stake (tính bằng lamport) đã bỏ phiếu cho khối ở các độ sâu xác nhận khác nhau. Giá trị cao hơn tại các chỉ mục sâu hơn biểu thị tính chung cuộc mạnh hơn.
  * Mảng `commitment` có giá trị `null` thường có nghĩa là nút không có dữ liệu cho slot, có thể do slot đã quá cũ hoặc đã bị bỏ qua.
  * Bạn có thể đánh giá tính chung cuộc ở độ sâu `i` nếu `commitment[i] / totalStake >= 2/3` (siêu đa số).
* **Các trường hợp sử dụng nâng cao:** `getBlockCommitment` được dùng để phân tích chi tiết tính chung cuộc. Trong hầu hết các trường hợp phổ biến, việc sử dụng các cấp độ cam kết tiêu chuẩn (`processed`, `confirmed` hoặc `finalized`) với các phương thức RPC khác (như `getTransaction` hoặc `getBlock`) sẽ đơn giản và đầy đủ hơn.
* **Tìm hiểu về cam kết:** Để tận dụng tối đa `getBlockCommitment`, bạn cần hiểu rõ các cấp độ cam kết của Solana. Xem [Các cấp độ cam kết của Solana](https://www.helius.dev/blog/solana-commitment-levels) để biết thông tin chi tiết.
* **Cắt tỉa dữ liệu:** Lưu ý rằng các nút RPC có thể cắt tỉa thông tin cam kết cũ, khiến các slot cũ hơn trả về kết quả `null`.

## Ví dụ: Truy xuất thông tin cam kết của khối

Hãy thử truy xuất thông tin cam kết cho một số slot minh họa trên Devnet.
**Quan trọng:** Các số slot được xử lý rất nhanh. Số slot được dùng bên dưới (`250000000`) là giá trị giữ chỗ. Khi chạy ví dụ, bạn nên thay thế số này bằng một slot gần đây đã được xác nhận và chắc chắn tồn tại trên mạng đích (ví dụ: Devnet hoặc Mainnet). Bạn có thể tìm các số slot gần đây bằng trình khám phá khối Solana.

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

<CodeGroup>
  ```bash curl theme={"system"}
  # Replace 250000000 with a valid, recent slot number on Devnet/Mainnet
  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": "getBlockCommitment",
    "params": [
      250000000 
    ]
  }'
  ```

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

  async function getBlockCommitmentDetails() {
    const rpcUrl = 'https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY'; // Replace YOUR_API_KEY
    const connection = new Connection(rpcUrl, 'confirmed');
    
    // Replace with a valid, recent slot number on your target network
    const slotToQuery = 250000000; 

    try {
      // Note: getBlockCommitment is not directly available in @solana/web3.js Connection object.
      // You typically need to make a direct RPC call for this method.
      // The example below shows how to construct and send such a raw request.
      const response = await fetch(rpcUrl, {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
        },
        body: JSON.stringify({
          jsonrpc: '2.0',
          id: 1,
          method: 'getBlockCommitment',
          params: [slotToQuery],
        }),
      });
      const result = await response.json();

      if (result.error) {
        console.error(`Error fetching block commitment for slot ${slotToQuery}:`, result.error.message);
        return;
      }

      const blockCommitment = result.result;

      if (blockCommitment) {
        console.log(`Block Commitment for Slot ${slotToQuery}:`);
        console.log(`   Total Stake (Lamports): ${blockCommitment.totalStake}`);
        console.log(`   Commitment Array:`, blockCommitment.commitment ? blockCommitment.commitment : 'Not available/Unknown block');
        // The commitment array shows lamports committed at different depths.
        // A null commitment array usually means the block is not found or too old.
        // A non-null array where later entries are higher indicates increasing finality.
      } else {
        console.log(`Block commitment data for slot ${slotToQuery} not found.`);
      }
    } catch (error) {
      console.error(`Error fetching block commitment for slot ${slotToQuery}:`, error);
    }
  }

  getBlockCommitmentDetails();
  ```

  ```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);

  const slot_number = BigInt(5);

  let blockCommitment = await rpc.getBlockCommitment(slot_number).send();

  console.log("block commitment:", blockCommitment);
  ```
</CodeGroup>
