Hesaplama bütçesi

Özet

Talimat başına varsayılan 200K CU, işlem başına maksimum 1,4M. Optimize etmek için SetComputeUnitLimit ve SetComputeUnitPrice talimatlarını kullanın. Öncelik ücreti, gerçek kullanıma değil, talep edilen CU'lara göre belirlenir.

Hesaplama birimi limiti

Her talimata varsayılan olarak 200.000 CU tahsis edilir ve her işlem 1.400.000 CU ile sınırlandırılır. Açık bir SetComputeUnitLimit talimatı bulunmadığında, varsayılan değer talimat türüne göre hesaplanır:

Default CU limit calculation
default_cu_limit = (num_non_migratable_builtin_instructions * 3,000)
+ (num_not_migrated_builtin_instructions * 3,000)
+ (num_non_builtin_instructions * 200,000)
+ (num_migrated_builtin_instructions * 200,000)
  • Yerleşik talimatlar (SBF'ye geçirilmemiş System Program, Stake, Vote vb.): her birine MAX_BUILTIN_ALLOCATION_COMPUTE_UNIT_LIMIT = 3.000 CU tahsis edilir (SIMD-0170'e göre).
  • Yerleşik olmayan talimatlar (kullanıcı tarafından dağıtılan SBF programları): her birine DEFAULT_INSTRUCTION_COMPUTE_UNIT_LIMIT = 200.000 CU tahsis edilir.
  • Geçiş yapan yerleşik programlar (SBF'ye geçişi tamamlamış, özellik kapısı ile korunan): yerleşik olmayan program olarak değerlendirilir (her biri 200.000 CU).

Sonuç, MAX_COMPUTE_UNIT_LIMIT (1.400.000) değerine sınırlandırılır.

İşleminize bir SetComputeUnitLimit talimatı ekleyerek bu varsayılan değeri geçersiz kılabilirsiniz.

Uygun CU limitini belirlemek için:

  1. CU tüketimini ölçmek için işlemi simüle edin.
  2. Simüle edilen değere %10 güvenlik marjı ekleyin.

Öncelik ücreti, kullanılan gerçek hesaplama birimi sayısına değil, işlem üzerinde talep edilen hesaplama birimi limitine göre belirlenir. Çok yüksek bir hesaplama birimi limiti belirlerseniz veya varsayılan miktarı kullanırsanız, kullanılmayan hesaplama birimleri için ödeme yaparsınız.

Hesaplama bütçesi talimatları

Compute Budget Program (ComputeBudget111111111111111111111111111111) dört talimata sahiptir.

VaryantAyırıcıParametreTürAçıklama
RequestHeapFrame1bytesu32İşlemdeki her program için bayt cinsinden istenen heap boyutu
SetComputeUnitLimit2unitsu32İşlemin tüketebileceği maksimum CU
SetComputeUnitPrice3micro_lamportsu64Mikro-lamport cinsinden CU fiyatı
SetLoadedAccountsDataSizeLimit4bytesu32İşlemin yükleyebileceği maksimum toplam hesap verisi baytı

Kaynak: ComputeBudgetInstruction enum

Kısıtlamalar ve hata koşulları

Hesaplama bütçesi talimatları işlenirken aşağıdaki kurallar geçerlidir:

  • Türden birer tane: işlem başına her talimat varyantından yalnızca bir tane kullanılabilir. Tekrar içermesi DuplicateInstruction hatasına neden olur (tüm işlem başarısız olur).
  • RequestHeapFrame: değer MIN_HEAP_FRAME_BYTES (32 KiB) ile MAX_HEAP_FRAME_BYTES (256 KiB) arasında olmalı ve 1.024'ün katı olmalıdır. Aksi takdirde işlem InvalidInstructionData ile başarısız olur. Heap boyutu işlemde çağrılan her programa (CPI'lar dahil) uygulanır.
  • SetComputeUnitLimit: herhangi bir u32 değeri kabul edilir. Geçerli limit MAX_COMPUTE_UNIT_LIMIT (1.400.000) değerine sınırlandırılır.
  • SetComputeUnitPrice: herhangi bir u64 değeri kabul edilir (0 ile u64::MAX arası).
  • SetLoadedAccountsDataSizeLimit: değer 0'dan büyük olmalıdır (NonZeroU32). 0 değeri InvalidLoadedAccountsDataSizeLimit hatasına neden olur. Geçerli limit MAX_LOADED_ACCOUNTS_DATA_SIZE_BYTES (64 MiB) değerine sınırlandırılır.
  • Tanınmayan veri: Compute Budget Program'a gönderilen ve bilinen bir varyanta deserialize edilemeyen herhangi bir talimat InvalidInstructionData ile başarısız olur.

