Commissioni di transazione
Ogni transazione Solana richiede una commissione base (SOL) per compensare i validator per l'elaborazione della transazione. Puoi anche pagare una commissione di priorità opzionale per aumentare la possibilità che il leader attuale (validator) elabori la tua transazione.
Punti chiave
- La commissione base per una transazione è di 5000 lamport per firma sulla transazione.
- La commissione di priorità (opzionale) è una commissione extra che paghi al validator per aumentare la possibilità che il leader attuale elabori la tua transazione.
- La commissione di priorità equivale a: (limite unità di calcolo * prezzo unità di calcolo).
- Il limite di unità di calcolo è il massimo di unità di calcolo che la tua transazione può utilizzare.
- Il prezzo dell'unità di calcolo è il prezzo per unità di calcolo, in micro-lamport.
- 1.000.000 di micro lamport = 1 lamport
- Il pagatore della commissione di transazione deve essere un account posseduto dal System Program.
Commissione base di transazione
La commissione base è il costo per inviare una transazione. Il costo è di 5000 lamport per firma inclusa nella transazione.
La commissione base viene prelevata dall'account del pagatore della commissione di transazione, che è il primo firmatario della transazione. Il pagatore della commissione deve essere un account posseduto dal System Program.
- 50% Bruciato: Metà della commissione base viene bruciata.
- 50% Distribuzione: Metà viene pagata al validator che ha elaborato la transazione.
Commissione di priorità
La commissione di priorità è una commissione opzionale pagata per aumentare la possibilità che il leader attuale elabori la tua transazione.
- SIMD-0096: Il validator che elabora la transazione riceve il 100% della commissione di priorità.
Unità di calcolo e limiti
Quando una transazione viene elaborata, utilizza risorse computazionali misurate in unità di calcolo (CU). Ogni istruzione sottrae dal budget di unità di calcolo della transazione.
- Limite massimo: Una transazione può utilizzare fino a 1,4 milioni di unità di calcolo.
- Limite predefinito: Per impostazione predefinita, ogni istruzione può utilizzare fino a 200.000 unità di calcolo.
- Limite personalizzato: Puoi richiedere un limite specifico di unità di calcolo
includendo un'istruzione
SetComputeUnitLimit
nella tua transazione.
Per maggiori dettagli sull'utilizzo delle unità di calcolo:
Consulta la guida Come richiedere calcolo ottimale per maggiori dettagli sull'utilizzo delle unità di calcolo.
Prezzo dell'unità di calcolo
Il prezzo dell'unità di calcolo è un importo opzionale, specificato in micro-lamport, che paghi per ogni unità di calcolo richiesta. Questo prezzo viene utilizzato per calcolare la commissione di priorità per la tua transazione.
Utilizza queste risorse per ottenere consigli in tempo reale sul prezzo corrente dell'unità di calcolo:
- API per commissioni di priorità di Helius
- Monitoraggio globale delle commissioni di priorità di Triton
Consulta la guida Come utilizzare le commissioni di priorità per maggiori dettagli sulle commissioni di priorità.
Calcolo della commissione di priorità
La commissione di priorità viene calcolata come:
Commissione di priorità = Limite di unità di calcolo × Prezzo dell'unità di calcolo
Utilizza queste istruzioni per impostare il limite e il prezzo delle unità di calcolo su una transazione:
SetComputeUnitLimit
per impostare un limite specifico di unità.SetComputeUnitPrice
per definire il prezzo per unità di calcolo.
Se non fornisci queste istruzioni, la transazione utilizza il limite predefinito di unità di calcolo con un prezzo di unità di calcolo pari a 0 (nessuna commissione di priorità).
La commissione prioritaria dipende dal limite di unità di calcolo richiesto per la transazione, non dalle unità di calcolo effettivamente utilizzate. Se imposti un limite di unità di calcolo troppo alto o utilizzi l'importo predefinito, potresti pagare per unità di calcolo non utilizzate.
Esempi
I seguenti esempi mostrano come impostare il limite di unità di calcolo e il prezzo per una transazione.
SDK | Riferimento al codice sorgente |
---|---|
solana-sdk (Rust) | ComputeBudgetInstruction |
@solana/web3.js (Typescript) | ComputeBudgetProgram |
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 instructionsconst 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 transactionconst transaction = new Transaction().add(limitInstruction).add(priceInstruction).add(transferInstruction);const signature = await sendAndConfirmTransaction(connection, transaction, [sender]);console.log("Transaction Signature:", signature);
Is this page helpful?