Transactiekosten

Elke Solana-transactie vereist een transactiekosten, betaald in SOL. Transactiekosten zijn verdeeld in twee delen: de basiskosten en de prioriteitskosten. De basiskosten compenseren validators voor het verwerken van de transactie. De prioriteitskosten zijn optionele kosten om de kans te vergroten dat de huidige leider je transactie verwerkt.

Basiskosten

Elke transactie kost 5000 lamports per opgenomen handtekening. Deze vergoeding wordt betaald door de eerste ondertekenaar van de transactie. Alleen accounts die eigendom zijn van het System Program kunnen transactiekosten betalen. De basisvergoeding wordt als volgt verdeeld:

  • 50% verbrand: De helft wordt verbrand (uit de circulerende SOL-voorraad gehaald).
  • 50% gedistribueerd: De helft wordt betaald aan de validator die de transactie heeft verwerkt.

Prioriteitskosten

Een prioriteitskosten zijn optionele kosten die worden gebruikt om de kans te vergroten dat de huidige leider (validator) je transactie verwerkt. De validator ontvangt 100% van de prioriteitskosten. Prioriteitskosten kunnen worden ingesteld door de compute-eenheden (CU) prijs en CU limiet van de transactie aan te passen. (Zie de Hoe prioriteitskosten te gebruiken gids voor meer details over prioriteitskosten.)

De prioriteitskosten worden als volgt berekend:

Prioritization fee formula
Prioritization fee = CU limit * CU price

De prioriteitskosten worden gebruikt om de prioriteit van je transactie te bepalen, relatief ten opzichte van andere transacties. Het wordt berekend met de volgende formule:

Transaction priority formula
Priority = (Prioritization fee + Base fee) / (1 + CU limit + Signature CUs + Write lock CUs)

Compute-eenheidslimiet

Standaard standaard krijgt elke instructie 200.000 CUs toegewezen en elke transactie krijgt 1,4 miljoen CUs. Je kunt deze standaardwaarden wijzigen door een SetComputeUnitLimit instructie in je transactie op te nemen.

Om de juiste CU-limiet voor je transactie te berekenen, raden we de volgende stappen aan:

  1. Schat de benodigde CU-eenheden door simulatie van de transactie
  2. Voeg een veiligheidsmarge van 10% toe aan deze schatting

De prioriteitsvergoeding wordt bepaald door de aangevraagde compute-eenhedenlimiet van de transactie, niet door het werkelijke aantal gebruikte compute-eenheden. Als je een compute-eenhedenlimiet instelt die te hoog is of de standaardhoeveelheid gebruikt, betaal je mogelijk voor ongebruikte compute-eenheden.

Compute-eenheidsprijs

De compute-eenheidsprijs is een optioneel bedrag in micro-lamports dat wordt betaald voor elke aangevraagde CU. Je kunt de CU-prijs zien als een fooi om de validator aan te moedigen je transactie prioriteit te geven. Om de CU-prijs in te stellen, neem je een SetComputeUnitPrice instructie op in je transactie.

De standaard CU-prijs is 0, wat betekent dat de standaard prioriteitsvergoeding ook 0 is.

Voor hulp bij het bepalen van de beste CU-prijs voor je transactie, zie de realtime CU-prijsaanbeveling in de onderstaande tabel.

Voorbeeld

De onderstaande voorbeelden laten zien hoe je de CU-limiet en CU-prijs instelt voor een transactie met behulp van Solana SDK's.

SDKBroncode referentie
@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?

Inhoudsopgave

Pagina Bewerken

Beheerd door

© 2025 Solana Foundation.
Alle rechten voorbehouden.
Blijf Verbonden