Бэктестинг Solana

Проверьте стратегиюна цепи, которая случилась.

Реплей последних 24 часов mainnet Solana через ваш существующий клиент Yellowstone gRPC. Тот же протокол, тот же порядок, точность 100μs. Оплата за каждый реплей.

Зачем исторический реплей

Mainnet — единственный честный бэктест.

На devnet нет MEV, нет нагрузки, нет реальных соперников. Самописные симуляторы расходятся с поведением валидатора в момент, когда новая программа задевает новый edge case.

sillage.sh хранит 24 часа mainnet — каждую запись аккаунта, каждую транзакцию, каждый блок — и отдаёт их обратно по тому же протоколу, на котором уже работает ваш live-бот. Цепь, которая случилась, по запросу, с той же временной структурой, что и в момент события.

Как это работает

Три шага от live-подписки.

  1. 01
    Направьте клиент на endpoint sillage.

    Тот же Yellowstone gRPC, тот же SubscribeRequest, те же фильтры. sillage.sh говорит по протоколу как сервер.

  2. 02
    Передайте стартовый слот из последних 24 часов.

    Поток начнётся с этой точки и реплеится со скоростью реального времени, с внутрислотовым порядком, сохранённым с точностью до 100 микросекунд.

  3. 03
    Итерируйте, не сжигая стриминговый тариф.

    Оплата за реплей. Перезапускайте вчерашнее окно столько раз, сколько нужно вашему циклу тюнинга.

Drop-in

yellowstone-grpc-client, без изменений.

Меняются только endpoint и стартовый слот. Ваш SubscribeRequest, фильтры и обработка сообщений остаются нетронутыми.

Реплей для бэктеста
let mut client = GeyserGrpcClient::build_from_shared(
    "https://replay.sillage.sh",
)?
    .x_token(Some(api_key))?
    .connect()
    .await?;

let req = SubscribeRequest {
    // any slot within the last 24 hours
    from_slot: Some(312_847_201),
    transactions: hashmap! {
        "swaps".into() => SubscribeRequestFilterTransactions {
            account_include: vec![JUPITER_V6.into()],
            ..Default::default()
        },
    },
    ..Default::default()
};

let (_, mut stream) =
    client.subscribe_with_request(Some(req)).await?;

while let Some(msg) = stream.next().await {
    handle(msg?);
}
Вопросы

Что спрашивают перед регистрацией.

Как получить endpoint?

Запишитесь в waitlist. Первые 100 участников получают бесплатный 24-часовой реплей; остальные — endpoint по мере открытия когорт.

Нужно ли менять код клиента?

Нет. sillage.sh говорит по протоколу Yellowstone gRPC как сервер. Направьте ваш существующий клиент на новый endpoint и передайте стартовый слот — ваш SubscribeRequest, фильтры и обработка сообщений работают как есть.

Насколько точен реплей?

Каждое сообщение несёт метку времени, полученную при live-захвате, сохранённую с точностью до 100 микросекунд. Внутрислотовый порядок, задержки распространения и текстура реального сетевого времени реплеятся в точности так, как они произошли.

Почему окно в 24 часа?

От текущей вершины цепи назад, скользя непрерывно. Нагрузки, которые мы обслуживаем — бэктестинг, бэкфилл индексеров, проверка реоргов — все живут в этом окне. За пределами 24 часов реплей перестаёт окупаться.

Чем это отличается от своего RPC?

RPC даёт запросы по требованию; он не даёт реплеящегося, упорядоченного по времени потока всех записей аккаунтов, произошедших вчера. sillage.sh даёт, через тот же протокол, к которому ваш бот уже подключён.

Как это сравнить с live Yellowstone-провайдером?

Helius, Triton и QuickNode прекрасно стримят цепь вперёд. Ни один из них не отдаёт 24 часа истории через тот же протокол с оплатой за реплей. Это та инверсия, ради которой сделан sillage.sh.

Бэктест на реальной цепи.

Получите endpoint до того, как мы откроем двери.