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:
- 50% poltetaan: Puolet poltetaan (poistetaan liikkeellä olevasta SOL-tarjonnasta).
- 50% jaetaan: Puolet maksetaan validaattorille, joka käsitteli transaktion.
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:
Prioritization fee = CU limit * CU price
Priorisointimaksua käytetään määrittämään transaktiosi prioriteetti suhteessa muihin transaktioihin. Se lasketaan seuraavalla kaavalla:
Priority = (Prioritization fee + Base fee) / (1 + CU limit + Signature CUs + Write lock CUs)
Laskentayksikön raja
Oletusarvoisesti
kullekin käskylle allokoidaan
200 000 CU:ta
ja kullekin transaktialle allokoidaan
1,4 miljoonaa CU:ta.
Voit muuttaa näitä oletusarvoja sisällyttämällä
SetComputeUnitLimit
-käskyn transaktioosi.
Laskeaksesi sopivan laskentayksikön rajan transaktiolle, suosittelemme seuraavia vaiheita:
- Arvioi tarvittavien laskentayksiköiden määrä simuloimalla transaktio
- 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ä
mikrolamportteja, joka maksetaan
jokaisesta pyydetystä CU:sta. Voit ajatella CU-hintaa juomarahana, joka
kannustaa validaattoria priorisoimaan transaktiosi. Asettaaksesi CU-hinnan,
sisällytä
SetComputeUnitPrice
-käsky 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.
| Palveluntarjoaja | Priorisointimaksu API |
|---|---|
| Helius | Dokumentaatio |
| QuickNode | Dokumentaatio |
| Triton | Dokumentaatio |
Esimerkki
Alla olevat esimerkit näyttävät, miten laskentayksikön raja ja hinta asetetaan transaktiossa käyttäen Solana SDK:ta.
| SDK | Lähdekoodiviite |
|---|---|
@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?