Transactiekosten

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

Basiskosten

Elke transactie kost 5000 lamports per opgenomen handtekening. Deze kosten worden betaald door de eerste ondertekenaar van de transactie en moeten worden betaald door een account dat eigendom is van het System Program. 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.

Prioriteitsvergoeding

Een prioriteitsvergoeding is een optionele vergoeding die wordt gebruikt om de kans te vergroten dat de huidige leider (validator) jouw transactie zal verwerken. De validator ontvangt 100% van de prioriteitsvergoeding. Prioriteitsvergoedingen kunnen worden ingesteld door de rekeneenheid (CU) prijs en CU limiet van de transactie aan te passen. (Zie de Handleiding voor het gebruik van prioriteitsvergoedingen voor meer details over prioriteitsvergoedingen.)

De prioriteitsvergoeding wordt als volgt berekend:

Prioriteitstoeslag = Compute-eenhedenlimiet × Prijs per compute-eenheid

De prioriteitsvergoeding wordt gebruikt om de prioriteit van je transactie te bepalen ten opzichte van andere transacties. Deze wordt berekend met de volgende formule:

Transactieprioriteit = Prioriteitsvergoeding / Transactiegrootte

Rekeneenheid limiet

Standaard wordt elke instructie toegewezen 200.000 CUs 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 unit limiet transactie, niet 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 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 ComputeBudgetInstruction::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.setComputeUnitPrice
solana-sdk (Rust)ComputeBudgetInstruction::set_compute_unit_price
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