Перейти к основному содержанию

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.

Параметры

startSlot
number
обязательно
Начальный слот (включительно)
endSlot
number
обязательно
Конечный слот (включительно)
config
object
Объект конфигурации, содержащий следующие необязательные поля:

Ответ

result
array
Массив слотов блоков в порядке возрастания

Примеры кода

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

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

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

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. Обрабатывайте пропущенные слоты в логике вашего приложения

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

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

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

  1. Анализ диапазона блоков
    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. Отслеживание истории блоков
    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. Обнаружение пропусков в блоках
    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;
    }