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

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

Transaction priority formula
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:

  1. İşlemi simüle ederek gerekli Hesaplama Birimi miktarını tahmin edin
  2. 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.

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

SDKKaynak 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 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

Yönetici

© 2025 Solana Vakfı.
Tüm hakları saklıdır.
Bağlanın