Transaktionsgebühren
Jede Solana-Transaktion erfordert eine Transaktionsgebühr, die in SOL bezahlt wird. Transaktionsgebühren sind in zwei Teile aufgeteilt: die Basisgebühr und die Priorisierungsgebühr. Die Basisgebühr entschädigt Validatoren für die Verarbeitung der Transaktion. Die priority fee ist eine optionale Gebühr, um die Wahrscheinlichkeit zu erhöhen, dass der aktuelle Leader Ihre Transaktion verarbeitet.
Basisgebühr
Jede Transaktion kostet 5000 Lamports pro enthaltener Signatur. Diese Fee wird vom ersten Signer der Transaktion bezahlt. Nur Konten, die dem System Program gehören, können Transaktions-Fee zahlen. Die Basis-Fee wird wie folgt aufgeteilt:
- 50% verbrannt: Die Hälfte wird verbrannt (aus dem zirkulierenden SOL-Angebot entnommen).
- 50% verteilt: Die Hälfte wird an den Validator gezahlt, der die Transaktion verarbeitet hat.
Priority fee
Eine priority fee ist eine optionale Gebühr, die verwendet wird, um die Wahrscheinlichkeit zu erhöhen, dass der aktuelle Leader (Validator) Ihre Transaktion verarbeitet. Der Validator erhält 100% der priority fee. Priorisierungsgebühren können durch Anpassung des Compute-Einheiten (CU)-Preises und CU-Limits der Transaktion festgelegt werden. (Weitere Details zu Priorisierungsgebühren finden Sie im Leitfaden zur Verwendung von Priority Fees).
Die priority fee wird wie folgt berechnet:
Priorisierungsgebühr = Compute-Einheiten-Limit × Compute-Einheiten-Preis
Die priority fee wird verwendet, um die Priorität Ihrer Transaktion im Verhältnis zu anderen Transaktionen zu bestimmen. Sie wird mit der folgenden Formel berechnet:
Wenn Sie eine Transaktion mit einer priority fee senden, wird diese Gebühr zusätzlich zur Basisgebühr erhoben. Die Basisgebühr wird an die Validator-Staker verteilt, während die priority fee vollständig an den Validator geht, der die Transaktion verarbeitet.
Compute-Einheiten-Limit
Standardmäßig werden
jeder Anweisung
200.000 CUs
und jeder Transaktion
1,4 Millionen CUs
zugewiesen. Sie können diese Standardwerte ändern, indem Sie eine
SetComputeUnitLimit
Anweisung in Ihre Transaktion einfügen.
Um das angemessene CU-Limit für Ihre Transaktion zu berechnen, empfehlen wir die folgenden Schritte:
- Schätzen Sie die erforderlichen CU-Einheiten durch Simulation der Transaktion
- Fügen Sie dieser Schätzung einen Sicherheitspuffer von 10% hinzu
Die priority fee wird durch das angeforderte Compute-Unit-Limit der Transaktion bestimmt, nicht durch die tatsächlich verwendete Anzahl an Compute-Units. Wenn Sie ein zu hohes Compute-Unit-Limit festlegen oder den Standardwert verwenden, zahlen Sie möglicherweise für ungenutzte Compute-Units.
Compute-Unit-Preis
Der Compute-Unit-Preis ist ein optionaler Betrag in
Mikro-Lamports, der für jede
angeforderte CU gezahlt wird. Sie können den CU-Preis als Trinkgeld betrachten,
um den Validator zu ermutigen, Ihre Transaktion zu priorisieren. Um den CU-Preis
festzulegen, fügen Sie eine
SetComputeUnitPrice
Anweisung in Ihre Transaktion ein.
Der Standard-CU-Preis ist 0, was bedeutet, dass die Standard-Prioritätsgebühr ebenfalls 0 ist.
Für Hilfe bei der Bestimmung des besten CU-Preises für Ihre Transaktion, sehen Sie sich die Echtzeit- CU-Preisempfehlung in der unten aufgeführten Tabelle an.
| Anbieter | Priority Fee API |
|---|---|
| Helius | Dokumentation |
| QuickNode | Dokumentation |
| Triton | Dokumentation |
Beispiel
Die folgenden Beispiele zeigen, wie man das CU-Limit und den CU-Preis für eine Transaktion mit Solana SDKs festlegt.
| SDK | Quellcode-Referenz |
|---|---|
@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 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);
Console
Click to execute the code.
Is this page helpful?