Transaktionsgebühren

Jede Solana-Transaktion erfordert eine Basisgebühr (SOL), um Validatoren für die Verarbeitung der Transaktion zu entschädigen. Sie können auch eine optionale Priorisierungsgebühr zahlen, um die Wahrscheinlichkeit zu erhöhen, dass der aktuelle Leader (Validator) Ihre Transaktion verarbeitet.

Kernpunkte

  • Die Basisgebühr für eine Transaktion beträgt 5000 lamport pro Signatur auf der Transaktion.
  • Die Priorisierungsgebühr (optional) ist eine zusätzliche Gebühr, die Sie an den Validator zahlen, um die Wahrscheinlichkeit zu erhöhen, dass der aktuelle Leader Ihre Transaktion verarbeitet.
  • Die Priorisierungsgebühr entspricht: (Recheneinheitslimit * Recheneinheitspreis).
  • Das Recheneinheitslimit ist die maximale Anzahl an Recheneinheiten, die Ihre Transaktion verwenden kann.
  • Der Recheneinheitspreis ist der Preis pro Recheneinheit in Mikro-lamport.
  • 1.000.000 Mikro-lamport = 1 lamport
  • Der Zahler der Transaktionsgebühr muss ein Konto sein, das dem System Program gehört.

Basis-Transaktionsgebühr

Die Basisgebühr sind die Kosten für das Senden einer Transaktion. Die Kosten betragen 5000 lamport pro Signatur, die in der Transaktion enthalten ist.

Die Basisgebühr wird vom Konto des Transaktionsgebührenzahlers abgezogen, welches der erste Unterzeichner der Transaktion ist. Der Gebührenzahler muss ein Konto sein, das dem System Program gehört.

  • 50% verbrannt: Die Hälfte der Basisgebühr wird verbrannt.
  • 50% Verteilung: Die Hälfte wird an den Validator gezahlt, der die Transaktion verarbeitet hat.

Priorisierungsgebühr

Die Priorisierungsgebühr ist eine optionale Gebühr, die gezahlt wird, um die Wahrscheinlichkeit zu erhöhen, dass der aktuelle Leader Ihre Transaktion verarbeitet.

  • SIMD-0096: Der validator, der die Transaktion verarbeitet, erhält 100% der Prioritätsgebühr.

Compute Units und Limits

Wenn eine Transaktion verarbeitet wird, verbraucht sie Rechenressourcen, die in Compute Units (CU) gemessen werden. Jede Anweisung zieht vom Compute-Unit-Budget der Transaktion ab.

  • Maximales Limit: Eine Transaktion kann bis zu 1,4 Millionen Compute Units verwenden.
  • Standard-Limit: Standardmäßig kann jede Anweisung bis zu 200.000 Compute Units verwenden.
  • Benutzerdefiniertes Limit: Du kannst ein spezifisches Compute-Unit-Limit anfordern, indem du eine SetComputeUnitLimit Anweisung in deine Transaktion einfügst.

Weitere Details zur Nutzung von Compute Units:

Weitere Details zur Nutzung von Compute Units findest du im How to Request Optimal Compute Leitfaden.

Compute Unit Preis

Der Compute Unit Preis ist ein optionaler Betrag, angegeben in Mikro-Lamports, den du für jede angeforderte Compute Unit zahlst. Dieser Preis wird verwendet, um die Prioritätsgebühr für deine Transaktion zu berechnen.

1.000.000 Mikro-Lamports = 1 lamport

Nutze diese Ressourcen, um Echtzeit-Empfehlungen zum aktuellen Compute Unit Preis zu erhalten:

Weitere Details zu Prioritätsgebühren findest du im How to Use Priority Fees Leitfaden.

Berechnung der Prioritätsgebühr

Die Prioritätsgebühr wird wie folgt berechnet:

Prioritätsgebühr = Compute Unit Limit × Compute Unit Preis

Verwende diese Anweisungen, um das Compute Unit Limit und den Preis für eine Transaktion festzulegen:

Wenn du diese Anweisungen nicht angibst, verwendet die Transaktion das Standard- Compute Unit Limit mit einem Compute Unit Preis von 0 (keine Prioritätsgebühr).

Die Prioritätsgebühr hängt von dem von Ihnen angeforderten Compute-Unit-Limit für die Transaktion ab, nicht von den tatsächlich genutzten Compute-Units. Wenn Sie ein Compute-Unit-Limit festlegen, das zu hoch ist oder den Standardwert verwenden, könnten Sie für ungenutzte Compute- Units bezahlen.

Beispiele

Die folgenden Beispiele zeigen, wie man das Compute-Unit-Limit und den Preis für eine Transaktion festlegt.

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

Inhaltsverzeichnis

Seite bearbeiten