Параметры
Начальный слот (включительно)
Максимальное количество блоков для возврата
Объект конфигурации, содержащий следующие необязательные поля:
Уровень 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": "getBlocksWithLimit",
"params": [
100000000,
10
]
}'
Запрос с 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": "getBlocksWithLimit",
"params": [
100000000,
10,
{
"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 10 blocks starting from slot
const blocks = await connection.getBlocksWithLimit(100000000, 10);
console.log('Blocks:', blocks);
// Get finalized blocks
const finalizedBlocks = await connection.getBlocksWithLimit(100000000, 10, 'finalized');
console.log('Finalized blocks:', finalizedBlocks);
Примечания
- Возвращает подтверждённые блоки начиная с указанного слота
- Результаты возвращаются в порядке возрастания
- Параметр limit контролирует максимальное количество возвращаемых блоков
- Некоторые слоты могут быть пропущены (блок не произведён)
- Ответ приходит немедленно, поскольку считывается из текущего состояния
Лучшие практики
- Используйте подходящий уровень commitment в зависимости от ваших потребностей:
processed для последних блоков
confirmed для высокой вероятности финальности
finalized для гарантированной финальности
- Держите limit разумным, чтобы избежать тайм-аутов
- Используйте этот метод для пагинации вместо
getBlocks
- Кэшируйте результаты при необходимости для снижения нагрузки на RPC
- Обрабатывайте пропущенные слоты в логике вашего приложения
Распространённые ошибки
| Код | Сообщение | Решение |
|---|
| -32602 | Invalid param: limit must be positive | Убедитесь, что limit больше 0 |
| -32602 | Invalid param: limit too large | Уменьшите значение limit |
| -32601 | Method not found | Убедитесь, что вы подключены к узлу Solana RPC |
| -32007 | Block information unavailable | Узел может выполнять начальную загрузку или слот слишком старый |
Примеры использования
-
Пагинация блоков
async function getBlocksPaginated(startSlot: number, pageSize: number) {
const blocks = await connection.getBlocksWithLimit(startSlot, pageSize);
const lastBlock = blocks[blocks.length - 1];
return {
blocks,
nextStartSlot: lastBlock ? lastBlock + 1 : null
};
}
-
Последняя история блоков
async function getRecentBlocks(count: number) {
const currentSlot = await connection.getSlot();
const blocks = await connection.getBlocksWithLimit(currentSlot - count, count);
return blocks.map(slot => ({
slot,
timestamp: new Date() // Add actual timestamp if available
}));
}
-
Потоковая передача блоков
async function* streamBlocks(startSlot: number, batchSize: number) {
let currentSlot = startSlot;
while (true) {
const blocks = await connection.getBlocksWithLimit(currentSlot, batchSize);
if (blocks.length === 0) {
break;
}
yield blocks;
currentSlot = blocks[blocks.length - 1] + 1;
}
}