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

Параметры

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

Ответ

result
object

Примеры кода

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

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

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

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

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

// Get highest snapshot slot
const snapshotSlot = await connection.getHighestSnapshotSlot();
console.log('Highest full snapshot slot:', snapshotSlot.full);
if (snapshotSlot.incremental !== null) {
  console.log('Highest incremental snapshot slot:', snapshotSlot.incremental);
}

// Check snapshot availability
async function checkSnapshotAvailability() {
  const snapshotSlot = await connection.getHighestSnapshotSlot();
  const currentSlot = await connection.getSlot();
  
  return {
    fullSnapshotAvailable: snapshotSlot.full > 0,
    incrementalSnapshotAvailable: snapshotSlot.incremental !== null,
    fullSnapshotSlot: snapshotSlot.full,
    incrementalSnapshotSlot: snapshotSlot.incremental,
    currentSlot,
    fullSnapshotAge: currentSlot - snapshotSlot.full,
    incrementalSnapshotAge: snapshotSlot.incremental ? currentSlot - snapshotSlot.incremental : null
  };
}

Примечания

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

Рекомендации

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

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

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

Сценарии использования

  1. Анализ снимков
    interface SnapshotMetrics {
      fullSnapshot: {
        slot: number;
        age: number;
        available: boolean;
      };
      incrementalSnapshot: {
        slot: number | null;
        age: number | null;
        available: boolean;
      };
      currentSlot: number;
    }
    
    async function analyzeSnapshots(): Promise<SnapshotMetrics> {
      const snapshotSlot = await connection.getHighestSnapshotSlot();
      const currentSlot = await connection.getSlot();
      
      return {
        fullSnapshot: {
          slot: snapshotSlot.full,
          age: currentSlot - snapshotSlot.full,
          available: snapshotSlot.full > 0
        },
        incrementalSnapshot: {
          slot: snapshotSlot.incremental,
          age: snapshotSlot.incremental ? currentSlot - snapshotSlot.incremental : null,
          available: snapshotSlot.incremental !== null
        },
        currentSlot
      };
    }
    
  2. Мониторинг снимков
    interface SnapshotAlert {
      type: 'full' | 'incremental';
      message: string;
      currentSlot: number;
      snapshotSlot: number;
      age: number;
    }
    
    async function monitorSnapshots(maxAge: number): Promise<SnapshotAlert[]> {
      const snapshotSlot = await connection.getHighestSnapshotSlot();
      const currentSlot = await connection.getSlot();
      const alerts: SnapshotAlert[] = [];
      
      if (snapshotSlot.full > 0) {
        const fullAge = currentSlot - snapshotSlot.full;
        if (fullAge > maxAge) {
          alerts.push({
            type: 'full',
            message: `Full snapshot is ${fullAge} slots old`,
            currentSlot,
            snapshotSlot: snapshotSlot.full,
            age: fullAge
          });
        }
      }
      
      if (snapshotSlot.incremental !== null) {
        const incrementalAge = currentSlot - snapshotSlot.incremental;
        if (incrementalAge > maxAge) {
          alerts.push({
            type: 'incremental',
            message: `Incremental snapshot is ${incrementalAge} slots old`,
            currentSlot,
            snapshotSlot: snapshotSlot.incremental,
            age: incrementalAge
          });
        }
      }
      
      return alerts;
    }
    
  3. Верификация снимков
    async function verifySnapshotAvailability() {
      const snapshotSlot = await connection.getHighestSnapshotSlot();
      const currentSlot = await connection.getSlot();
      
      if (snapshotSlot.full === 0) {
        throw new Error('No full snapshots available');
      }
      
      const fullAge = currentSlot - snapshotSlot.full;
      if (fullAge > 100000) { // Alert if snapshot is more than 100k slots old
        console.warn(`Full snapshot is ${fullAge} slots old`);
      }
      
      if (snapshotSlot.incremental === null) {
        console.warn('No incremental snapshots available');
      } else {
        const incrementalAge = currentSlot - snapshotSlot.incremental;
        if (incrementalAge > 10000) { // Alert if incremental snapshot is more than 10k slots old
          console.warn(`Incremental snapshot is ${incrementalAge} slots old`);
        }
      }
      
      return {
        fullSnapshot: snapshotSlot.full,
        incrementalSnapshot: snapshotSlot.incremental,
        currentSlot,
        fullAge,
        incrementalAge: snapshotSlot.incremental ? currentSlot - snapshotSlot.incremental : null
      };
    }