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.

1 000 000 mikrolamportia = 1 lamport

Käytä näitä resursseja saadaksesi reaaliaikaisia suosituksia nykyisestä laskentayksikön hinnasta:

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:

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.

SDKLä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 instructions
const 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 transaction
const transaction = new Transaction()
.add(limitInstruction)
.add(priceInstruction)
.add(transferInstruction);
const signature = await sendAndConfirmTransaction(connection, transaction, [
sender
]);
console.log("Transaction Signature:", signature);
Click to execute the code.

Is this page helpful?

Sisällysluettelo

Muokkaa sivua