İş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.

Ö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.

1.000.000 mikro lamport = 1 lamport

Güncel hesaplama birimi fiyatı hakkında gerçek zamanlı öneriler almak için bu kaynakları kullanın:

Ö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:

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.

SDKKaynak 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 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);
Console
Click to execute the code.

Is this page helpful?

İçindekiler

Sayfayı Düzenle