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

Параметры

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

Ответ

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

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

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

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

// Get max retransmit slot
const maxRetransmitSlot = await connection.getMaxRetransmitSlot();
console.log('Max retransmit slot:', maxRetransmitSlot);

// Check if a slot can be retransmitted
async function canRetransmitSlot(slot: number) {
  const maxRetransmitSlot = await connection.getMaxRetransmitSlot();
  return slot <= maxRetransmitSlot;
}

// Get retransmit range
async function getRetransmitRange() {
  const maxRetransmitSlot = await connection.getMaxRetransmitSlot();
  const firstAvailableBlock = await connection.getFirstAvailableBlock();
  
  return {
    startSlot: firstAvailableBlock,
    endSlot: maxRetransmitSlot,
    totalSlots: maxRetransmitSlot - firstAvailableBlock + 1
  };
}

Примечания

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

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

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

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

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

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

  1. Планирование повторной передачи
    interface RetransmitPlan {
      startSlot: number;
      endSlot: number;
      totalSlots: number;
      availableSlots: number[];
      missingSlots: number[];
    }
    
    async function planRetransmission(
      targetSlots: number[]
    ): Promise<RetransmitPlan> {
      const maxRetransmitSlot = await connection.getMaxRetransmitSlot();
      const firstAvailableBlock = await connection.getFirstAvailableBlock();
      
      const availableSlots = targetSlots.filter(
        slot => slot >= firstAvailableBlock && slot <= maxRetransmitSlot
      );
      
      const missingSlots = targetSlots.filter(
        slot => slot < firstAvailableBlock || slot > maxRetransmitSlot
      );
      
      return {
        startSlot: firstAvailableBlock,
        endSlot: maxRetransmitSlot,
        totalSlots: maxRetransmitSlot - firstAvailableBlock + 1,
        availableSlots,
        missingSlots
      };
    }
    
  2. Мониторинг доступности слотов
    interface SlotAlert {
      type: 'pruned' | 'unavailable';
      message: string;
      slot: number;
      maxRetransmitSlot: number;
    }
    
    class SlotMonitor {
      private previousMaxSlot: number | null = null;
      
      async monitorSlots(
        targetSlots: number[]
      ): Promise<SlotAlert[]> {
        const maxRetransmitSlot = await connection.getMaxRetransmitSlot();
        const alerts: SlotAlert[] = [];
        
        // Check for pruned slots
        if (this.previousMaxSlot !== null && maxRetransmitSlot < this.previousMaxSlot) {
          alerts.push({
            type: 'pruned',
            message: `Slots ${maxRetransmitSlot + 1} to ${this.previousMaxSlot} have been pruned`,
            slot: this.previousMaxSlot,
            maxRetransmitSlot
          });
        }
        
        // Check target slots availability
        for (const slot of targetSlots) {
          if (slot > maxRetransmitSlot) {
            alerts.push({
              type: 'unavailable',
              message: `Slot ${slot} is beyond max retransmit slot`,
              slot,
              maxRetransmitSlot
            });
          }
        }
        
        this.previousMaxSlot = maxRetransmitSlot;
        return alerts;
      }
    }
    
  3. Управление историческими данными
    interface HistoricalData {
      availableRange: {
        start: number;
        end: number;
        total: number;
      };
      prunedSlots: number[];
      availableSlots: number[];
      metadata: {
        timestamp: number;
        maxRetransmitSlot: number;
      };
    }
    
    async function manageHistoricalData(
      targetRange: { start: number; end: number }
    ): Promise<HistoricalData> {
      const maxRetransmitSlot = await connection.getMaxRetransmitSlot();
      const firstAvailableBlock = await connection.getFirstAvailableBlock();
      
      const availableSlots = [];
      const prunedSlots = [];
      
      for (let slot = targetRange.start; slot <= targetRange.end; slot++) {
        if (slot >= firstAvailableBlock && slot <= maxRetransmitSlot) {
          availableSlots.push(slot);
        } else {
          prunedSlots.push(slot);
        }
      }
      
      return {
        availableRange: {
          start: firstAvailableBlock,
          end: maxRetransmitSlot,
          total: maxRetransmitSlot - firstAvailableBlock + 1
        },
        prunedSlots,
        availableSlots,
        metadata: {
          timestamp: Date.now(),
          maxRetransmitSlot
        }
      };
    }