Documentation Index
Fetch the complete documentation index at: https://docs.orbitflare.com/llms.txt
Use this file to discover all available pages before exploring further.
Обзор
OrbitFlare запускает полные архивные ноды, которые сохраняют каждый блок, транзакцию и состояние аккаунта с момента запуска Solana. Стандартные RPC-провайдеры обычно усекают старые данные для экономии места, сохраняя только последние эпохи. С OrbitFlare вы можете запросить любой слот из истории Solana.
Сценарии использования
Исторические данные блокчейна обеспечивают несколько важных рабочих процессов:
- Восстановление событий: Подтяните пропущенные транзакции после простоя индексатора или сбоев вебхуков
- Комплаенс: Получение записей транзакций для аудитов и требований регуляторов
- Исследования: Анализ on-chain трендов, распределения токенов и метрик протоколов во времени
- Приложения-обозреватели: Создание обозревателей блоков и дашбордов с полной историей
Актуальные методы RPC
Эти методы поддерживают исторические запросы на архивных нодах OrbitFlare:
Методы блоков
| Метод | Описание |
|---|
| getBlock | Получить полные данные блока для любого слота |
| getBlocks | Получить список подтверждённых блоков между двумя слотами |
| getBlocksWithLimit | Получить подтверждённые блоки, начиная со слота, с ограничением |
| getBlockTime | Получить ориентировочную Unix-метку времени для блока |
| getBlockHeight | Получить текущую высоту блока |
| getFirstAvailableBlock | Получить минимальный слот с доступными данными блока |
Методы транзакций
| Метод | Описание |
|---|
| getTransaction | Получить подтверждённую транзакцию по сигнатуре |
| getSignaturesForAddress | Получить сигнатуры транзакций для адреса |
| getSignatureStatuses | Получить статусы сигнатур транзакций |
Методы аккаунтов
| Метод | Описание |
|---|
| getAccountInfo | Получить данные аккаунта (только текущее состояние) |
| getMultipleAccounts | Получить данные нескольких аккаунтов в одном вызове |
| getProgramAccounts | Получить все аккаунты, принадлежащие программе |
Методы слотов
| Метод | Описание |
|---|
| getSlot | Получить текущий слот |
| minimumLedgerSlot | Получить минимальный слот с данными на ноде |
Примеры
Получить блок из истории
Получить данные блока для слота 100 000 000 с помощью getBlock:
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": "getBlock",
"params": [
100000000,
{
"encoding": "json",
"transactionDetails": "full",
"rewards": false,
"maxSupportedTransactionVersion": 0
}
]
}'
Получить время блока
Узнать, когда был произведён конкретный блок, с помощью getBlockTime:
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]
}'
Получить список блоков в диапазоне
Получить все подтверждённые блоки между двумя слотами с помощью getBlocks:
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]
}'
Получить транзакцию
Получить детали транзакции по сигнатуре с помощью getTransaction:
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": "getTransaction",
"params": [
"5wHu1qwD7q5menP8rgbzknAHruqg7rq1BwLNjmKnMwVH2VNhVvPLT6jGfKNLwKUTG4Xn2vRvDz5Q6Z8zCLN5gLp1",
{
"encoding": "json",
"maxSupportedTransactionVersion": 0
}
]
}'
Получить историю транзакций для адреса
Получить сигнатуры для адреса с помощью getSignaturesForAddress:
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": "getSignaturesForAddress",
"params": [
"Vote111111111111111111111111111111111111111",
{"limit": 100}
]
}'
Примеры на TypeScript
Получить исторические данные блока
import { Connection } from '@solana/web3.js';
const connection = new Connection('https://fra.rpc.orbitflare.com?api_key=YOUR-API-KEY');
async function getHistoricalBlock(slot: number) {
const block = await connection.getBlock(slot, {
maxSupportedTransactionVersion: 0,
});
if (block) {
console.log(`Block ${slot}:`);
console.log(` Transactions: ${block.transactions.length}`);
console.log(` Block time: ${block.blockTime}`);
console.log(` Parent slot: ${block.parentSlot}`);
}
return block;
}
// Fetch a block from early 2023
const block = await getHistoricalBlock(175000000);
Построить полную историю транзакций
Комбинируйте getSignaturesForAddress с getTransaction для построения полной истории:
import { Connection, PublicKey } from '@solana/web3.js';
const connection = new Connection('https://fra.rpc.orbitflare.com?api_key=YOUR-API-KEY');
async function getFullTransactionHistory(address: string) {
const pubkey = new PublicKey(address);
const allTransactions = [];
let before: string | undefined;
// Paginate through all signatures
while (true) {
const signatures = await connection.getSignaturesForAddress(pubkey, {
limit: 1000,
before,
});
if (signatures.length === 0) break;
// Fetch full transaction data in batches
for (let i = 0; i < signatures.length; i += 10) {
const batch = signatures.slice(i, i + 10);
const txs = await Promise.all(
batch.map(sig =>
connection.getTransaction(sig.signature, {
maxSupportedTransactionVersion: 0,
})
)
);
allTransactions.push(...txs.filter(tx => tx !== null));
}
before = signatures[signatures.length - 1].signature;
}
return allTransactions;
}
Запрос блоков в временном диапазоне
Найти блоки в определённый временной период:
async function getBlocksInTimeRange(startTime: number, endTime: number) {
// Get a starting slot estimate
const currentSlot = await connection.getSlot();
const currentTime = Math.floor(Date.now() / 1000);
// Solana produces ~2-3 blocks per second
const slotsPerSecond = 2.5;
const estimatedStartSlot = currentSlot - Math.floor((currentTime - startTime) * slotsPerSecond);
const blocks = [];
let slot = estimatedStartSlot;
while (true) {
const blockTime = await connection.getBlockTime(slot);
if (blockTime && blockTime >= startTime && blockTime <= endTime) {
const block = await connection.getBlock(slot, {
maxSupportedTransactionVersion: 0,
});
if (block) blocks.push({ slot, block });
}
if (blockTime && blockTime > endTime) break;
slot++;
}
return blocks;
}
Советы по производительности
-
Группируйте запросы: Используйте пакетные запросы JSON-RPC для получения нескольких блоков или транзакций в одном вызове
-
Пагинируйте большие запросы: Метод getSignaturesForAddress возвращает до 1000 сигнатур за вызов — используйте параметр
before для пагинации
-
Параллелизуйте осторожно: Получайте транзакции параллельными партиями по 10–20 для баланса скорости и лимитов
-
Кешируйте неизменяемые данные: Исторические блоки и транзакции никогда не меняются после подтверждения — кешируйте их локально
-
Используйте
maxSupportedTransactionVersion: Всегда включайте этот параметр для работы с версионированными транзакциями
Ограничения
История состояния аккаунтов: Ноды Solana хранят текущее состояние аккаунта, а не исторические снапшоты. Вы можете получить транзакции, изменявшие аккаунт, но не баланс или данные аккаунта в конкретный прошлый слот.
Лимиты запросов: Исторические запросы могут потреблять больше ресурсов. Проверьте лимиты вашего плана и реализуйте соответствующее ограничение скорости.
Более быстрая история транзакций
Для эффективных запросов истории адресов используйте getTransactionsForAddress, который объединяет поиск сигнатур и получение транзакций в один вызов с возможностями фильтрации и сортировки.
Управляемое восстановление данных
Для команд, которым необходима доставка исторических данных в больших объёмах без написания собственных ETL-конвейеров, OrbitFlare предлагает услугу управляемого восстановления данных (Managed Backfills).
Что это даёт
Инженеры OrbitFlare извлекают и доставляют структурированные исторические данные Solana напрямую в ваше хранилище:
| Формат вывода | Поддерживаемые хранилища |
|---|
| JSON (newline-delimited) | AWS S3, Google Cloud Storage |
| Parquet | AWS S3, Google Cloud Storage |
| SQL | PostgreSQL, ClickHouse |
Что может быть доставлено
- Все транзакции для конкретной программы, кошелька или минта токена
- Полные данные блоков для любого диапазона слотов
- История переводов токенов (SPL Token / Token-2022)
- Пользовательские запросы и форматы данных под ваши требования
SLA
| Пункт | Детали |
|---|
| Срок доставки | 3–5 рабочих дней для стандартных заданий |
| Охват данных | С genesis (март 2020) по текущий момент |
| Формат | JSON, Parquet или SQL — на ваш выбор |
| Выделенная поддержка | Назначенный инженер на время выполнения задания |
Когда использовать
Управляемое восстановление данных лучше всего подходит для:
- Начального наполнения нового индексатора или аналитической базы данных
- Разовых запросов данных для комплаенса или аудита
- Исторических наборов данных для обучения ML/AI-моделей
- Восстановления данных после длительного простоя
Для непрерывной потоковой передачи новых данных используйте эндпоинты gRPC-стриминга.