> ## 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, примеры кода, параметры запроса, структуру ответа и рекомендации.

Метод RPC [`getBlockCommitment`](https://www.helius.dev/docs/api-reference/rpc/http/getblockcommitment) предоставляет информацию о статусе [подтверждения](https://www.helius.dev/blog/solana-commitment-levels) конкретного блока в реестре Solana. Это позволяет оценить степень финализации блока на основе стейка, проголосовавшего за него.

## Распространенные сценарии использования

* **Оценка финализации блока:** Определите достигнутый блоком уровень консенсуса, анализируя взвешенные по стейку голоса на разных глубинах подтверждения.
* **Оценка состояния кластера:** `totalStake` позволяет узнать общий активный стейк в кластере на момент обработки блока.
* **Расширенная логика подтверждения:** Подходит для приложений, которым требуются строго определенные гарантии финализации блока помимо стандартных уровней подтверждения (`confirmed`, `finalized`).

## Параметры

1. `slot` (число, обязательный): Номер слота (u64) блока, для которого необходимо запросить информацию о подтверждении.

## Ответ

Поле `result` ответа JSON-RPC содержит объект со следующими полями:

* `commitment` (массив целых чисел u64 | null):
  * Массив целых чисел u64, каждое из которых представляет объем стейка кластера (в лампортах), проголосовавшего за блок на определенной глубине подтверждения.
  * Обычно массив содержит 32 элемента, представляющих глубины от 0 до `MAX_LOCKOUT_HISTORY`, то есть до 31.
  * Элемент массива с индексом `i` показывает стейк, проголосовавший за блок, с учетом голосов за сам блок и его потомков на глубине до `i` уровней.
  * Если блок не найден или информация о его подтверждении недоступна — например, блок слишком старый и был удален из системы отслеживания подтверждений, — это поле будет иметь значение `null`.
* `totalStake` (число):
  * Общий активный стейк в кластере (в лампортах) в слоте, в котором был обработан этот блок. Это значение используется для расчета процента стейка, подтвердившего блок.

## Рекомендации разработчикам

* **Интерпретация массива `commitment`:**
  * Массив `commitment` показывает стейк (в лампортах), проголосовавший за блок на разных глубинах подтверждения. Более высокие значения у индексов, соответствующих большей глубине, указывают на более надежную финализацию.
  * Значение `null` для массива `commitment` часто означает, что узел не располагает данными для этого слота, возможно, потому что слот слишком старый или был пропущен.
  * Вы можете оценить финализацию на глубине `i`, если `commitment[i] / totalStake >= 2/3` (сверхбольшинство).
* **Расширенные сценарии использования:** `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.

**Примечание:** В приведенных ниже примерах замените `YOUR_API_KEY` своим фактическим ключом API Helius.

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


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.