Справочник API
Как устроена система
Архив состояния сети Аккаунты, блоки и изменения между ними хранятся в собственном формате Termina. Поэтому запросы выполняются быстро и всегда дают одинаковый результат.
Доступные диапазоны
Перед созданием сессии стоит проверить, что нужный диапазон слотов доступен:
curl https://<host>/available-ranges | jq
Канал управления сессией Через это подключение создается сессия бэктеста и управляется ее ход. Все сообщения идут в собственном формате на основе JSON.
Адрес:
ws(s)://<host>/backtestМетоды:
createBacktestSession,attachBacktestSession,continue,continueTo,closeBacktestSessionОтветы:
sessionCreated,sessionAttached,readyForContinue,slotNotification,paused,discoveryBatch,status(варианты перечислены ниже),success,completed,error
Нумерация ответов
Если disconnectTimeoutSecs больше 0, каждый ответ получает порядковый номер seqId. Это нужно, чтобы после обрыва связи продолжить сессию с того же места.
Номер всегда только растет. При вызове attachBacktestSession можно передать номер последнего полученного ответа, и сервер пришлет только то, что было после него, без повтора старых сообщений.
{ "seqId": 123, "method": "status", "params": { "status": "decodedTransactions" } }
Фильтры событий
При создании сессии можно задать фильтры, чтобы отслеживать нужные события: например, момент, когда исполняется определенная программа. Как только в одном из следующих пакетов транзакций найдется совпадение, сервер пришлет discoveryBatch с номером слота и номером пакета.
Эти значения можно передать в continueTo, и симуляция остановится прямо перед этим пакетом. Так удобно разбирать конкретный момент, не проходя всю историю вручную.
RPC-канал сессии После создания сессии с симулированной сетью можно работать как с обычной Solana: большинство методов совпадает со стандартным JSON-RPC.
Адрес:
http(s)://илиws(s)://, путь/backtest/{session_id}Состояние аккаунтов:
getAccountInfo,getBalance,getMultipleAccounts,getProgramAccountsСостояние сети:
getLatestBlockhash,getFeeForMessage,getSlotТранзакции:
simulateTransaction,sendTransaction,getTransactionПодписки:
accountSubscribe,slotSubscribe,transactionSubscribe
Важно
В рабочей среде для подключения к
/backtestнужен API-ключ. А вот адрес конкретной сессии/backtest/{session_id}открыт без ключа, поэтому ID сессии не стоит передавать посторонним.Перед отправкой своих транзакций обычно нужно дождаться статуса
ReadyToExecuteUserTransactions: он означает, что сессия готова их принять.Если скрипт строго проверяет формат ответов, он должен уметь обрабатывать все варианты статусов, перечисленные выше.
Таблица методов API
createBacktestSession
Создает сессию бэктеста и возвращает sessionId и rpcEndpoint. С parallel: true сессии создаются сразу во всех доступных пакетах.
Session control (WS)
continue
Исполняет пакет транзакций и переводит симуляцию к следующим слотам. Можно передать свои транзакции (transactions) и изменения аккаунтов (modifyAccountStates).
Session control (WS)
closeBacktestSession
Завершает сессию и удаляет все ее данные.
Session control (WS)
attachBacktestSession
Повторно подключается к существующей сессии и возвращает rpcEndpoint.
Session control (WS)
continueTo
Останавливает симуляцию прямо перед нужным пакетом транзакций или сразу после него. Слот и номер пакета берутся из совпадений по фильтрам, заданным в discoveries.
Session control (WS)
getAccountInfo
Возвращает данные одного аккаунта на текущем слоте.
Per-session RPC (HTTP)
getBalance
Возвращает баланс аккаунта в лампортах.
Per-session RPC (HTTP)
getMultipleAccounts
Возвращает данные нескольких аккаунтов за один запрос.
Per-session RPC (HTTP)
getProgramAccounts
Возвращает все аккаунты, которые принадлежат программе.
Per-session RPC (HTTP)
getLatestBlockhash
Возвращает блокхеш текущего слота.
Per-session RPC (HTTP)
getFeeForMessage
Возвращает примерную комиссию за сообщение.
Per-session RPC (HTTP)
getSignatureStatuses
Возвращает статус транзакций по их подписям.
Per-session RPC (HTTP)
getTransaction
Возвращает подробные данные транзакции, включая логи.
Per-session RPC (HTTP)
simulateTransaction
Прогоняет транзакцию без изменения состояния сети.
Per-session RPC (HTTP)
sendTransaction
Сразу исполняет транзакцию в текущем слоте.
Per-session RPC (HTTP)
getSlot
Возвращает номер текущего слота.
Per-session RPC (HTTP)
getAddressLookupTable
Возвращает аккаунт таблицы адресов (ALT).
Per-session RPC (HTTP)
modifyAccounts
Изменяет состояние аккаунтов через RPC.
Per-session RPC (HTTP)
accountSubscribe
Присылает изменения аккаунта по мере их появления.
Per-session subscriptions (WS)
programSubscribe
Присылает изменения аккаунтов, принадлежащих программе, по мере их появления.
Per-session subscriptions (WS)
signatureSubscribe
Присылает обновления статуса транзакции по ее подписи.
Per-session subscriptions (WS)
slotSubscribe
Присылает уведомление о каждом новом слоте.
Per-session subscriptions (WS)
logsSubscribe
Присылает логи транзакций по мере их появления.
Per-session subscriptions (WS)