Transaktiomaksut
Jokaisesta Solana-transaktiosta veloitetaan perusmaksu (SOL) validaattoreille transaktion käsittelystä. Voit myös maksaa valinnaisen priorisointimaksun lisätäksesi mahdollisuutta, että nykyinen johtaja (validaattori) käsittelee transaktiosi.
Avainasiat
- Transaktion perusmaksu on 5000 lamportia per allekirjoitus transaktiossa.
- Priorisointimaksu (valinnainen) on lisämaksu, jonka maksat validaattorille lisätäksesi mahdollisuutta, että nykyinen johtaja käsittelee transaktiosi.
- Priorisointimaksu on: (laskentayksikön raja * laskentayksikön hinta).
- Laskentayksikön raja on enimmäismäärä laskentayksiköitä, joita transaktiosi voi käyttää.
- Laskentayksikön hinta on hinta per laskentayksikkö mikrolamporteissa.
- 1 000 000 mikrolamportia = 1 lamport
- Transaktiomaksun maksajan on oltava System Program -ohjelman omistama tili.
Perus transaktiomaksu
Perusmaksu on transaktion lähettämisen kustannus. Kustannus on 5000 lamportia per transaktioon sisällytetty allekirjoitus.
Perusmaksu vähennetään transaktiomaksun maksajan tililtä, joka on ensimmäinen allekirjoittaja transaktiossa. Maksajan on oltava System Program -ohjelman omistama tili.
- 50% Poltetaan: Puolet perusmaksusta poltetaan.
- 50% Jakelu: Puolet maksetaan validaattorille, joka käsitteli transaktion.
Priorisointimaksu
Priorisointimaksu on valinnainen maksu, joka maksetaan lisätäksesi mahdollisuutta, että nykyinen johtaja käsittelee transaktiosi.
- SIMD-0096: Transaktion käsittelevä validator saa 100 % prioriteettimaksusta.
Laskentayksiköt ja rajoitukset
Kun transaktio käsitellään, se käyttää laskennallisia resursseja, joita mitataan laskentayksiköinä (CU). Jokainen käsky vähentää transaktion laskentayksikköbudjettia.
- Maksimiraja: Transaktio voi käyttää enintään 1,4 miljoonaa laskentayksikköä.
- Oletusraja: Oletuksena jokainen käsky voi käyttää enintään 200 000 laskentayksikköä.
- Mukautettu raja: Voit pyytää tiettyä laskentayksikkörajaa sisällyttämällä
SetComputeUnitLimit
-käskyn transaktioosi.
Lisätietoja laskentayksiköiden käytöstä:
Katso Kuinka pyytää optimaalista laskentaa -opas saadaksesi lisätietoja laskentayksiköiden käytöstä.
Laskentayksikön hinta
Laskentayksikön hinta on valinnainen määrä, joka määritetään mikrolamporteissa, ja jonka maksat jokaisesta pyydetystä laskentayksiköstä. Tätä hintaa käytetään transaktiosi priorisointimaksun laskemiseen.
Käytä näitä resursseja saadaksesi reaaliaikaisia suosituksia nykyisestä laskentayksikön hinnasta:
Palveluntarjoaja | Priority Fee API |
---|---|
Helius | Dokumentaatio |
QuickNode | Dokumentaatio |
Triton | Dokumentaatio |
Katso Kuinka käyttää prioriteettimaksuja -opas saadaksesi lisätietoja prioriteettimaksuista.
Priorisointimaksun laskeminen
Priorisointimaksu lasketaan seuraavasti:
Priorisointimaksu = Laskentayksikön raja × Laskentayksikön hinta
Suositeltu tapa priorisointimaksujen asettamiseen on ensin
simuloida
transaktio laskentayksiköiden arvioimiseksi. Lisää sitten 10 % turvamarginaali
tähän arvioon ja käytä tuloksena saatua arvoa parametrina Compute Unit Limit
.
Transaktion prioriteetti, joka määrittää sen tärkeysjärjestyksen suhteessa muihin transaktioihin, lasketaan seuraavalla kaavalla:
Prioriteetti = ((Laskentayksikön raja * Laskentayksikön hinta) + Perusmaksu) / (1 + Laskentayksikön raja + Allekirjoituksen laskentayksiköt + Kirjoituslukon laskentayksiköt)
Käytä näitä ohjeita laskentayksikön rajan ja hinnan asettamiseen transaktiossa:
SetComputeUnitLimit
tietyn yksikkörajan asettamiseen.SetComputeUnitPrice
laskentayksikön hinnan määrittämiseen.
Jos et anna näitä ohjeita, transaktio käyttää oletusarvoista laskentayksikön rajaa, jonka laskentayksikön hinta on 0 (ei priorisointimaksua).
Priorisointimaksu riippuu transaktiota varten pyytämästäsi laskentayksikön rajasta, ei todellisista käytetyistä laskentayksiköistä. Jos asetat liian korkean laskentayksikön rajan tai käytät oletussummaa, saatat maksaa käyttämättömistä laskentayksiköistä.
Esimerkkejä
Seuraavat esimerkit näyttävät, miten laskentayksikön raja ja hinta asetetaan transaktiossa.
SDK | Lähdekoodin viite |
---|---|
solana-sdk (Rust) | ComputeBudgetInstruction |
@solana/web3.js (Typescript) | ComputeBudgetProgram |
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?