Backtesting de Solana

Pon a prueba tu estrategiaen la cadena que ocurrió.

Reproduce las últimas 24 horas de Solana mainnet a través de tu cliente Yellowstone gRPC actual. Mismo protocolo, mismo orden, precisión de 100μs. Pago por replay.

Por qué el replay histórico

Mainnet es el único backtest honesto.

Devnet no tiene MEV, ni congestión, ni adversarios reales. Los simuladores a medida se desvían del comportamiento del validador en cuanto un programa nuevo toca un edge case nuevo.

sillage.sh conserva 24 horas de mainnet — cada escritura de cuenta, cada transacción, cada bloque — y las transmite por el mismo protocolo que ya habla tu bot en producción. La cadena que ocurrió, bajo demanda, con el timing en que ocurrió.

Cómo funciona

Tres pasos desde una subscription en vivo.

  1. 01
    Apunta tu cliente a un endpoint de sillage.

    Mismo Yellowstone gRPC, mismo SubscribeRequest, mismos filtros. sillage.sh habla el protocolo como servidor.

  2. 02
    Pasa un slot inicial de las últimas 24h.

    El stream arranca ahí y se reproduce a velocidad real, con el orden intra-slot preservado a 100 microsegundos.

  3. 03
    Itera sin quemar un plan de streaming.

    Pago por replay. Re-ejecuta la ventana de ayer tantas veces como necesite tu loop de tuning.

Drop-in

yellowstone-grpc-client, sin cambios.

Solo cambian el endpoint y el slot inicial. Tu SubscribeRequest, filtros y manejo de mensajes quedan intactos.

Backtest replay
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?);
}
Preguntas

Lo que la gente pregunta antes de apuntarse.

¿Cómo consigo un endpoint?

Apúntate a la lista de espera. Los primeros 100 miembros desbloquean un replay gratuito de 24h; los demás reciben un endpoint según se abran las cohortes.

¿Tengo que cambiar el código de mi cliente?

No. sillage.sh habla el protocolo Yellowstone gRPC como servidor. Apunta tu cliente al nuevo endpoint y pasa un slot inicial — tu SubscribeRequest, filtros y manejo de mensajes funcionan tal cual.

¿Qué tan preciso es el replay?

Cada mensaje lleva el timestamp con el que se recibió en la captura en vivo, preservado a 100 microsegundos. El orden intra-slot, los retrasos de propagación y la textura del tiempo de red real se reproducen tal y como ocurrieron.

¿Por qué una ventana de 24 horas?

Desde la punta actual de la cadena hacia atrás, deslizándose continuamente. Las cargas que servimos — backtesting, backfill de indexers, verificación de reorgs — viven todas en esta ventana. Más allá de 24h, el replay deja de pagarse solo.

¿En qué se diferencia esto de levantar mi propio RPC?

Un RPC te da consultas bajo demanda; no te da un stream reproducible y ordenado en el tiempo de cada escritura de cuenta de ayer. sillage.sh sí, a través del protocolo al que tu bot ya está enganchado.

¿Cómo se compara con un proveedor de Yellowstone en vivo?

Helius, Triton y QuickNode transmiten la cadena hacia adelante de maravilla. Ninguno ofrece 24 horas de historia por el mismo protocolo, facturado por replay. Esa es la inversa para la que se construyó sillage.sh.

Backtest sobre la cadena real.

Consigue un endpoint antes de que abramos la puerta.