Her Solana işlemi, SOL cinsinden ödenen bir işlem ücreti gerektirir. İşlem ücretleri iki bölüme ayrılır: temel ücret ve önceliklendirme ücreti. Temel ücret, doğrulayıcıları işlemi işlemek için tazmin eder. Önceliklendirme ücreti, mevcut liderin işleminizi işleme şansını artırmak için isteğe bağlı bir ücrettir.
Temel ücret
Her işlem, dahil edilen imza başına 5000 lamport maliyetindedir. Bu ücret, işlemdeki ilk imzalayan tarafından ödenir. Yalnızca System Program'a ait hesaplar işlem ücreti ödeyebilir. Temel ücret aşağıdaki şekilde bölünür:
- %50 yakılır: Yarısı yakılır (dolaşımdaki SOL arzından çıkarılır).
- %50 dağıtılır: Yarısı, işlemi işleyen doğrulayıcıya ödenir.
Önceliklendirme ücreti
Önceliklendirme ücreti, mevcut liderin (doğrulayıcı) işleminizi işleme şansını artırmak için kullanılan isteğe bağlı bir ücrettir. Doğrulayıcı, öncelik ücretinin %100'ünü alır. Önceliklendirme ücretleri, işlemin hesaplama birimi (CU) fiyatı ve CU limitini ayarlayarak belirlenebilir. (Önceliklendirme ücretleri hakkında daha fazla ayrıntı için Öncelik Ücretleri Nasıl Kullanılır kılavuzuna bakın.)
Önceliklendirme ücreti şu şekilde hesaplanır:
Prioritization fee = CU limit * CU price
Önceliklendirme ücreti, diğer işlemlere göre işleminizin önceliğini belirlemek için kullanılır. Aşağıdaki formül kullanılarak hesaplanır:
Priority = (Prioritization fee + Base fee) / (1 + CU limit + Signature CUs + Write lock CUs)
Hesaplama birimi limiti
Varsayılan olarak,
her talimata
200.000 CU
ve her işleme
1,4 milyon CU
tahsis edilir. İşleminize bir
SetComputeUnitLimit
talimatı ekleyerek bu varsayılanları değiştirebilirsiniz.
İşleminiz için uygun CU limitini hesaplamak için aşağıdaki adımları öneriyoruz:
- İşlemi simüle ederek gerekli CU birimlerini tahmin edin
- Bu tahmine %10 güvenlik marjı ekleyin
Öncelik ücreti, işlemde talep edilen hesaplama birimi limitine göre belirlenir, kullanılan gerçek hesaplama birimi sayısına göre değil. Çok yüksek bir hesaplama birimi limiti belirlerseniz veya varsayılan miktarı kullanırsanız, kullanılmayan hesaplama birimleri için ödeme yapabilirsiniz.
Hesaplama birimi fiyatı
Hesaplama birimi fiyatı, talep edilen her CU için ödenen isteğe bağlı bir
mikro-lamport miktarıdır. CU
fiyatını, doğrulayıcıyı işleminize öncelik vermeye teşvik eden bir bahşiş olarak
düşünebilirsiniz. CU fiyatını ayarlamak için işleminize bir
SetComputeUnitPrice
talimatı ekleyin.
Varsayılan CU fiyatı 0'dır, yani varsayılan önceliklendirme ücreti de 0'dır.
İşleminiz için en iyi CU fiyatını belirleme konusunda yardım almak için aşağıdaki tabloda listelenen gerçek zamanlı CU fiyat önerisine bakın.
| Sağlayıcı | Öncelik ücreti API'si |
|---|---|
| Helius | Dokümantasyon |
| QuickNode | Dokümantasyon |
| Triton | Dokümantasyon |
Örnek
Aşağıdaki örnekler, Solana SDK'larını kullanarak bir işlemde CU limitinin ve CU fiyatının nasıl ayarlanacağını göstermektedir.
| SDK | Kaynak kod referansı |
|---|---|
@solana/web3.js (Typescript) | ComputeBudgetProgram |
solana-sdk (Rust) | ComputeBudgetInstruction |
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?