Parameters

This method does not take any parameters.

Response

result
object

Code Examples

Basic Request

curl https://rpc.orbitflare.com -X POST -H "Content-Type: application/json" -d '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "getHighestSnapshotSlot"
}'

Using web3.js

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

const connection = new Connection('https://rpc.orbitflare.com');

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

Notes

  1. Returns information about the highest snapshot slots
  2. Full snapshots contain the complete ledger state
  3. Incremental snapshots contain changes since the last full snapshot
  4. Incremental snapshots may not be available on all nodes
  5. The response is immediate as it reads from the current state

Best Practices

  1. Use this method to determine snapshot availability
  2. Consider snapshot age when planning operations
  3. Cache results when appropriate to reduce RPC load
  4. Handle cases where incremental snapshots are not available
  5. Use in conjunction with other snapshot methods

Common Errors

CodeMessageSolution
-32601Method not foundVerify you’re connected to a Solana RPC node
-32007Snapshot information unavailableNode may be bootstrapping or syncing

Use Cases

  1. Snapshot Analysis

    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. Snapshot Monitoring

    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. Snapshot Verification

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