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

# Как использовать getBlockProduction

> Изучите сценарии использования getBlockProduction, примеры кода, параметры запроса, структуру ответа и рекомендации.

Метод RPC [`getBlockProduction`](https://www.helius.dev/docs/api-reference/rpc/http/getblockproduction) предоставляет информацию о создании блоков в текущей эпохе или в указанном диапазоне слотов. Его можно использовать для получения данных обо всех валидаторах или о конкретном идентификаторе валидатора. Это полезно для мониторинга производительности валидаторов и анализа закономерностей создания блоков в сети.

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

* **Мониторинг производительности валидатора:** Отслеживайте количество созданных блоков и слоты лидера для конкретного валидатора.
* **Анализ производительности за эпоху:** Получайте общую картину создания блоков всеми валидаторами в текущей или прошлой эпохе.
* **Выявление пропущенных слотов:** Проверяйте, пропускают ли валидаторы назначенные им слоты лидера.
* **Проверка состояния сети:** Собирайте данные об общей эффективности создания блоков.

## Параметры запроса

Метод `getBlockProduction` принимает необязательный объект конфигурации со следующими параметрами:

1. **`commitment`** (строка, необязательно): Задает уровень подтверждения для запроса. Если параметр не указан, используется уровень подтверждения узла по умолчанию.
2. **`range`** (объект, необязательно): Определяет диапазон слотов для запроса.
   * `firstSlot` (u64): Первый слот, для которого нужно получить информацию о создании блоков (включительно).
   * `lastSlot` (u64, необязательно): Последний слот, для которого нужно получить информацию о создании блоков (включительно). Если параметр не указан, возвращаются данные о создании блоков в текущей эпохе до текущего слота.
3. **`identity`** (строка, необязательно): Публичный ключ идентификатора валидатора в кодировке base58. Если он указан, ответ будет содержать информацию о создании блоков только для этого валидатора. Если параметр не указан, возвращается информация обо всех валидаторах в указанном диапазоне или текущей эпохе.

**Примечание:** Необходимо указать хотя бы один из параметров: `identity` или `range.firstSlot`. Если `identity` не указан, параметр `range` обязателен.

## Структура ответа

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

* `context` (объект):
  * `slot` (u64): Слот, на котором была получена информация.
* `value` (объект):
  * `byIdentity` (объект): Объект, ключами которого являются строки идентификаторов валидаторов — публичные ключи в кодировке base58, а значениями — объекты со следующими полями:
    * `leaderSlots` (u64): Количество слотов лидера, назначенных этому валидатору в запрошенном диапазоне или эпохе.
    * `blocksProduced` (u64): Количество блоков, созданных этим валидатором в запрошенном диапазоне или эпохе.
  * `range` (объект):
    * `firstSlot` (u64): Первый слот запрошенного диапазона.
    * `lastSlot` (u64): Последний слот запрошенного диапазона.

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

* **Учитывайте границы эпох:** При запросе по `identity` без `range` возвращаются данные за текущую эпоху до последнего слота, обработанного узлом. Если вам нужны данные за *полную* прошлую эпоху для конкретного валидатора, определите `firstSlot` и `lastSlot` для этой эпохи.
* **Доступность данных на узле:** Диапазон доступных исторических данных о создании блоков может различаться между узлами RPC. Очень старые диапазоны слотов могут быть доступны не на всех узлах.
* **Мониторинг производительности:** `getBlockProduction` необходим для создания панелей мониторинга и оповещений, связанных с доступностью валидаторов и долей успешно созданных блоков.
* **Сочетание с `getLeaderSchedule`:** Для более глубокого анализа сопоставьте данные `getBlockProduction` с результатами `getLeaderSchedule`, чтобы определить, какие именно слоты лидера были использованы или пропущены.
* **Идентификатор или все валидаторы:** Запрос без `identity` может вернуть большой объем данных, особенно если параметр `range` не указан или задает широкий диапазон. Учитывайте размер ответа и требования к его обработке.

## Примеры

### 1. Получение данных о создании блоков в текущей эпохе для всех валидаторов

В этом примере запрашиваются данные о создании блоков всеми валидаторами в текущей эпохе.

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

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

  async function getEpochBlockProduction() {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    try {
      const blockProduction = await connection.getBlockProduction();
      console.log('Block Production for Current Epoch:', JSON.stringify(blockProduction, null, 2));
      // Example: Accessing data for a specific validator (if present)
      // const specificValidatorIdentity = " deaktivCQ2sV2KF1y7n4qX1xUFk6VXL79CdfjrmLdshs"; // Replace with actual identity
      // if (blockProduction.value.byIdentity[specificValidatorIdentity]) {
      //   console.log(\`Data for \${specificValidatorIdentity}:\`, blockProduction.value.byIdentity[specificValidatorIdentity]);
      // }
    } catch (error) {
      console.error('Error fetching block production:', error);
    }
  }

  getEpochBlockProduction();
  ```
</CodeGroup>

### 2. Получение данных о создании блоков конкретным валидатором в текущей эпохе

В этом примере запрашиваются данные о создании блоков для конкретного идентификатора валидатора в текущей эпохе.

<CodeGroup>
  ```bash cURL theme={"system"}
  # Replace YOUR_VALIDATOR_IDENTITY_PUBKEY with the actual validator's base58 public 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": "getBlockProduction",
      "params": [
        {
          "identity": "YOUR_VALIDATOR_IDENTITY_PUBKEY"
        }
      ]
    }'
  ```

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

  async function getValidatorBlockProduction(validatorIdentity) {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    try {
      const blockProduction = await connection.getBlockProduction({ identity: validatorIdentity });
      console.log(\`Block Production for \${validatorIdentity}:\`, JSON.stringify(blockProduction, null, 2));
    } catch (error) {
      console.error(\`Error fetching block production for \${validatorIdentity}:\`, error);
    }
  }

  // Replace with the validator identity you want to query
  const validatorIdentity = "So11111111111111111111111111111111111111112"; // Example: Solana Foundation
  getValidatorBlockProduction(validatorIdentity);
  ```
