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

Параметры

Этот метод не принимает никаких параметров.

Ответ

result
number
Слот наименьшего доступного подтверждённого блока

Примеры кода

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

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": "getFirstAvailableBlock"
}'

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

import { Connection } from '@solana/web3.js';

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

// Get first available block
const firstBlock = await connection.getFirstAvailableBlock();
console.log('First available block:', firstBlock);

// Get block range
async function getAvailableBlockRange() {
  const firstBlock = await connection.getFirstAvailableBlock();
  const currentSlot = await connection.getSlot();
  
  return {
    firstBlock,
    currentSlot,
    totalBlocks: currentSlot - firstBlock + 1
  };
}

Примечания

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

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

  1. Используйте этот метод для определения доступного диапазона блоков
  2. Учитывайте удаление данных узлом при запросе исторических блоков
  3. Кэшируйте результаты при необходимости для снижения нагрузки на RPC
  4. Обрабатывайте случаи, когда запрашиваемые блоки недоступны
  5. Используйте совместно с другими методами для работы с блоками

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

КодСообщениеРешение
-32601Method not foundУбедитесь, что вы подключены к узлу Solana RPC
-32007Block information unavailableУзел может выполнять начальную загрузку или синхронизацию

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

  1. Проверка диапазона блоков
    async function verifyBlockRange(startSlot: number, endSlot: number) {
      const firstBlock = await connection.getFirstAvailableBlock();
      const currentSlot = await connection.getSlot();
      
      if (startSlot < firstBlock) {
        throw new Error(`Start slot ${startSlot} is before first available block ${firstBlock}`);
      }
      
      if (endSlot > currentSlot) {
        throw new Error(`End slot ${endSlot} is after current slot ${currentSlot}`);
      }
      
      return {
        startSlot,
        endSlot,
        available: true
      };
    }
    
  2. Доступность исторических данных
    interface BlockAvailability {
      firstAvailable: number;
      currentSlot: number;
      availableRange: number;
      requestedSlot: number;
      isAvailable: boolean;
    }
    
    async function checkBlockAvailability(slot: number): Promise<BlockAvailability> {
      const firstBlock = await connection.getFirstAvailableBlock();
      const currentSlot = await connection.getSlot();
      
      return {
        firstAvailable: firstBlock,
        currentSlot,
        availableRange: currentSlot - firstBlock + 1,
        requestedSlot: slot,
        isAvailable: slot >= firstBlock && slot <= currentSlot
      };
    }
    
  3. Анализ истории блоков
    async function analyzeBlockHistory() {
      const firstBlock = await connection.getFirstAvailableBlock();
      const currentSlot = await connection.getSlot();
      const blocks = await connection.getBlocks(firstBlock, currentSlot);
      
      const metrics = {
        firstBlock,
        currentSlot,
        totalSlots: currentSlot - firstBlock + 1,
        availableBlocks: blocks.length,
        missingBlocks: (currentSlot - firstBlock + 1) - blocks.length,
        availabilityPercentage: (blocks.length / (currentSlot - firstBlock + 1)) * 100
      };
      
      return metrics;
    }