Aşağıdaki zamanlayıcı maliyet modeli, validator-dahili ön yürütme maliyet tahminini açıklar. Çoğu geliştirici yalnızca yukarıdaki hesaplama bütçesi talimatlarına ihtiyaç duyar.

Zamanlayıcı maliyet modeli

Validator'ın zamanlayıcısı yürütmeden önce işlem kaynak kullanımını tahmin etmek için bir maliyet modeli kullanır. Bu ön yürütme maliyet tahminleri, bir işlemin bloğun kalan kapasitesine sığıp sığmadığını belirler. Bunlar, yürütme sırasında gerçekleşen CU ölçümünden ayrıdır.

Toplam zamanlayıcı maliyeti beş bileşenin toplamıdır (UsageCostDetails::sum):

Scheduler cost formula
total_cost = signature_cost
+ write_lock_cost
+ data_bytes_cost
+ programs_execution_cost
+ loaded_accounts_data_size_cost

Maliyet bileşenleri

BileşenAçıklama
İmza maliyetiHer imza türü için imza başına maliyet
Yazma kilidi maliyetiYazılabilir hesap başına
Instruction data maliyetiToplam instruction data baytlarına göre
Program yürütme maliyetiHesaplama bütçesinden CU limiti veya varsayılan
Yüklenen hesap verisi maliyetiToplam yüklenen hesap verisi boyutuna göre

Tüm değerler hesaplama birimi cinsindendir.

Zamanlayıcı maliyet sabitleri

Oylama işlemi maliyeti

Oylama işlemleri, gerçek içeriklerinden bağımsız olarak 3.428 CU'luk sabit bir maliyet kullanır.

Blok limitleri

Zamanlayıcı, blok başına limitleri uygular. Bir işlemin eklenmesi herhangi bir limiti aşacaksa, bloğa dahil edilmez.

SIMD-0286 MAX_BLOCK_UNITS değerini 100,000,000'a yükseltmeyi önermektedir.

Yürütme bütçesi sabitleri

execution_budget.rs dosyasındaki aşağıdaki sabitler, işlem yürütme sırasındaki çalışma zamanı limitlerini tanımlar:

SabitDeğerAçıklama
MAX_COMPUTE_UNIT_LIMIT1,400,000İşlem başına maksimum CU limiti
DEFAULT_INSTRUCTION_COMPUTE_UNIT_LIMIT200,000Yerleşik olmayan talimat başına varsayılan CU
MAX_BUILTIN_ALLOCATION_COMPUTE_UNIT_LIMIT3,000Yerleşik talimat başına varsayılan CU (SIMD-0170)
DEFAULT_HEAP_COST8 CU32 KiB heap sayfası başına maliyet
DEFAULT_INVOCATION_COST1,000 CUBir CPI çağrısının maliyeti
INVOKE_UNITS_COST_SIMD_0339946 CUSIMD-0339 ile CPI çağrı maliyeti
MIN_HEAP_FRAME_BYTES32,768Minimum heap boyutu (32 KiB)
MAX_HEAP_FRAME_BYTES262,144Maksimum heap boyutu (256 KiB)
MAX_LOADED_ACCOUNTS_DATA_SIZE_BYTES67,108,864İşlem başına maksimum yüklenen hesap verisi (64 MiB)
MAX_INSTRUCTION_STACK_DEPTH5Maksimum talimat yığın derinliği (üst seviye + CPI'lar)
MAX_INSTRUCTION_STACK_DEPTH_SIMD_02689SIMD-0268 ile maksimum talimat yığın derinliği (üst seviye + CPI'lar)
MAX_CALL_DEPTH64Bir program içinde maksimum SBF'den SBF'ye çağrı derinliği
STACK_FRAME_SIZE4,096 baytBir SBF yığın çerçevesinin boyutu

Is this page helpful?

İçindekiler

Sayfayı Düzenle

Yönetici

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