Frais de transaction

Chaque transaction Solana nécessite des frais de transaction, payés en SOL. Les frais de transaction sont divisés en deux parties : les frais de base et les frais de priorisation. Les frais de base compensent les validateurs pour le traitement de la transaction. Les frais de priorisation sont des frais optionnels, pour augmenter la probabilité que le leader actuel traite votre transaction.

Frais de base

Chaque transaction coûte 5000 lamports par signature incluse. Ces frais sont payés par le premier signataire de la transaction et doivent être payés par un compte détenu par le System Program. Les frais de base sont répartis comme suit :

  • 50% brûlés : La moitié est brûlée (retirée de l'offre circulante de SOL).
  • 50% distribués : L'autre moitié est versée au validateur qui a traité la transaction.

Frais de priorisation

Les frais de priorisation sont des frais optionnels utilisés pour augmenter la probabilité que le leader actuel (validateur) traite votre transaction. Le validateur reçoit 100% des frais de priorité. Les frais de priorisation peuvent être définis en ajustant le prix des unités de calcul (CU) et la limite de CU de la transaction. (Consultez le guide Comment utiliser les frais de priorité pour plus de détails sur les frais de priorisation.)

Les frais de priorisation sont calculés comme suit :

Frais de priorisation = Limite d'unités de calcul × Prix de l'unité de calcul

Les frais de priorisation sont utilisés pour déterminer la priorité de votre transaction, par rapport aux autres transactions. Ils sont calculés selon la formule suivante :

Priorité de la transaction = Frais de priorisation / Nombre de signatures

Limite d'unités de calcul

Par défaut, chaque instruction se voit attribuer 200 000 CU et chaque transaction se voit attribuer 1,4 million de CU. Vous pouvez modifier ces valeurs par défaut en incluant une instruction SetComputeUnitLimit dans votre transaction.

Pour calculer la limite CU appropriée pour votre transaction, nous recommandons les étapes suivantes :

  1. Estimez les unités CU requises en simulant la transaction
  2. Ajoutez une marge de sécurité de 10 % à cette estimation

Les frais de priorité sont déterminés par la limite d'unités de calcul demandée pour la transaction, pas par le nombre réel d'unités de calcul utilisées. Si vous définissez une limite d'unités de calcul trop élevée ou utilisez le montant par défaut, vous risquez de payer pour des unités de calcul non utilisées.

Prix de l'unité de calcul

Le prix de l'unité de calcul est un montant optionnel en micro-lamports payé pour chaque CU demandée. Vous pouvez considérer le prix CU comme un pourboire pour encourager le validator à prioriser votre transaction. Pour définir le prix CU, incluez une instruction SetComputeUnitPrice dans votre transaction.

Le prix CU par défaut est 0, ce qui signifie que les frais de priorisation par défaut sont également de 0.

Pour déterminer le meilleur prix CU pour votre transaction, consultez la recommandation de prix CU en temps réel fournie dans le tableau ci-dessous.

Exemple

Les exemples ci-dessous montrent comment définir la limite CU et le prix CU sur une transaction en utilisant les SDK Solana.

SDKRéférence du code source
@solana/web3.js (Typescript)ComputeBudgetProgram
solana-sdk (Rust)ComputeBudgetInstruction
const limitInstruction = ComputeBudgetProgram.setComputeUnitLimit({
units: 300_000
});
const priceInstruction = ComputeBudgetProgram.setComputeUnitPrice({
microLamports: 1
});
import {
LAMPORTS_PER_SOL,
SystemProgram,
Transaction,
Keypair,
Connection,
ComputeBudgetProgram,
sendAndConfirmTransaction
} from "@solana/web3.js";
const connection = new Connection("http://localhost:8899", "confirmed");
const sender = Keypair.generate();
const recipient = new Keypair();
const airdropSignature = await connection.requestAirdrop(
sender.publicKey,
LAMPORTS_PER_SOL
);
await connection.confirmTransaction(airdropSignature, "confirmed");
// Create compute budget instructions
const limitInstruction = ComputeBudgetProgram.setComputeUnitLimit({
units: 300_000
});
const priceInstruction = ComputeBudgetProgram.setComputeUnitPrice({
microLamports: 1
});
const transferInstruction = SystemProgram.transfer({
fromPubkey: sender.publicKey,
toPubkey: recipient.publicKey,
lamports: 0.01 * LAMPORTS_PER_SOL
});
// Add the compute budget and transfer instructions to a new transaction
const transaction = new Transaction()
.add(limitInstruction)
.add(priceInstruction)
.add(transferInstruction);
const signature = await sendAndConfirmTransaction(connection, transaction, [
sender
]);
console.log("Transaction Signature:", signature);
Console
Click to execute the code.

Is this page helpful?

Table des matières

Modifier la page

Géré par

© 2025 Fondation Solana.
Tous droits réservés.
Restez connecté