Backtesting Solana

Testez votre stratégiesur la chaîne qui a eu lieu.

Rejouez les dernières 24 heures du mainnet Solana via votre client Yellowstone gRPC existant. Même protocole, même ordre, précision de 100μs. Facturé au replay.

Pourquoi le replay historique

Le mainnet est le seul backtest honnête.

Le devnet n'a ni MEV, ni congestion, ni vrais adversaires. Les simulateurs maison s'éloignent du comportement du validateur dès qu'un nouveau programme touche un nouvel edge case.

sillage.sh garde 24 heures de mainnet — chaque écriture de compte, chaque transaction, chaque bloc — et les rediffuse via le même protocole que parle déjà votre bot en production. La chaîne qui a eu lieu, à la demande, au timing où elle a eu lieu.

Comment ça marche

Trois étapes depuis une subscription live.

  1. 01
    Pointez votre client sur un endpoint sillage.

    Même Yellowstone gRPC, même SubscribeRequest, mêmes filtres. sillage.sh parle le protocole côté serveur.

  2. 02
    Passez un slot de départ dans les 24 dernières heures.

    Le stream démarre là et se rejoue à vitesse réelle, avec l'ordre intra-slot préservé à 100 microsecondes.

  3. 03
    Itérez sans brûler un plan streaming.

    Facturé au replay. Rejouez la fenêtre d'hier autant de fois que votre boucle de tuning en a besoin.

Drop-in

yellowstone-grpc-client, inchangé.

Seuls l'endpoint et le slot de départ changent. Votre SubscribeRequest, vos filtres et votre handling de messages restent intacts.

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?);
}
Questions

Ce que les gens demandent avant de s'inscrire.

Comment obtenir un endpoint ?

Inscrivez-vous sur la liste d'attente. Les 100 premiers membres débloquent un replay gratuit de 24h ; les autres reçoivent un endpoint au fur et à mesure de l'ouverture des cohortes.

Faut-il changer le code de mon client ?

Non. sillage.sh parle le protocole Yellowstone gRPC côté serveur. Pointez votre client existant sur le nouvel endpoint et passez un slot de départ — votre SubscribeRequest, vos filtres et votre handling de messages fonctionnent tels quels.

À quel point le replay est-il précis ?

Chaque message porte le timestamp de sa réception lors de la capture live, préservé à 100 microsecondes près. L'ordre intra-slot, les délais de propagation et la texture du temps réseau réel sont rejoués tels qu'ils ont eu lieu.

Pourquoi une fenêtre de 24 heures ?

Depuis la tête de chaîne actuelle, en arrière, en glissant en continu. Les workloads que nous servons — backtesting, backfill d'indexeur, vérification de reorg — vivent tous dans cette fenêtre. Au-delà de 24h, le replay cesse d'être rentable.

En quoi est-ce différent de faire tourner mon propre RPC ?

Un RPC vous donne des requêtes à la demande ; il ne vous donne pas un stream rejouable et ordonné dans le temps de chaque écriture de compte d'hier. sillage.sh oui, via le protocole auquel votre bot est déjà branché.

Comment ça se compare à un provider Yellowstone live ?

Helius, Triton et QuickNode streament la chaîne en avant magnifiquement. Aucun n'expédie 24 heures d'historique via le même protocole, facturé au replay. C'est l'inverse pour lequel sillage.sh a été conçu.

Backtest sur la vraie chaîne.

Obtenez un endpoint avant l'ouverture.