Elke Solana-transactie vereist transactiekosten, betaald in SOL. Transactiekosten zijn opgesplitst in twee delen: de basiskosten en de prioriteringskosten. De basiskosten compenseren validators voor het verwerken van de transactie. De prioriteringskosten zijn optionele kosten om de kans te vergroten dat de huidige leider je transactie zal verwerken.
Basiskosten
Elke transactie kost 5000 lamports per opgenomen handtekening. Deze kosten worden betaald door de eerste ondertekenaar van de transactie. Alleen accounts die eigendom zijn van het System Program kunnen transactiekosten betalen. De basiskosten worden 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.
Prioriteringskosten
Een prioriteringskosten zijn optionele kosten die worden gebruikt om de kans te vergroten dat de huidige leider (validator) je transactie zal verwerken. De validator ontvangt 100% van de prioriteringskosten. Prioriteringskosten kunnen worden ingesteld door de computation unit (CU) prijs en CU-limiet van de transactie aan te passen. (Zie de How to Use Priority Fees guide voor meer details over prioriteringskosten.)
De prioriteringskosten worden als volgt berekend:
Prioritization fee = CU limit * CU price
De prioriteringskosten worden gebruikt om de prioriteit van je transactie te bepalen, ten opzichte van andere transacties. Deze wordt berekend met de volgende formule:
Priority = (Prioritization fee + Base fee) / (1 + CU limit + Signature CUs + Write lock CUs)
Compute unit-limiet
Standaard
krijgt
elke instructie
200.000 CU's
toegewezen en elke transactie krijgt
1,4 miljoen CU's
toegewezen. 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:
- Schat de benodigde CU-eenheden door de transactie te simuleren
- Voeg een veiligheidsmarge van 10% toe aan deze schatting
De prioriteitsvergoeding wordt bepaald door de aangevraagde compute unit-limiet van de transactie, niet door het werkelijke aantal gebruikte compute units. Als je een compute unit-limiet instelt die te hoog is of het standaardbedrag gebruikt, betaal je mogelijk voor ongebruikte compute units.
Compute unit-prijs
De compute unit-prijs is een optioneel bedrag aan
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 te prioriteren. Om de CU-prijs in te stellen, voeg
je een
SetComputeUnitPrice
instructie toe aan je transactie.
De standaard CU-prijs is 0, wat betekent dat de standaard prioriteringsvergoeding 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.
| Provider | Priority Fee API |
|---|---|
| Helius | Documentatie |
| QuickNode | Documentatie |
| Triton | Documentatie |
Voorbeeld
De onderstaande voorbeelden laten zien hoe je de CU-limiet en CU-prijs instelt op een transactie met behulp van Solana SDK's.
| SDK | Broncodeverwijzing |
|---|---|
@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);
Is this page helpful?