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

Параметры

startSlot
number
обязательно
Начальный слот (включительно)
limit
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": "getBlocksWithLimit",
  "params": [
    100000000,
    10
  ]
}'

Запрос с 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": "getBlocksWithLimit",
  "params": [
    100000000,
    10,
    {
      "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 10 blocks starting from slot
const blocks = await connection.getBlocksWithLimit(100000000, 10);
console.log('Blocks:', blocks);

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

Примечания

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

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

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

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

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

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

  1. Пагинация блоков
    async function getBlocksPaginated(startSlot: number, pageSize: number) {
      const blocks = await connection.getBlocksWithLimit(startSlot, pageSize);
      const lastBlock = blocks[blocks.length - 1];
      
      return {
        blocks,
        nextStartSlot: lastBlock ? lastBlock + 1 : null
      };
    }
    
  2. Последняя история блоков
    async function getRecentBlocks(count: number) {
      const currentSlot = await connection.getSlot();
      const blocks = await connection.getBlocksWithLimit(currentSlot - count, count);
      
      return blocks.map(slot => ({
        slot,
        timestamp: new Date() // Add actual timestamp if available
      }));
    }
    
  3. Потоковая передача блоков
    async function* streamBlocks(startSlot: number, batchSize: number) {
      let currentSlot = startSlot;
      
      while (true) {
        const blocks = await connection.getBlocksWithLimit(currentSlot, batchSize);
        if (blocks.length === 0) {
          break;
        }
        
        yield blocks;
        currentSlot = blocks[blocks.length - 1] + 1;
      }
    }