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 jokaista transaktioon sisältyvää allekirjoitusta kohden.
Perusmaksu vähennetään transaktiomaksun maksajan tililtä, joka on transaktion ensimmäinen allekirjoittaja. Maksajan on oltava System Program -ohjelman omistama tili.
- 50% poltetaan: Puolet perusmaksusta poltetaan.
- 50% jaetaan: 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: Validator, joka käsittelee transaktion, saa 100 % prioriteettimaksusta.
Laskentayksiköt ja rajoitukset
Kun transaktio käsitellään, se käyttää laskennallisia resursseja, joita mitataan laskentayksiköissä (CU). Jokainen käsky vähentää transaktion laskentayksikköbudjettia.
- Maksimiraja: Transaktio voi käyttää enintään 1,4 miljoonaa laskentayksikköä.
- Oletusraja: Oletusarvoisesti 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 Miten 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, 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 | Prioriteettimaksu-API |
---|---|
Helius | Dokumentaatio |
QuickNode | Dokumentaatio |
Triton | Dokumentaatio |
Katso Miten käyttää prioriteettimaksuja -opas saadaksesi lisätietoja prioriteettimaksuista.
Priorisointimaksun laskeminen
Priorisointimaksu lasketaan seuraavasti:
Priorisointimaksu = Laskentayksikön raja × Laskentayksikön hinta
Suositeltu lähestymistapa prioriteettimaksujen asettamiseen on ensin
simuloida
transaktio arvioidaksesi tarvittavat laskentayksiköt. Lisää sitten 10 %
turvamarginaali tähän arvioon ja käytä tuloksena saatua arvoa
Compute Unit Limit
-arvona.
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 asettaaksesi laskentayksikön rajan ja hinnan transaktiolle:
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 laskentayksikön hinnalla 0 (ei priorisointimaksua).
Prioriteettimaksu riippuu transaktiolle 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 transaktiolle.
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?