İşlem Ücretleri
Her Solana işlemi, doğrulayıcıların işlemi işlemesi için bir temel ücret (SOL) gerektirir. Ayrıca, mevcut liderin (validator) işleminizi işleme olasılığını artırmak için isteğe bağlı bir önceliklendirme ücreti de ödeyebilirsiniz.
Önemli Noktalar
- Bir işlem için temel ücret, işlemdeki imza başına 5000 lamport'tur.
- Önceliklendirme ücreti (isteğe bağlı), mevcut liderin işleminizi işleme şansını artırmak için validator'a ödediğiniz ekstra bir ücrettir.
- Önceliklendirme ücreti şuna eşittir: (hesaplama birimi limiti * hesaplama birimi fiyatı).
- Hesaplama birimi limiti, işleminizin kullanabileceği maksimum hesaplama birimidir.
- Hesaplama birimi fiyatı, mikro-lamport cinsinden hesaplama birimi başına fiyattır.
- 1.000.000 mikro lamport = 1 lamport
- İşlem ücreti ödeyicisi, System Program tarafından sahiplenilen bir hesap olmalıdır.
Temel İşlem Ücreti
Temel ücret, bir işlem göndermenin maliyetidir. Maliyet, işleme dahil edilen imza başına 5000 lamport'tur.
Temel ücret, işlemdeki ilk imzalayan olan işlem ücreti ödeyicisinin hesabından çıkar. Ücret ödeyicisi, System Program tarafından sahiplenilen bir hesap olmalıdır.
- %50 Yakılır: Temel ücretin yarısı yakılır.
- %50 Dağıtım: Yarısı işlemi işleyen validator'a ödenir.
Önceliklendirme Ücreti
Önceliklendirme ücreti, mevcut liderin işleminizi işleme şansını artırmak için ödenen isteğe bağlı bir ücrettir.
- SIMD-0096: İşlemi işleyen validator, öncelik ücretinin %100'ünü alır.
Hesaplama Birimleri ve Sınırları
Bir işlem işlendiğinde, hesaplama birimleri (CU) olarak ölçülen hesaplama kaynakları kullanır. Her talimat, işlemin hesaplama birimi bütçesinden düşülür.
- Maksimum Sınır: Bir işlem en fazla 1.4 milyon hesaplama birimi kullanabilir.
- Varsayılan Sınır: Varsayılan olarak, her talimat en fazla 200.000 hesaplama birimi kullanabilir.
- Özel Sınır: İşleminize bir
SetComputeUnitLimit
talimatı ekleyerek belirli bir hesaplama birimi sınırı talep edebilirsiniz.
Hesaplama birimi kullanımı hakkında daha fazla ayrıntı için:
Hesaplama birimi kullanımı hakkında daha fazla ayrıntı için Optimal Hesaplama Nasıl Talep Edilir kılavuzuna bakın.
Hesaplama Birimi Fiyatı
Hesaplama birimi fiyatı, talep edilen her hesaplama birimi için ödediğiniz, mikro-lamport cinsinden belirtilen isteğe bağlı bir miktardır. Bu fiyat, işleminizin önceliklendirme ücretini hesaplamak için kullanılır.
Güncel hesaplama birimi fiyatı hakkında gerçek zamanlı öneriler almak için bu kaynakları kullanın:
Sağlayıcı | Öncelik Ücreti API |
---|---|
Helius | Dokümantasyon |
QuickNode | Dokümantasyon |
Triton | Dokümantasyon |
Öncelik ücretleri hakkında daha fazla ayrıntı için Öncelik Ücretleri Nasıl Kullanılır kılavuzuna bakın.
Önceliklendirme Ücreti Hesaplama
Önceliklendirme ücreti şu şekilde hesaplanır:
Önceliklendirme Ücreti = Hesaplama Birimi Sınırı × Hesaplama Birimi Fiyatı
Öncelik ücretlerini ayarlamak için önerilen yaklaşım, önce gerekli hesaplama
birimlerini tahmin etmek için işlemi
simüle etmek ve
ardından bu tahmine %10'luk bir güvenlik marjı ekleyerek elde edilen değeri
Compute Unit Limit
olarak kullanmaktır.
İşlem önceliği, diğer işlemlere göre nasıl önceliklendirildiğini belirleyen değer, aşağıdaki formül kullanılarak hesaplanır:
Öncelik = ((İşlem Birimi Limiti * İşlem Birimi Fiyatı) + Temel Ücret) / (1 + İşlem Birimi Limiti + İmza İşlem Birimleri + Yazma Kilidi İşlem Birimleri)
Bir işlemde işlem birimi limitini ve fiyatını ayarlamak için şu talimatları kullanın:
SetComputeUnitLimit
belirli bir birim limiti ayarlamak için.SetComputeUnitPrice
işlem birimi başına fiyatı tanımlamak için.
Bu talimatları sağlamazsanız, işlem varsayılan işlem birimi limitini 0 işlem birimi fiyatıyla (önceliklendirme ücreti olmadan) kullanır.
Öncelik ücreti, işlem için talep ettiğiniz işlem birimi limitine bağlıdır, gerçekte kullanılan işlem birimlerine değil. Çok yüksek bir işlem birimi limiti ayarlarsanız veya varsayılan miktarı kullanırsanız, kullanılmayan işlem birimleri için ödeme yapabilirsiniz.
Örnekler
Aşağıdaki örnekler, bir işlem için işlem birimi limitini ve fiyatını nasıl ayarlayacağınızı göstermektedir.
SDK | Kaynak Kod Referansı |
---|---|
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?