Solana 백테스팅

실제로 일어난 체인 위에서전략을 테스트하세요.

Replay recorded Solana mainnet through your existing Yellowstone gRPC client. Same protocol, same ordering, 100μs precision. Apache-2.0.

왜 히스토리 리플레이인가

메인넷이 유일하게 정직한 백테스트입니다.

데브넷에는 MEV도, 혼잡도, 실제 상대도 없습니다. 자체 시뮬레이터는 새 프로그램이 새 엣지 케이스에 부딪히는 순간 밸리데이터 동작에서 벗어납니다.

Sillage records mainnet as it was delivered — every account write, every transaction, every block — and streams it back through the same protocol your live bot already speaks. The chain that happened, on demand, at the timing it happened.

동작 방식

라이브 구독에서 세 단계.

  1. 01
    클라이언트를 sillage 엔드포인트로 향하게 합니다.

    같은 Yellowstone gRPC, 같은 SubscribeRequest, 같은 필터. sillage.sh가 서버로서 프로토콜을 그대로 제공합니다.

  2. 02
    Pass a starting slot from the recorded window.

    스트림이 그 지점에서 시작되어 월클락 속도로 재생되며, 슬롯 내부 순서가 100마이크로초 단위로 보존됩니다.

  3. 03
    Iterate without holding a live subscription open.

    Re-run the same window as many times as your tuning loop needs. The input never changes, so a difference in output is a difference in your code.

드롭인

yellowstone-grpc-client, 그대로.

변경되는 것은 엔드포인트와 시작 슬롯뿐입니다. 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?);
}
질문

Questions people ask first.

How do I get an endpoint?

Run one. Clone the repo and start a reader against a window you have recorded, or against the published sample archive. There is also a live demo endpoint at replay.sillage.sh if you want to see it working before setting anything up.

클라이언트 코드를 바꿔야 하나요?

아닙니다. sillage.sh는 Yellowstone gRPC 프로토콜을 서버로서 제공합니다. 기존 클라이언트를 새 엔드포인트로 향하게 하고 시작 슬롯을 전달하면 — SubscribeRequest, 필터, 메시지 처리가 그대로 동작합니다.

리플레이의 정밀도는 어느 정도인가요?

모든 메시지는 라이브 캡처 시 수신된 타임스탬프를 100마이크로초 단위로 보존합니다. 슬롯 내부 순서, 전파 지연, 실제 네트워크 시간의 결이 일어난 그대로 재현됩니다.

How much history can I replay?

Whatever you record. Sillage is the recorder as well as the player — point the writer at a Geyser source for as long as you want history, and the reader serves exactly that back.

자체 RPC를 운영하는 것과 어떻게 다른가요?

RPC는 온디맨드 쿼리를 제공할 뿐, 어제 일어난 모든 계정 쓰기를 시간 순서대로 다시 흘릴 수 있는 스트림을 주지 않습니다. sillage.sh는 봇이 이미 연결되어 있는 그 프로토콜로 그것을 제공합니다.

How does this compare to a live Yellowstone provider?

Helius, Triton, and QuickNode all stream the chain forward beautifully. None of them let you replay a specific past window through the same protocol, and none of them are something you can run yourself. That's the inverse Sillage was built for.

Backtest the real chain.

Clone it, run it, or try the live endpoint.