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

# 如何使用 getBlockCommitment

> 了解 getBlockCommitment 的使用案例、代码示例、请求参数、响应结构和提示。

这个[`getBlockCommitment`](https://www.helius.dev/docs/api-reference/rpc/http/getblockcommitment) RPC方法提供有关Solana分类帐中特定区块的[提交](https://www.helius.dev/blog/solana-commitment-levels)状态的信息。这对于了解一个区块的最终确定程度非常有用，根据已投票的权益来判断。

## 常见用例

* **评估区块最终性：** 通过检查不同确认深度的权益加权投票，确定一个区块已实现的共识水平。
* **了解集群健康：** `totalStake`提供有关在区块被处理时集群中的总活跃权益的洞察。
* **高级确认逻辑：** 对于需要非常具体的区块最终性保证的应用程序，超出标准提交级别的要求（`confirmed`, `finalized`）。

## 参数

1. `slot` (number, required)：要查询提交信息的区块的槽号（u64）。

## 响应

JSON-RPC响应的`result`字段将是一个包含以下内容的对象：

* `commitment` (array of u64 integers | null):
* 一个u64整数数组，其中每个整数表示在特定确认深度上对区块投票的集群权益量（以lamports计）。
* 数组通常有32个元素（代表深度0到`MAX_LOCKOUT_HISTORY`，即31）。
* 数组的索引`i`显示对区块投票的权益，包括对区块本身及其后代区块达到`i`层深的投票。
* 如果未找到区块或其提交信息不可用（例如，被删除的太老的提交追踪），此字段将为`null`。
* `totalStake` (number):
* 在此区块被处理时，集群中的总活跃权益（以lamports计）。此值用于计算对区块提交的权益百分比。

## 开发者提示

* **解释 `commitment` 数组：**
  * `commitment` 数组显示了在不同确认深度下为区块投票的抵押（以 lamports 为单位）。在更深的索引处的值越高表明更强的终结性。
  * 如果一个 `null` `commitment` 数组出现，这通常意味着节点没有该插槽的数据，可能是因为数据太旧或被跳过。
  * 如果 `commitment[i] / totalStake >= 2/3`（超级多数），则可以在深度 `i` 测量终结性。
* **高级用例：** `getBlockCommitment` 用于细致的终结性分析。在大多数常见情境中，依靠标准的承诺级别（`processed`, `confirmed`, 或 `finalized`）与其他 RPC 方法（如 `getTransaction` 或 `getBlock`）进行简单且足够的使用。
* **理解承诺：** 要充分利用 `getBlockCommitment` ，对 Solana 的承诺级别有一个扎实的了解是至关重要的。请参阅 [Solana 承诺级别](https://www.helius.dev/blog/solana-commitment-levels) 获取详细信息。
* **修剪：** 请注意，RPC 节点可能会修剪旧的承诺信息，导致旧插槽出现 `null` 结果。

## 示例：获取区块承诺信息

让我们尝试获取一个说明性插槽编号的承诺信息，使用 Devnet。
**重要：** 插槽编号快速处理。以下使用的插槽编号（`250000000`）是一个占位符。运行示例时，应将其替换为您知道在目标网络（例如 Devnet 或 Mainnet）上存在的最新已确认插槽。您可以使用 Solana 区块浏览器找到最新的插槽编号。

**注意：** 在下面的示例中，用您实际的 Helius API 密钥替换 `YOUR_API_KEY`。

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