Параметры
Начальный слот (включительно)
Конечный слот (включительно)
Объект конфигурации, содержащий следующие необязательные поля:
Уровень commitment для использования:
processed: Последний блок (неподтверждённый)
confirmed: Подтверждён супербольшинством
finalized: Финализирован супербольшинством
Ответ
Массив слотов блоков в порядке возрастания
Примеры кода
Базовый запрос
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": "getBlocks",
"params": [
100000000,
100000100
]
}'
Запрос с commitment
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": "getBlocks",
"params": [
100000000,
100000100,
{
"commitment": "finalized"
}
]
}'
Использование web3.js
import { Connection } from '@solana/web3.js';
const connection = new Connection('https://fra.rpc.orbitflare.com?api_key=YOUR-API-KEY');
// Get blocks in range
const blocks = await connection.getBlocks(100000000, 100000100);
console.log('Blocks:', blocks);
// Get finalized blocks
const finalizedBlocks = await connection.getBlocks(100000000, 100000100, 'finalized');
console.log('Finalized blocks:', finalizedBlocks);
Примечания
- Возвращает подтверждённые блоки между указанными слотами
- Результаты возвращаются в порядке возрастания
- Диапазон включает как начальный, так и конечный слоты
- Некоторые слоты могут быть пропущены (блок не произведён)
- Ответ приходит немедленно, поскольку считывается из текущего состояния
Лучшие практики
- Используйте подходящий уровень commitment в зависимости от ваших потребностей:
processed для последних блоков
confirmed для высокой вероятности финальности
finalized для гарантированной финальности
- Держите диапазон слотов разумным, чтобы избежать тайм-аутов
- Рассмотрите использование
getBlocksWithLimit для пагинации
- Кэшируйте результаты при необходимости для снижения нагрузки на RPC
- Обрабатывайте пропущенные слоты в логике вашего приложения
Распространённые ошибки
| Код | Сообщение | Решение |
|---|
| -32602 | Invalid param: startSlot must be less than endSlot | Убедитесь, что startSlot меньше endSlot |
| -32602 | Invalid param: slot range too large | Уменьшите размер диапазона слотов |
| -32601 | Method not found | Убедитесь, что вы подключены к узлу Solana RPC |
| -32007 | Block information unavailable | Узел может выполнять начальную загрузку или диапазон слишком старый |
Примеры использования
-
Анализ диапазона блоков
async function analyzeBlockRange(startSlot: number, endSlot: number) {
const blocks = await connection.getBlocks(startSlot, endSlot);
const totalSlots = endSlot - startSlot + 1;
const skippedSlots = totalSlots - blocks.length;
console.log(`Total slots: ${totalSlots}`);
console.log(`Blocks produced: ${blocks.length}`);
console.log(`Skipped slots: ${skippedSlots}`);
console.log(`Block production rate: ${(blocks.length / totalSlots) * 100}%`);
}
-
Отслеживание истории блоков
interface BlockHistory {
startSlot: number;
endSlot: number;
blocks: number[];
timestamp: Date;
}
async function trackBlockHistory(startSlot: number, endSlot: number) {
const blocks = await connection.getBlocks(startSlot, endSlot);
const history: BlockHistory = {
startSlot,
endSlot,
blocks,
timestamp: new Date()
};
storeBlockHistory(history);
return history;
}
-
Обнаружение пропусков в блоках
async function detectBlockGaps(startSlot: number, endSlot: number) {
const blocks = await connection.getBlocks(startSlot, endSlot);
const gaps = [];
for (let i = 0; i < blocks.length - 1; i++) {
const current = blocks[i];
const next = blocks[i + 1];
if (next - current > 1) {
gaps.push({
start: current + 1,
end: next - 1,
length: next - current - 1
});
}
}
return gaps;
}