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

Параметры

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