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 ──────────────────

在真实链上回测。
每一个
slot。每一个字节。

无缝兼容

相同的客户端。相同的协议。不同的端点。

sillage.sh 作为服务端,完整支持 Yellowstone gRPC 协议,无任何改动。你为 Triton、Helius 或自托管 Geyser 插件写过的代码,都能直接连接。传入一个起始 slot,数据流即从该位置开始。

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()
};
墙钟精确

按真实发生的速度回放。

每条消息都携带其接收时的时间戳,精度达 100 微秒。一笔在 slot 中第 24.3ms 落地的交易,会在回放中精确还原到 24.3ms。Slot 内排序、传播延迟、真实网络时间的纹理 —— 全部保留。

slot 312,847,201 · 已捕获400ms · 11 条消息
24ms
0ms400ms
0 / 11 条消息 · 时间戳精度 100μs
时间戳精度
100μs
完整数据流

三条核心数据流。原样回放。

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

实时捕获 · 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.

在众多方案之中

回放优先。而非把回放当作套餐档位。

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.