Параметры
Слот для получения времени блока
Ответ
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
}));
}
Примечания
- Возвращает Unix timestamp момента производства блока
- Возвращает null, если блок недоступен
- Временная метка измеряется в секундах с эпохи Unix
- Времена блоков являются приблизительными и могут различаться между узлами
- Для старых блоков временные метки могут быть недоступны
Лучшие практики
- Правильно обрабатывайте ответы null
- Конвертируйте Unix timestamps в объекты Date для отображения
- Учитывайте различия часовых поясов при отображении времени
- Кэшируйте результаты при необходимости для снижения нагрузки на RPC
- Используйте этот метод совместно с другими методами для работы с блоками
Распространённые ошибки
| Код | Сообщение | Решение |
|---|
| -32601 | Method not found | Убедитесь, что вы подключены к узлу Solana RPC |
| -32007 | Block time not available | Блок может быть слишком старым или ещё не произведённым |
Примеры использования
-
Анализ времени блоков
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;
}
-
Отслеживание времени блоков
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;
}
-
Скорость производства блоков
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
};
}