> ## Documentation Index
> Fetch the complete documentation index at: https://docs.orbitflare.com/llms.txt
> Use this file to discover all available pages before exploring further.

# getBlocks

> Возвращает список подтверждённых блоков между двумя слотами

## Параметры

<ParamField query="startSlot" type="number" required>
  Начальный слот (включительно)
</ParamField>

<ParamField query="endSlot" type="number" required>
  Конечный слот (включительно)
</ParamField>

<ParamField query="config" type="object" optional>
  Объект конфигурации, содержащий следующие необязательные поля:

  <Expandable title="поля config">
    <ParamField query="commitment" type="string" optional>
      Уровень commitment для использования:

      * `processed`: Последний блок (неподтверждённый)
      * `confirmed`: Подтверждён супербольшинством
      * `finalized`: Финализирован супербольшинством
    </ParamField>
  </Expandable>
</ParamField>

## Ответ

<ResponseField name="result" type="array">
  Массив слотов блоков в порядке возрастания
</ResponseField>

## Примеры кода

### Базовый запрос

```bash theme={null}
curl https://fra.rpc.orbitflare.com?api_key=YOUR-API-KEY -X POST -H "Content-Type: application/json" -d '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "getBlocks",
  "params": [
    100000000,
    100000100
  ]
}'
```

### Запрос с commitment

```bash theme={null}
curl https://fra.rpc.orbitflare.com?api_key=YOUR-API-KEY -X POST -H "Content-Type: application/json" -d '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "getBlocks",
  "params": [
    100000000,
    100000100,
    {
      "commitment": "finalized"
    }
  ]
}'
```

### Использование web3.js

```typescript theme={null}
import { Connection } from '@solana/web3.js';

const connection = new Connection('https://fra.rpc.orbitflare.com?api_key=YOUR-API-KEY');

// Get blocks in range
const blocks = await connection.getBlocks(100000000, 100000100);
console.log('Blocks:', blocks);

// Get finalized blocks
const finalizedBlocks = await connection.getBlocks(100000000, 100000100, 'finalized');
console.log('Finalized blocks:', finalizedBlocks);
```

## Примечания

1. Возвращает подтверждённые блоки между указанными слотами
2. Результаты возвращаются в порядке возрастания
3. Диапазон включает как начальный, так и конечный слоты
4. Некоторые слоты могут быть пропущены (блок не произведён)
5. Ответ приходит немедленно, поскольку считывается из текущего состояния

## Лучшие практики

1. Используйте подходящий уровень commitment в зависимости от ваших потребностей:
   * `processed` для последних блоков
   * `confirmed` для высокой вероятности финальности
   * `finalized` для гарантированной финальности
2. Держите диапазон слотов разумным, чтобы избежать тайм-аутов
3. Рассмотрите использование `getBlocksWithLimit` для пагинации
4. Кэшируйте результаты при необходимости для снижения нагрузки на RPC
5. Обрабатывайте пропущенные слоты в логике вашего приложения

## Распространённые ошибки

| Код    | Сообщение                                          | Решение                                                             |
| ------ | -------------------------------------------------- | ------------------------------------------------------------------- |
| -32602 | Invalid param: startSlot must be less than endSlot | Убедитесь, что startSlot меньше endSlot                             |
| -32602 | Invalid param: slot range too large                | Уменьшите размер диапазона слотов                                   |
| -32601 | Method not found                                   | Убедитесь, что вы подключены к узлу Solana RPC                      |
| -32007 | Block information unavailable                      | Узел может выполнять начальную загрузку или диапазон слишком старый |

## Примеры использования

1. **Анализ диапазона блоков**
   ```typescript theme={null}
   async function analyzeBlockRange(startSlot: number, endSlot: number) {
     const blocks = await connection.getBlocks(startSlot, endSlot);
     const totalSlots = endSlot - startSlot + 1;
     const skippedSlots = totalSlots - blocks.length;
     
     console.log(`Total slots: ${totalSlots}`);
     console.log(`Blocks produced: ${blocks.length}`);
     console.log(`Skipped slots: ${skippedSlots}`);
     console.log(`Block production rate: ${(blocks.length / totalSlots) * 100}%`);
   }
   ```

2. **Отслеживание истории блоков**
   ```typescript theme={null}
   interface BlockHistory {
     startSlot: number;
     endSlot: number;
     blocks: number[];
     timestamp: Date;
   }

   async function trackBlockHistory(startSlot: number, endSlot: number) {
     const blocks = await connection.getBlocks(startSlot, endSlot);
     const history: BlockHistory = {
       startSlot,
       endSlot,
       blocks,
       timestamp: new Date()
     };
     
     storeBlockHistory(history);
     return history;
   }
   ```

3. **Обнаружение пропусков в блоках**
   ```typescript theme={null}
   async function detectBlockGaps(startSlot: number, endSlot: number) {
     const blocks = await connection.getBlocks(startSlot, endSlot);
     const gaps = [];
     
     for (let i = 0; i < blocks.length - 1; i++) {
       const current = blocks[i];
       const next = blocks[i + 1];
       if (next - current > 1) {
         gaps.push({
           start: current + 1,
           end: next - 1,
           length: next - current - 1
         });
       }
     }
     
     return gaps;
   }
   ```
