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

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

> Узнайте о сценариях использования getBlocks, примерах кода, параметрах запроса, структуре ответа и полезных рекомендациях.

Метод RPC [`getBlocks`](https://www.helius.dev/docs/api-reference/rpc/http/getblocks) позволяет получить список номеров слотов подтверждённых блоков между указанным начальным слотом и необязательным конечным [слотом](https://www.helius.dev/blog/solana-slots-blocks-and-epochs). Это полезно, если нужно узнать, какие блоки были подтверждены в определённом диапазоне, не загружая полное содержимое каждого блока.

<Warning>
  **Не используйте пакетные запросы для повышения производительности**

  Пакетная обработка архивных методов значительно увеличивает задержку. Пакеты, содержащие более 10 запросов, не допускаются.
</Warning>

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

* **Определение подтверждённых блоков в диапазоне:** Быстро получите список всех слотов блоков, которые были успешно подтверждены между двумя точками реестра.
* **Перебор блоков:** Используйте полученный список слотов, чтобы при необходимости запросить подробную информацию о каждом блоке с помощью `getBlock`.
* **Базовый аудит блоков:** Проверьте наличие блоков в определённом диапазоне.

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

Метод `getBlocks` принимает следующие параметры:

1. **`start_slot`** (u64, обязательный): Первый слот рассматриваемого диапазона (включительно).
2. **`end_slot`** (u64, необязательный): Последний слот рассматриваемого диапазона (включительно).
   * Если параметр не указан, запрос вернёт блоки от `start_slot` до последнего подтверждённого слота.
   * Диапазон между `start_slot` и `end_slot` (или последним слотом, если `end_slot` не указан) **не должен превышать 500 000 слотов**.
3. **`commitment`** (string, необязательный): Задаёт уровень подтверждения для запроса. Если параметр не указан, используется уровень подтверждения узла по умолчанию. Он передаётся как единственное поле объекта конфигурации в последнем параметре.

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

Поле `result` ответа JSON-RPC содержит массив целых чисел u64. Каждое целое число в массиве представляет номер слота подтверждённого блока в указанном диапазоне.

* Пример: `[5, 6, 7, 8, 9, 10]`

## Примеры

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

В этом примере запрашивается список слотов подтверждённых блоков между слотами `250000000` и `250000010`.

<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": "getBlocks",
      "params": [
        250000000,
        250000010
      ]
    }'
  ```

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

  async function getBlocksInRange(startSlot, endSlot) {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    try {
      const blocks = await connection.getBlocks(startSlot, endSlot);
      console.log(`Confirmed blocks between slot ${startSlot} and ${endSlot}:`, blocks);
    } catch (error) {
      console.error('Error fetching blocks:', error);
    }
  }

  // Example usage:
  const startSlot = 250000000;
  const endSlot = 250000010;
  getBlocksInRange(startSlot, endSlot);
  ```
</CodeGroup>

### 2. Получение блоков от начального до последнего подтверждённого слота

В этом примере запрашиваются слоты подтверждённых блоков, начиная с `260000000` и заканчивая последним блоком, подтверждённым узлом (с учётом ограничения диапазона в 500 000 слотов от начального слота).

<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": "getBlocks",
      "params": [
        260000000 
      ]
    }'
  ```

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

  async function getBlocksFromStart(startSlot) {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    try {
      // The endSlot parameter is omitted to fetch up to the latest confirmed block
      const blocks = await connection.getBlocks(startSlot);
      console.log(`Confirmed blocks from slot ${startSlot} to latest:`, blocks);
      if (blocks.length > 0) {
        console.log(`Latest block in range: ${blocks[blocks.length - 1]}`);
      }
    } catch (error) {
      console.error('Error fetching blocks:', error);
    }
  }

  // Example usage (ensure this doesn't exceed the 500,000 slot limit from latest block):
  const recentStartSlot = 260000000; 
  getBlocksFromStart(recentStartSlot);
  ```
</CodeGroup>

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

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

<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": "getBlocks",
      "params": [
        270000000,
        270000005,
        { "commitment": "confirmed" }
      ]
    }'
  ```

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

  async function getBlocksWithCommitment(startSlot, endSlot) {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    try {
      const blocks = await connection.getBlocks(startSlot, endSlot, { commitment: 'confirmed' });
      console.log(`Confirmed blocks (with 'confirmed' commitment) between slot ${startSlot} and ${endSlot}:`, blocks);
    } catch (error) {
      console.error('Error fetching blocks with commitment:', error);
    }
  }

  // Example usage:
  const commitStartSlot = 270000000;
  const commitEndSlot = 270000005;
  getBlocksWithCommitment(commitStartSlot, commitEndSlot);
  ```
</CodeGroup>

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

* **Ограничение диапазона:** Помните об ограничении диапазона в 500 000 слотов. Запрос большего диапазона приведёт к ошибке.
* **Доступность данных на узле:** Узлы могут хранить информацию не обо всех исторических слотах. При очень старых значениях `start_slot` могут возвращаться пустые массивы или ошибки в зависимости от конфигурации узла и срока хранения реестра.
* **Подтверждение блоков:** Этот метод возвращает *подтверждённые* блоки. Точный набор блоков может немного различаться в зависимости от выбранного уровня `commitment` и опрашиваемого узла, особенно для совсем недавних слотов.
* **Дополнение к `getBlock`:** `getBlocks` часто используется как первый шаг для определения нужных слотов блоков перед получением полной информации об отдельных блоках из этого списка с помощью `getBlock`.
* **Альтернатива пагинации:** Поскольку у `getBlocks` есть ограничение диапазона, для сканирования очень большого участка цепочки потребуется выполнить несколько вызовов `getBlocks`, разбив нужный общий диапазон на сегменты не более 500 000 слотов.

В этом руководстве представлен понятный обзор использования метода RPC `getBlocks` для получения списка слотов подтверждённых блоков в сети Solana.

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

<CardGroup cols={2}>
  <Card title="getBlock" href="/docs/ru/api-reference/rpc/http/getblock">
    Получите подробную информацию об определённом блоке
  </Card>

  <Card title="getBlocksWithLimit" href="/docs/ru/api-reference/rpc/http/getblockswithlimit">
    Получите заданное количество блоков, начиная с определённого слота
  </Card>
</CardGroup>


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