İşlem ücretleri
Her Solana işlemi, SOL olarak ö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. Yalnızca System Program tarafından sahip olunan hesaplar işlem ücretlerini ödeyebilir. Temel ücret aşağıdaki ş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 bilgi için Öncelik Ücretlerini Kullanma Kılavuzu'na bakın.)
Önceliklendirme ücreti aşağıdaki ş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 Hesaplama Birimi sınırını hesaplamak için aşağıdaki adımları öneririz:
- İşlemi simüle ederek gerekli Hesaplama Birimi miktarını tahmin edin
- Bu tahmine %10 güvenlik payı ekleyin
Önceliklendirme ücreti, gerçekte kullanılan hesaplama birimi sayısına göre değil, talep edilen hesaplama birimi sınırına göre belirlenir. Eğer çok yüksek bir hesaplama birimi sınırı 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 Hesaplama Birimi için ödenen isteğe
bağlı bir mikro-lamport
miktarıdır. Hesaplama Birimi fiyatını, validator'ın işleminize öncelik vermesini
teşvik eden bir bahşiş olarak düşünebilirsiniz. Hesaplama Birimi fiyatını
ayarlamak için, işleminize bir
SetComputeUnitPrice
talimatı ekleyin.
Varsayılan Hesaplama Birimi fiyatı 0'dır, yani varsayılan önceliklendirme ücreti de 0'dır.
İşleminiz için en iyi Hesaplama Birimi fiyatını belirlemek için yardım almak isterseniz, aşağıdaki tabloda listelenen gerçek zamanlı Hesaplama Birimi fiyat önerilerine bakabilirsiniz.
| 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 Hesaplama Birimi sınırını ve Hesaplama Birimi fiyatını nasıl ayarlayacağınızı 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?