Record · Replay · Reproduce

Слой реплеядля Solana.

Record the Geyser stream once. Replay it as many times as you need, through your existing Yellowstone gRPC client, paced to the original wall clock. Apache-2.0.

slot ──────────────────

Бэктестнареальнойцепочке.
Каждый
слот.Каждыйбайт.

Drop-in совместимость

Тот же клиент. Тот же протокол. Другой endpoint.

sillage.sh говорит по протоколу Yellowstone gRPC как сервер, без модификаций. Любой код, написанный для Triton, Helius или self-hosted Geyser-плагина, подключается без изменений. Передайте стартовый слот. Поток начнётся с этой точки.

use yellowstone_grpc_client::GeyserGrpcClient;

let mut client = GeyserGrpcClient::build_from_shared(
    "https://replay.sillage.sh",
)?
    .x_token(Some(token))?
    .connect()
    .await?;

let (_, stream) = client
    .subscribe_with_request(Some(req.from_slot(312_840_000)))
    .await?;
Серверные фильтры

Filter at the server. Read only what matches.

Yellowstone's pubkey-based filters work unchanged — narrow transactions to specific programs or accounts, narrow account streams to specific owners. Roaring-bitmap indexes resolve the filter before a single compressed byte is decoded.

Подписка с фильтрами
let req = SubscribeRequest {
    transactions: hashmap! {
        "swaps".to_owned() => SubscribeRequestFilterTransactions {
            vote: Some(false),
            failed: Some(false),
            account_include: vec![JUPITER_V6.into()],
            ..Default::default()
        },
    },
    accounts: hashmap! {
        "pools".to_owned() => SubscribeRequestFilterAccounts {
            owner: vec![RAYDIUM_AMM.into()],
            ..Default::default()
        },
    },
    ..Default::default()
};
Wall-clock точность

Реплей со скоростью, с которой это произошло.

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

слот 312 847 201 · захвачено400 мс · 11 сообщений
24ms
0ms400ms
0 / 11 сообщений · точность меток времени 100μs
Точность меток времени
100μs
Полный firehose

Три ключевых потока. Реплей один-в-один.

Every message your live subscription receives is recorded and replayed identically. No sampling. No summaries. No schema translation.

live захват · 3 ключевых потока— сообщений/сек
transactions
320/s
accounts
180/s
blocks
2.5/s
Поддерживаемые типы сообщений
3и развиваются
В цифрах

Спецификация, а не список фич.

Tests
0passing, in CI

Every push runs fmt, clippy at -D warnings, and the full suite — including a producer built from the format spec alone.

Commitment levels
0confirmed, finalized

Processed-commitment messages aren't stored — too ephemeral to be useful at replay time.

Filter resolution
μsbefore disk read

Roaring bitmap indexes over programs, accounts, and signatures, resolved before message bytes are touched.

Storage
Zstdblock-compressed

Range-fetchable from persistent storage. A filtered replay reads only the bytes it matches.

Среди альтернатив

Replay-first. Не реплей как тариф.

The other providers all stream the live chain beautifully. Sillage ships the inverse: the stream as it was delivered, recorded and played back through the same protocol — and you can run the whole thing yourself.

sillage.shHelius LaserStreamTriton FumaroleQuickNode
Replay windowWhatever you record24 hours4 days~20 min
LicenseApache-2.0ProprietaryProprietaryProprietary
ProtocolYellowstone gRPCYellowstone gRPCYellowstone gRPCYellowstone gRPC
Timestamp precisionPer messageSlot-levelSlot-level
Сценарии использования

Built for workloads that need the same input twice.

Бэктестинг

Replay a recorded window through your strategy. Tune PnL against real mainnet traffic without holding a live subscription open.

Подробнее о бэктестинге Solana
Индексирование

Backfill a new index from any slot inside a window you have recorded. No re-sync from snapshot.

Исследования

Query historical flow patterns. Same Yellowstone protocol, replayed as many times as the question needs.

Восстановление после реорга

Реплей окна до реорга для проверки состояния — не нужно хранить сырую историю самостоятельно.

Get started

Run it yourself, or try the live endpoint.

Sillage is Apache-2.0 and self-hostable end to end. Record your own window from any Geyser source, or point an unmodified client at the demo endpoint to see replay working before you set anything up.

Path 1

Clone and build

Rust stable and a checkout. Point the writer at any Geyser source to record, then serve the result back with the reader.

git clone https://github.com/sunkuu7/sillage
cd sillage && cargo build --release
Path 2

Use the live endpoint

replay.sillage.sh serves a recorded mainnet window over TLS. Change the URL in a Yellowstone client you already have and it works unmodified.

new Client("https://replay.sillage.sh", token, {})
Path 3Soon

Container images

Published images for the reader and writer, so a replaying endpoint is one command with no toolchain to install.

docker run sillage/reader
View on GitHub

Apache-2.0 · no account, no billing, nothing gated.