Cette page est traduite automatiquement par IA. La version anglaise fait foi.Voir la version anglaise →
Anatomie des transactions
Une transaction Solana comporte trois composants principaux :- Message : la liste ordonnée des instructions, les comptes qu’elles référencent, et le récent blockhash.
- Signatures : une par signataire, attestant que la transaction a été autorisée.
- Blockhash récent : prouve que la transaction est récente ; les transactions avec des blockhash obsolètes (>150 slots anciens) sont rejetées.
Instructions
Une instruction spécifie :program_id— le programme à invoquer.accounts— les comptes (et leurs flags writable/signer) que le programme peut toucher.data— octets opaques que le programme interprète.
ComputeBudget::SetComputeUnitLimit— augmenter la limite CU par défaut.ComputeBudget::SetComputeUnitPrice— définir une priorité de frais.CreateAssociatedTokenAccountoptionnel — créer l’ATA de sortie si l’utilisateur n’en a pas.Raydium::SwapBaseInput— exécuter le swap.CloseAccountoptionnel — fermer un ATA wrapped-SOL.
raydium.trade.swap().
Comptes dans les transactions
Chaque compte touché par une instruction dans la transaction doit être listé dans les clés de compte de la transaction. Chaque compte est marqué :- Signataire / non-signataire : le propriétaire du compte doit-il signer la transaction ?
- Writable / read-only : la transaction peut-elle modifier le compte ?
solana-fundamentals/account-model). Les swaps CLMM avec plusieurs traversées de ticks peuvent en avoir 20+.
Limite de taille des transactions
Solana limite les transactions à 1232 octets incluant les signatures, le message et les en-têtes. C’est l’obstacle le plus courant pour les transactions complexes — le CLMM de Raydium avec routage multi-hop repousse régulièrement cette limite. Répartition d’un swap Raydium typique d’~1000 octets :| Composant | Taille |
|---|---|
| Signature | 64 B |
| Nombre de signatures | 1 B |
| En-tête du message | 3 B |
| Blockhash | 32 B |
| Clés de compte (13 × 32 B) | 416 B |
| Instructions (4 × ~100-150 B) | 400–600 B |
| Total | ~900–1100 B |
Address Lookup Tables (ALTs)
Les ALTs permettent à une transaction de référencer les comptes par un index d’1 octet dans une table publiée plutôt qu’une clé publique complète de 32 octets. Cela compresse drastiquement une transaction :- Une transaction référençant 20 comptes directement : ~640 B de clés publiques.
- Même transaction utilisant des ALTs : ~20 B d’indices + références ALT.
Budget de calcul
Chaque transaction a un budget d’unités de calcul (CU). Le dépasser termine l’exécution et échoue la transaction.- Par défaut : 200 000 CU par transaction.
- Maximum : 1 400 000 CU par transaction (augmenté via
ComputeBudget::SetComputeUnitLimit). - Plafond par bloc : 48M CU par bloc (niveau protocole).
integration-guides/priority-fee-tuning pour la table complète) :
| Instruction | CU |
|---|---|
| Swap CPMM | ~140 000 |
| Swap CLMM (sans traversée de ticks) | ~170 000 |
| Swap CLMM (4 traversées de ticks) | ~320 000 |
| Farm v6 stake | ~130 000 |
| Création de pool CPMM | ~250 000 |
ComputeBudget ; sinon vous obtenez le défaut de 200k, qui est trop bas pour la plupart des instructions Raydium.
Frais de priorité
Au-delà des frais de transaction de base (5000 lamports par signature), les validateurs augmentent la priorité des transactions payant des frais de priorité : une pourboire par CU en microlamports.integration-guides/priority-fee-tuning pour savoir comment dimensionner cela dynamiquement.
Limites du nombre d’instructions et de comptes
Au-delà de la limite totale de 1232 octets :- Max comptes par transaction : 128.
- Max comptes par instruction (CPI) : 64.
- Max instructions par transaction : pas de limite stricte, limitée seulement par la limite de taille.
- Max profondeur CPI : 4 (un programme peut appeler un autre, qui peut appeler un autre, 4 niveaux de profondeur).
Catégories de frais dans un swap Raydium
Une transaction de swap utilisateur paie des frais en deux catégories :Frais réseau Solana
Payés aux validateurs en SOL.- Frais de signature de base : 5000 lamports par signature. Presque toujours 1 signature = 0,000005 SOL.
- Frais de priorité : CU-price × CU-limit en microlamports. Varie avec la congestion ; voir
integration-guides/priority-fee-tuning.
Frais du protocole Raydium
Déduits du montant du swap.- Frais de swap : pourcentage de l’entrée (CPMM 0,25 % typique, CLMM 0,01 %–1 % par tier). Partagé entre les LPs et les destinations du protocole. Voir
ray/protocol-fees.
Exemple : 1000 $ USDC → SOL via CPMM 0,25 % tier
| Catégorie de frais | Montant | Va à |
|---|---|---|
| Frais de signature de base | 0,000005 SOL (~0,0007 $) | Validateur |
| Frais de priorité (10k µL × 300k CU) | 0,003 SOL (~0,45 $) | Validateur |
| Frais de swap CPMM (0,25 %) | 2,50 $ | LPs + protocole |
| Coût total utilisateur | ~2,95 $ |
Transactions versionnées
Solana a deux formats de transaction :- Legacy : le format original, pas de support ALT.
- v0 (Versioned) : supporte les ALTs, extensible aux versions futures.
Fraîcheur du blockhash
Une transaction doit inclure un blockhash des ~150 derniers slots (~60 secondes). Au-delà de cette fenêtre, les validateurs la rejettent. Pour les boucles de retry, récupérez un blockhash frais à chaque retry :integration-guides/priority-fee-tuning pour le pattern complet de retry avec frais de priorité croissants.
Exécution parallèle
Solana exécute les transactions non-conflictuelles en parallèle sur les validateurs multi-cœurs. Deux transactions sont en conflit si elles écrivent toutes les deux le même compte. Implications pour Raydium :- Deux swaps sur le même pool ne peuvent pas s’exécuter en parallèle — tous les deux écrivent l’état du pool.
- Un swap sur le Pool A et un swap sur le Pool B s’exécutent en parallèle si les listes de comptes ne se chevauchent pas.
- Une transaction read-only ne bloque jamais un writer sur le même compte (read-only est concurrent avec lui-même mais pas avec les écritures).
Niveaux de confirmation des transactions
Quand vous soumettez une transaction, vous choisissez un niveau de confirmation :| Niveau | Attente | Finalité |
|---|---|---|
processed | ~400 ms | Non finalisé ; peut se rétracter |
confirmed | ~1 s | Supermajorité votée |
finalized | ~13 s | Supermajorité enracinée |
confirmed est standard. Pour les opérations gérant une grande valeur (création de pool, remplissage de récompenses), finalized est plus sûr.
Simulation
Solana supporte la simulation d’une transaction avant soumission :getBestSwapInfo pour vérifier que le chemin choisi réussit réellement. La simulation n’est pas gratuite — elle consomme de la capacité RPC — mais elle détecte les erreurs avant de les payer.
Pointeurs
solana-fundamentals/account-model— comptes dans les transactions.solana-fundamentals/pdas-and-cpis— comment les programmes s’invoquent mutuellement.integration-guides/priority-fee-tuning— dimensionner les limites de CU et les frais de priorité.ray/protocol-fees— structure des frais du protocole Raydium.

