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.

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.

1.000.000 di micro lamport = 1 lamport

Utilizza queste risorse per ottenere consigli in tempo reale sul prezzo corrente dell'unità di calcolo:

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:

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.

SDKRiferimento 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 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);
Click to execute the code.

Is this page helpful?

Indice

Modifica Pagina