Twenty-four hours of chain history, streamed through your existing Yellowstone gRPC client. Pay per replay.
Sillage speaks the Yellowstone gRPC protocol as a server, unmodified. Anything you've already written against Triton, Helius, or a self-hosted Geyser plugin connects unchanged. Pass a starting slot. The stream begins there.
use yellowstone_grpc_client::GeyserGrpcClient; let mut client = GeyserGrpcClient::build_from_shared( "https://yellowstone.helius-rpc.com", )? .x_token(Some(token))? .connect() .await?; let (_, stream) = client .subscribe_with_request(Some(req)) .await?;
use yellowstone_grpc_client::GeyserGrpcClient; let mut client = GeyserGrpcClient::build_from_shared( "https://sillage.sh/v1", )? .x_token(Some(token))? .connect() .await?; let (_, stream) = client .subscribe_with_request(Some(req.from_slot(312_840_000))) .await?;
use yellowstone_grpc_client::GeyserGrpcClient; let mut client = GeyserGrpcClient::build_from_shared( "https://sillage.sh/v1", )? .x_token(Some(token))? .connect() .await?; let (_, stream) = client .subscribe_with_request(Some(req.from_slot(312_840_000))) .await?;
Yellowstone's pubkey-based filters work unchanged — narrow transactions to specific programs or accounts, narrow account streams to specific owners.
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() };
Every message carries the timestamp it was received, to 100 microseconds. A transaction that landed 24.3ms into its slot replays 24.3ms into that slot. Intra-slot ordering, propagation gaps, the texture of real network time — all preserved.
Every message your live subscription receives is retained continuously across the full 24-hour window. No sampling. No summaries. No schema translation.
From the current chain tip, backward. Continuous, not calendar-day rotation.
Processed-commitment messages aren't stored — too ephemeral to be useful at replay time.
Roaring bitmap indexes over programs, accounts, and signatures, resolved before message bytes are touched.
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: 24 hours of history, same protocol, billed per replay.
| sillage.sh | Helius LaserStream | Triton Fumarole | QuickNode | |
|---|---|---|---|---|
| Replay window | 24 hours | 24 hours | 4 days | ~20 min |
| Pricing | Per replay | $999/mo plan* | $0.08/GB + plan | Enterprise |
| Protocol | Yellowstone gRPC | Yellowstone gRPC | Yellowstone gRPC | Yellowstone gRPC |
| Timestamp precision | Per message | Slot-level | Slot-level | — |
Replay yesterday's chain through your strategy. Tune PnL without burning a streaming subscription.
Backfill a new index from any slot in the last 24 hours. No re-sync from snapshot.
Query historical flow patterns. Same Yellowstone protocol, paid only when you read.
Replay a window from before the reorg to verify state — no need to keep raw history yourself.
The first cohort opens with 24-hour replay of transactions, accounts, and block streams. Builders working on bots, indexers, and research get priority. Shreds replay and longer windows are next.