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

Параметры

slot
number
обязательно
Слот для получения времени блока

Ответ

result
number | null
Unix timestamp момента производства блока, или null, если блок недоступен

Примеры кода

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

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": "getBlockTime",
  "params": [
    100000000
  ]
}'

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

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

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

// Get block time
const blockTime = await connection.getBlockTime(100000000);
if (blockTime !== null) {
  console.log('Block time:', new Date(blockTime * 1000));
} else {
  console.log('Block not available');
}

// Get multiple block times
async function getBlockTimes(slots: number[]) {
  const times = await Promise.all(
    slots.map(slot => connection.getBlockTime(slot))
  );
  
  return times.map((time, index) => ({
    slot: slots[index],
    time: time ? new Date(time * 1000) : null
  }));
}

Примечания

  1. Возвращает Unix timestamp момента производства блока
  2. Возвращает null, если блок недоступен
  3. Временная метка измеряется в секундах с эпохи Unix
  4. Времена блоков являются приблизительными и могут различаться между узлами
  5. Для старых блоков временные метки могут быть недоступны

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

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

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

КодСообщениеРешение
-32601Method not foundУбедитесь, что вы подключены к узлу Solana RPC
-32007Block time not availableБлок может быть слишком старым или ещё не произведённым

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

  1. Анализ времени блоков
    interface BlockTimeMetrics {
      slot: number;
      time: Date | null;
      delay: number | null;
    }
    
    async function analyzeBlockTimes(startSlot: number, endSlot: number) {
      const blocks = await connection.getBlocks(startSlot, endSlot);
      const times = await Promise.all(
        blocks.map(slot => connection.getBlockTime(slot))
      );
      
      const metrics: BlockTimeMetrics[] = blocks.map((slot, index) => {
        const time = times[index];
        const prevTime = index > 0 ? times[index - 1] : null;
        
        return {
          slot,
          time: time ? new Date(time * 1000) : null,
          delay: time && prevTime ? time - prevTime : null
        };
      });
      
      return metrics;
    }
    
  2. Отслеживание времени блоков
    interface BlockTimeHistory {
      slot: number;
      timestamp: number;
      date: Date;
    }
    
    async function trackBlockTimes(slots: number[]) {
      const times = await Promise.all(
        slots.map(slot => connection.getBlockTime(slot))
      );
      
      const history: BlockTimeHistory[] = times
        .filter((time, index) => time !== null)
        .map((time, index) => ({
          slot: slots[index],
          timestamp: time!,
          date: new Date(time! * 1000)
        }));
      
      return history;
    }
    
  3. Скорость производства блоков
    async function calculateBlockProductionRate(startSlot: number, endSlot: number) {
      const blocks = await connection.getBlocks(startSlot, endSlot);
      const times = await Promise.all(
        blocks.map(slot => connection.getBlockTime(slot))
      );
      
      const validTimes = times.filter(time => time !== null) as number[];
      if (validTimes.length < 2) {
        return null;
      }
      
      const firstTime = validTimes[0];
      const lastTime = validTimes[validTimes.length - 1];
      const totalTime = lastTime - firstTime;
      const blocksPerSecond = validTimes.length / totalTime;
      
      return {
        blocksPerSecond,
        totalTime,
        totalBlocks: validTimes.length
      };
    }