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:
- Priority Fee API Heliuksen tarjoamana
- Global Priority Fee Tracker Tritonin tarjoamana
Katso Kuinka käyttää prioriteettimaksuja -opas saadaksesi lisätietoja prioriteettimaksuista.
Priorisointimaksun laskeminen
Priorisointimaksu lasketaan seuraavasti:
Priorisointimaksu = Laskentayksikön raja × Laskentayksikön hinta
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 laskentayksikkörajaa laskentayksikön hinnalla 0 (ei priorisointimaksua).
Prioriteettimaksu riippuu pyytämästäsi laskentayksikkörajasta transaktiota varten, ei todellisista käytetyistä laskentayksiköistä. Jos asetat laskentayksikkörajan liian korkeaksi tai käytät oletussummaa, saatat maksaa käyttämättömistä laskenta- yksiköistä.
Esimerkkejä
Seuraavat esimerkit näyttävät, miten asetetaan laskentayksikköraja ja hinta 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?