</CodeGroup>

### 3. Получение данных о создании блоков конкретным валидатором в заданном диапазоне слотов

В этом примере запрашиваются данные о создании блоков конкретным валидатором в заданном диапазоне слотов.

<CodeGroup>
  ```bash cURL theme={"system"}
  # Replace YOUR_VALIDATOR_IDENTITY_PUBKEY, START_SLOT, and END_SLOT.
  curl https://mainnet.helius-rpc.com/?api-key=<api-key> -X POST -H "Content-Type: application/json" -d \\
    '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "getBlockProduction",
      "params": [
        {
          "identity": "YOUR_VALIDATOR_IDENTITY_PUBKEY",
          "range": {
            "firstSlot": START_SLOT, # e.g., 200000000
            "lastSlot": END_SLOT    # e.g., 200010000
          }
        }
      ]
    }'
  ```

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

  async function getValidatorBlockProductionForRange(validatorIdentity, firstSlot, lastSlot) {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    try {
      const blockProduction = await connection.getBlockProduction({
        identity: validatorIdentity,
        range: {
          firstSlot: firstSlot,
          lastSlot: lastSlot,
        },
      });
      console.log(\`Block Production for \${validatorIdentity} in range \${firstSlot}-\${lastSlot}:\`, JSON.stringify(blockProduction, null, 2));
    } catch (error) {
      console.error(\`Error fetching block production for \${validatorIdentity} in range:\`, error);
    }
  }

  // Replace with your desired parameters
  const validatorIdentity = "Beefy1So11111111111111111111111111111111111"; // Example validator
  const firstSlot = 200000000; // Example start slot
  const lastSlot = 200010000;   // Example end slot
  getValidatorBlockProductionForRange(validatorIdentity, firstSlot, lastSlot);
  ```
</CodeGroup>

Это руководство поможет вам разобраться, как использовать метод RPC `getBlockProduction` для анализа создания блоков в Solana.

## Связанные методы

<CardGroup cols={2}>
  <Card title="getLeaderSchedule" href="/docs/ru/api-reference/rpc/http/getleaderschedule">
    Получите полное расписание лидеров для сопоставления с данными о создании блоков
  </Card>

  <Card title="getVoteAccounts" href="/docs/ru/api-reference/rpc/http/getvoteaccounts">
    Получите информацию обо всех голосующих валидаторах
  </Card>
</CardGroup>


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