Transaktiomaksut

Jokaisesta Solana-transaktiosta veloitetaan transaktiomaksu, joka maksetaan SOL:lla. Transaktiomaksut jaetaan kahteen osaan: perusmaksuun ja priorisointimaksuun. Perusmaksu korvaa validaattoreille transaktion käsittelyn. Priorisointimaksu on valinnainen maksu, joka lisää mahdollisuutta, että nykyinen johtaja käsittelee transaktiosi.

Perusmaksu

Jokainen transaktio maksaa 5000 lamportia per sisällytetty allekirjoitus. Tämän maksun maksaa transaktion ensimmäinen allekirjoittaja. Vain System Program -ohjelman omistamat tilit voivat maksaa transaktiomaksuja. Perusmaksu jaetaan seuraavasti:

Priorisointimaksu

Priorisointimaksu on valinnainen maksu, jota käytetään lisäämään mahdollisuutta, että nykyinen johtaja (validaattori) käsittelee transaktiosi. Validaattori saa 100% priorisointimaksusta. Priorisointimaksuja voidaan asettaa säätämällä transaktion laskentayksikön (CU) hintaa ja CU-rajaa. (Katso lisätietoja priorisointimaksuista Priorisointimaksujen käyttöoppaasta).

Priorisointimaksu lasketaan seuraavasti:

Priorisointimaksu = Laskentayksikön hinta × Laskentayksikön raja

Priorisointimaksua käytetään määrittämään transaktiosi prioriteetti suhteessa muihin transaktioihin. Se lasketaan seuraavalla kaavalla:

Laskentayksikön raja = Priorisointimaksu ÷ Laskentayksikön hinta

Laskentayksikön raja

Oletusarvoisesti jokaiselle ohjeelle on varattu 200 000 CU:ta ja jokaiselle transaktiolle on varattu 1,4 miljoonaa CU:ta. Voit muuttaa näitä oletusarvoja sisällyttämällä ComputeBudgetInstruction::set_compute_unit_limit -ohjeen transaktioosi.

Laskeaksesi sopivan laskentayksikön rajan transaktiolle, suosittelemme seuraavia vaiheita:

  1. Arvioi tarvittavien laskentayksiköiden määrä simuloimalla transaktio
  2. Lisää 10% turvamarginaali tähän arvioon

Priorisointimaksu määräytyy pyydetyn laskentayksikön rajan perusteella, ei todellisen käytettyjen laskentayksiköiden määrän mukaan. Jos asetat laskentayksikön rajan liian korkeaksi tai käytät oletusarvoa, saatat maksaa käyttämättömistä laskentayksiköistä.

Laskentayksikön hinta

Laskentayksikön hinta on valinnainen määrä mikro-lamporteja, joka maksetaan jokaisesta pyydetystä laskentayksiköstä. Voit ajatella laskentayksikön hintaa tippinä, joka kannustaa validatoria priorisoimaan transaktiosi. Asettaaksesi laskentayksikön hinnan, sisällytä ComputeBudgetInstruction::SetComputeUnitPrice ohje transaktioosi.

Laskentayksikön oletushinta on 0, mikä tarkoittaa että myös oletusarvoinen priorisointimaksu on 0.

Saadaksesi apua parhaan laskentayksikön hinnan määrittämiseen transaktiollesi, katso reaaliaikainen laskentayksikön hintasuositus alla olevasta taulukosta.

Esimerkki

Alla olevat esimerkit näyttävät, miten laskentayksikön raja ja hinta asetetaan transaktiossa käyttäen Solana SDK:ta.

SDKLähdekoodin viite
@solana/web3.js (Typescript)ComputeBudgetProgram.setComputeUnitLimit
solana-sdk (Rust)ComputeBudgetInstruction::set_compute_unit_limit
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?

Sisällysluettelo

Muokkaa sivua

Hallinnoi

© 2025 Solana Foundation.
Kaikki oikeudet pidätetään.