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:

  1. Schätzen Sie die erforderlichen CU-Einheiten durch Simulation der Transaktion
  2. 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.

Beispiel

Die folgenden Beispiele zeigen, wie man das CU-Limit und den CU-Preis für eine Transaktion mit Solana SDKs festlegt.

SDKQuellcode-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 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?

Inhaltsverzeichnis

Seite bearbeiten

Verwaltet von

© 2025 Solana Foundation.
Alle Rechte vorbehalten.
Verbinden Sie sich