İşlem Ücretleri
Her Solana işlemi, SOL cinsinden ödenen bir işlem ücreti gerektirir. İşlem ücretleri iki kısma ayrılır: temel ücret ve önceliklendirme ücreti. Temel ücret, doğrulayıcıları işlemi işledikleri için tazmin eder. Önceliklendirme ücreti, mevcut liderin işleminizi işleme olasılığı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 ve System Program tarafından sahip olunan bir hesap tarafından ödenmelidir. Temel ücret şu şekilde bölünür:
- %50'si yakılır: Yarısı yakılır (dolaşımdaki SOL arzından çıkarılır).
- %50'si dağıtılır: Yarısı, işlemi işleyen doğrulayıcıya ödenir.
Önceliklendirme ücreti
Önceliklendirme ücreti, mevcut liderin (doğrulayıcının) işleminizi işleme olasılığı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ını ve CU limitini ayarlayarak belirlenebilir. (Önceliklendirme ücretleri hakkında daha fazla ayrıntı için Öncelik Ücretlerini Kullanma Kılavuzu'na bakın.)
Önceliklendirme ücreti şu şekilde hesaplanır:
Önceliklendirme Ücreti = Hesaplama Birimi Sınırı × Hesaplama Birimi Fiyatı
Önceliklendirme ücreti, işleminizin önceliğini diğer işlemlere göre belirlemek için kullanılır. Aşağıdaki formül kullanılarak hesaplanır:
İşlem Önceliği = Önceliklendirme Ücreti / Hesaplama Birimi Sınırı
Hesaplama birimi limiti
Varsayılan olarak,
her talimata
200.000 CU
ve her işleme
1,4 milyon CU
tahsis edilir. İşleminize
SetComputeUnitLimit
talimatını ekleyerek bu varsayılanları değiştirebilirsiniz.
İşleminiz için uygun CU limitini hesaplamak için aşağıdaki adımları öneririz:
- Gerekli CU birimlerini işlemi simüle ederek tahmin edin
- Bu tahmine %10 güvenlik payı ekleyin
Öncelik ücreti, işlemin gerçekte kullandığı hesaplama birimi sayısına değil, talep edilen hesaplama birimi limitine göre belirlenir. Eğer ç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ı, validator'ın işleminize öncelik vermesini teşvik eden bir bahşiş olarak düşünebilirsiniz. CU fiyatını ayarlamak için, işleminize bir ComputeBudgetInstruction::set_compute_unit_price 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ı belirlemek için yardıma ihtiyacınız varsa, aşağıdaki tabloda listelenen gerçek zamanlı CU fiyat önerilerine bakın.
Sağlayıcı | Öncelik Ücreti API |
---|---|
Helius | Dokümantasyon |
QuickNode | Dokümantasyon |
Triton | Dokümantasyon |
Örnek
Aşağıdaki örnekler, Solana SDK'larını kullanarak bir işlemde CU limitini ve CU fiyatını nasıl ayarlayacağınızı göstermektedir.
SDK | Kaynak Kod Referansı |
---|---|
@solana/web3.js (Typescript) | ComputeBudgetProgram.setComputeUnitPrice |
solana-sdk (Rust) | ComputeBudgetInstruction::set_compute_unit_limit |
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?