Transaktiomaksut
Jokaisesta Solana-transaktiosta veloitetaan transaktiomaksu, joka maksetaan SOL:lla. Transaktiomaksut jakautuvat 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 sisällytettyä allekirjoitusta kohden. Tämän maksun maksaa transaktion ensimmäinen allekirjoittaja, ja se on maksettava tililtä, jonka omistaa System Program. Perusmaksu jakautuu 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% prioriteettimaksusta. Priorisointimaksuja voidaan asettaa säätämällä transaktion laskentayksikön (CU) hintaa ja CU-rajaa. (Katso Kuinka käyttää prioriteettimaksuja -opas saadaksesi lisätietoja priorisointimaksuista.)
Priorisointimaksu lasketaan seuraavasti:
Priorisointimaksu = Laskentayksikön raja × Laskentayksikön hinta
Priorisointimaksua käytetään määrittämään transaktiosi prioriteetti suhteessa muihin transaktioihin. Se lasketaan seuraavalla kaavalla:
Prioriteetti = Priorisointimaksu ÷ Laskentayksikön raja
Laskentayksikön raja
Oletusarvoisesti
jokaiselle ohjeelle on varattu
200 000 CU:ta
ja jokaiselle transaktiolle
1,4 miljoonaa CU:ta.
Voit muuttaa näitä oletusarvoja sisällyttämällä
SetComputeUnitLimit
-ohjeen transaktioosi.
Laskeaksesi sopivan CU-rajan transaktiollesi suosittelemme seuraavia vaiheita:
- Arvioi tarvittavat CU-yksiköt simuloimalla transaktio
- Lisää 10 % turvamarginaali tähän arvioon
Priorisointimaksu määräytyy pyydetyn laskentayksikön rajoituksen 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ä CU:sta. Voit ajatella CU-hintaa tipiksi, joka kannustaa validatoria priorisoimaan transaktiosi. Asettaaksesi CU-hinnan, sisällytä ComputeBudgetInstruction::set_compute_unit_price -ohje transaktioosi.
CU-hinnan oletusarvo on 0, mikä tarkoittaa, että oletusarvoinen priorisointimaksu on myös 0.
Saadaksesi apua parhaan CU-hinnan määrittämiseen transaktiollesi, katso reaaliaikainen CU-hintasuositus alla olevasta taulukosta.
| Palveluntarjoaja | Priorisointimaksun API |
|---|---|
| Helius | Dokumentaatio |
| QuickNode | Dokumentaatio |
| Triton | Dokumentaatio |
Esimerkki
Alla olevat esimerkit näyttävät, miten CU-raja ja CU-hinta asetetaan transaktioon käyttäen Solana SDK:ta.
| SDK | Lähdekoodin viite |
|---|---|
| @solana/web3.js (Typescript) | ComputeBudgetProgram.setComputeUnitPrice() |
| 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 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?