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 validatori per l'elaborazione della transazione. La commissione di prioritizzazione è una commissione opzionale, per aumentare la probabilità che il leader corrente elabori la tua transazione.

Commissione base

Ogni transazione costa 5000 lamport 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: La metà viene bruciata (rimossa dalla fornitura circolante di SOL).
  • 50% distribuito: La metà viene pagata al validatore che ha elaborato la transazione.

Commissione di prioritizzazione

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

La commissione di prioritizzazione è 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, consigliamo 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 per unità di calcolo

Il prezzo per unità di calcolo è un importo facoltativo di micro-lamport pagato per ogni CU richiesta. Puoi pensare al prezzo CU come a 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 prioritizzazione predefinita è 0.

Per aiuto nel determinare il miglior prezzo CU per la tua transazione, consulta la raccomandazione del prezzo CU in tempo reale fornita nella tabella seguente.

Esempio

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

SDKRiferimento 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

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