Commissioni di transazione

Ogni transazione Solana richiede una commissione di transazione, pagata in SOL. Le commissioni di transazione sono suddivise in due parti: la commissione base e la commissione di prioritizzazione. La commissione base compensa i validator per l'elaborazione della transazione. La commissione di prioritizzazione è una commissione opzionale per aumentare la probabilità che il leader attuale elabori la tua transazione.

Commissione base

Ogni transazione costa 5000 lamports per firma inclusa. Questa commissione è pagata dal primo firmatario della transazione. Solo gli account di proprietà del System Program possono pagare le commissioni di transazione. La commissione base è suddivisa come segue:

  • 50% bruciato: Metà viene bruciata (rimossa dalla fornitura circolante di SOL).
  • 50% distribuito: Metà viene pagata al validator che ha elaborato la transazione.

Commissione di prioritizzazione

Una commissione di prioritizzazione è una commissione opzionale utilizzata per aumentare la probabilità che il leader attuale (validator) elabori la tua transazione. Il validator riceve il 100% della commissione di priorità. Le commissioni di prioritizzazione possono essere impostate regolando il prezzo dell'unità di calcolo (computation unit) (CU) della transazione e il limite CU. (Vedi la guida su come utilizzare le commissioni prioritarie per maggiori dettagli sulle commissioni di prioritizzazione.)

La commissione di prioritizzazione viene calcolata come segue:

Prioritization fee formula
Prioritization fee = CU limit * CU price

La commissione di prioritizzazione viene utilizzata per determinare la priorità della tua transazione, rispetto ad altre transazioni. Viene calcolata utilizzando la seguente formula:

Transaction priority formula
Priority = (Prioritization fee + Base fee) / (1 + CU limit + Signature CUs + Write lock CUs)

Limite di unità di calcolo

Per impostazione predefinita, a ogni istruzione vengono allocate 200.000 CU e a ogni transazione vengono allocate 1,4 milioni di CU. Puoi modificare queste impostazioni predefinite includendo un'istruzione SetComputeUnitLimit nella tua transazione.

Per calcolare il limite CU appropriato per la tua transazione, raccomandiamo i seguenti passaggi:

  1. Stima le unità CU richieste simulando la transazione
  2. Aggiungi un margine di sicurezza del 10% a questa stima

La commissione di priorità è determinata dal limite di unità di calcolo richiesto nella transazione, non dal numero effettivo di unità di calcolo utilizzate. Se imposti un limite di unità di calcolo troppo alto o utilizzi l'importo predefinito, potresti pagare per unità di calcolo non utilizzate.

Prezzo dell'unità di calcolo

Il prezzo dell'unità di calcolo è un importo opzionale di micro-lamport pagato per ogni CU richiesta. Puoi considerare il prezzo CU come una mancia per incoraggiare il validator a dare priorità alla tua transazione. Per impostare il prezzo CU, includi un'istruzione SetComputeUnitPrice nella tua transazione.

Il prezzo CU predefinito è 0, il che significa che anche la commissione di priorità predefinita è 0.

Per determinare il miglior prezzo CU per la tua transazione, consulta la raccomandazione sul prezzo CU in tempo reale elencata nella tabella seguente.

Esempio

Gli esempi seguenti mostrano come impostare il limite CU e il prezzo CU su una transazione utilizzando gli SDK di Solana.

SDKRiferimento al codice sorgente
@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?

Indice

Modifica Pagina

Gestito da

© 2025 Solana Foundation.
Tutti i diritti riservati.
Rimani Connesso