> ## Documentation Index
> Fetch the complete documentation index at: https://www.helius.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Commerce sur les Préconfirmations

> Réagissez aux transactions Solana avant qu'elles n'atterrissent : abonnez-vous aux filtres preconfSubscribe, décodez la charge utile binaire et agissez avec Sender Max.

[Préconfirmations](/docs/fr/pre-confirmations/overview) diffuse les transactions avant qu'elles ne soient fragmentées — Helius préconfirme à l'instant où le leader les exécute, avec leur statut d'exécution. Ce guide construit un écouteur qui surveille un compte cible, décode chaque transaction et réagit en utilisant [Sender Max](/docs/fr/sending-transactions/sender-max).

<Tip>
  Les préconfirmations nécessitent un [plan Professionnel ou supérieur](/docs/fr/billing/plans) et coûtent 10 crédits par message.
</Tip>

## Définir la portée du flux avant de vous connecter

Un `preconfSubscribe` non filtré livre chaque transaction à 10 crédits chacune, alors filtrez côté serveur et payez uniquement pour ce sur quoi vous commercez.

```json theme={"system"}
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "preconfSubscribe",
  "params": [
    {
      "failed": false,
      "regionInclude": ["ewr"],
      "accountInclude": ["TARGET_WALLET_OR_PROGRAM"]
    }
  ]
}
```

Trois filtres couvrent la plupart des écouteurs de trading :

* `failed: false` élimine les transactions déjà connues pour avoir été annulées, que vous n'avez aucune raison de précipiter.
* `regionInclude` ancre le flux à la [région](/docs/fr/pre-confirmations/preconf-subscribe#filtrage-de-lieu) la plus proche de votre infrastructure, afin qu'un saut interrégional ne consomme pas l'avance.
* `accountInclude` correspond à toute tx référencée par votre cible : un portefeuille, un pool AMM, un programme, etc. Helius résout les tables de consultation d'adresses côté serveur, donc le filtre correspond même lorsque le compte est chargé via un ALT.

## Connectez-vous, abonnez-vous et décodez

`preconfSubscribe` est servi depuis le point de terminaison Gatekeeper (`wss://beta.helius-rpc.com`), et les notifications arrivent sous forme de trames binaires, pas JSON.

Chaque trame est un préfixe immuable de 18 octets suivi de la transaction sérialisée en bincode :

```javascript listener.js theme={"system"}
const WebSocket = require('ws');
const { VersionedTransaction } = require('@solana/web3.js');

const ws = new WebSocket('wss://beta.helius-rpc.com/?api-key=YOUR_API_KEY');

ws.on('open', () => {
  ws.send(JSON.stringify({
    jsonrpc: '2.0',
    id: 1,
    method: 'preconfSubscribe',
    params: [{
      failed: false,
      regionInclude: ['ewr'],
      accountInclude: ['TARGET_WALLET_OR_PROGRAM']
    }]
  }));
  setInterval(() => ws.ping(), 30_000); // keep the connection alive
});

ws.on('message', (data, isBinary) => {
  if (!isBinary) {
    const msg = JSON.parse(data.toString());
    if (msg.id === 1) console.log('Subscribed, ID:', msg.result);
    return;
  }

  // version (u8) | slot (u64 LE) | tx_index (u64 LE) | status (u8) | bincode(VersionedTransaction)
  const buf = Buffer.from(data);
  if (buf.readUInt8(0) !== 1) return; // unknown schema version; update your decoder
  const slot = buf.readBigUInt64LE(1);
  const status = buf.readUInt8(17); // 0 = failed, 1 = success, 2 = unknown
  const tx = VersionedTransaction.deserialize(buf.subarray(18));

  onScheduledTransaction({ slot, status, tx });
});

ws.on('error', console.error);
ws.on('close', () => process.exit(1)); // let your supervisor restart and resubscribe
```

Vérifiez d'abord l'octet de version. Si Helius met à jour le format de charge utile, la version s'incrémente, et s'y brancher maintient votre décodeur fonctionnel. La transaction désérialisée vous donne les instructions, les comptes et la signature.

## Agir avec Sender Max

Une préconfirmation ne rapporte que si votre réponse arrive en premier.

Envoyez votre réaction via [Sender Max](/docs/fr/sending-transactions/sender-max) : le pourboire de 0,001 SOL entre dans le tampon de pourboire prioritaire et est acheminé via chaque voie à haute vitesse :

```javascript theme={"system"}
async function onScheduledTransaction({ slot, status, tx }) {
  if (!strategy.shouldReact(tx)) return;

  // strategy is your own code: it decides whether to react and returns a
  // signed, base64-encoded transaction that includes the tip and priority fee
  const reaction = await strategy.buildTransaction(tx);
  await fetch('http://ewr-sender.helius-rpc.com/fast', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      jsonrpc: '2.0',
      id: Date.now().toString(),
      method: 'sendTransaction',
      params: [reaction, { encoding: 'base64', skipPreflight: true, maxRetries: 0 }]
    })
  });
}
```

Gardez cet gestionnaire court. Décidez et envoyez, et déplacez la journalisation, la comptabilité et la réconciliation hors du chemin de réception. Voir [Land Trades with Sender](/docs/fr/sending-transactions/guides/land-trades-with-sender) pour la boucle d'envoi complète, y compris le réchauffement de la connexion et l'estimation des frais.

## Confirmez l'atterrissage et attendez-vous à des écarts

Une préconfirmation est un aperçu précoce. La transaction n'a pas encore atterri et peut encore échouer ou être abandonnée, donc deux règles s'appliquent :

* Confirmez via des vérifications d'engagement standard (`getSignatureStatuses`, ou un flux `processed`-engagement) avant de considérer la transaction observée ou votre réaction comme définitive.
* Attendez-vous à des écarts. La couverture évolue avec la part du jalonnement transférée à Helius, donc certains créneaux ne produisent aucun message. C'est un [comportement attendu](/docs/fr/pre-confirmations/overview#couverture) plutôt qu'une connexion interrompue, et le ping keepalive différencie les deux. Réabonnez-vous à la fermeture.

## Guides associés

<CardGroup cols={2}>
  <Card title="Référence API preconfSubscribe" icon="code" href="/docs/fr/pre-confirmations/preconf-subscribe">
    Semantiques complètes des filtres, codes régionaux et disposition de la charge utile binaire
  </Card>

  <Card title="Commerce sur les Transactions Prétraitées" icon="bolt" href="/docs/fr/preprocessed-transactions/guides/trade-on-preprocessed">
    Couverture pré-exécution à 0,1 crédit par message, sur tous les plans payants
  </Card>
</CardGroup>
