Anggaran komputasi

Ringkasan

Default 200K CU per instruksi, maksimal 1,4M per transaksi. Gunakan instruksi SetComputeUnitLimit dan SetComputeUnitPrice untuk optimasi. Biaya prioritas didasarkan pada CU yang diminta, bukan penggunaan aktual.

Batas unit komputasi

Setiap instruksi dialokasikan default 200.000 CU, dan setiap transaksi dibatasi pada 1.400.000 CU. Ketika tidak ada instruksi SetComputeUnitLimit eksplisit, maka default dihitung berdasarkan jenis instruksi:

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)
  • Instruksi builtin (System Program, Stake, Vote, dll. yang belum dimigrasikan ke SBF): masing-masing dialokasikan MAX_BUILTIN_ALLOCATION_COMPUTE_UNIT_LIMIT = 3.000 CU (sesuai SIMD-0170).
  • Instruksi non-builtin (program SBF yang di-deploy pengguna): masing-masing dialokasikan DEFAULT_INSTRUCTION_COMPUTE_UNIT_LIMIT = 200.000 CU.
  • Builtin yang sedang migrasi yang telah menyelesaikan migrasi ke SBF (feature-gated): diperlakukan sebagai non-builtin (200.000 CU masing-masing).

Hasilnya dibatasi pada MAX_COMPUTE_UNIT_LIMIT (1.400.000).

Anda dapat mengganti default ini dengan menyertakan instruksi SetComputeUnitLimit dalam transaksi Anda.

Untuk menentukan batas CU yang sesuai:

  1. Simulasikan transaksi untuk mengukur konsumsi CU.
  2. Tambahkan margin keamanan 10% pada nilai hasil simulasi.

Biaya prioritas ditentukan oleh batas unit komputasi yang diminta pada transaksi, bukan jumlah unit komputasi yang benar-benar digunakan. Jika Anda menetapkan batas unit komputasi yang terlalu tinggi atau menggunakan jumlah default, Anda membayar untuk unit komputasi yang tidak terpakai.

Instruksi compute budget

Compute Budget Program (ComputeBudget111111111111111111111111111111) memiliki empat instruksi.

VarianDiskriminatorParameterTipeDeskripsi
RequestHeapFrame1bytesu32Ukuran heap yang diminta dalam byte untuk setiap program dalam transaksi
SetComputeUnitLimit2unitsu32CU maksimum yang dapat dikonsumsi transaksi
SetComputeUnitPrice3micro_lamportsu64Harga CU dalam micro-lamport
SetLoadedAccountsDataSizeLimit4bytesu32Total byte maksimum data akun yang dapat dimuat transaksi

Sumber: enum ComputeBudgetInstruction

Batasan dan kondisi error

Aturan berikut berlaku saat memproses instruksi compute budget:

  • Satu per tipe: hanya satu dari setiap varian instruksi yang diizinkan per transaksi. Menyertakan duplikat menyebabkan error DuplicateInstruction (seluruh transaksi gagal).
  • RequestHeapFrame: nilai harus antara MIN_HEAP_FRAME_BYTES (32 KiB) dan MAX_HEAP_FRAME_BYTES (256 KiB), dan harus merupakan kelipatan 1.024. Jika tidak, transaksi gagal dengan InvalidInstructionData. Ukuran heap berlaku untuk setiap program yang dipanggil dalam transaksi (termasuk CPI).
  • SetComputeUnitLimit: nilai u32 apa pun diterima. Batas efektif dibatasi hingga MAX_COMPUTE_UNIT_LIMIT (1.400.000).
  • SetComputeUnitPrice: nilai u64 apa pun diterima (0 hingga u64::MAX).
  • SetLoadedAccountsDataSizeLimit: nilai harus lebih besar dari 0 (NonZeroU32). Nilai 0 menyebabkan InvalidLoadedAccountsDataSizeLimit. Batas efektif dibatasi hingga MAX_LOADED_ACCOUNTS_DATA_SIZE_BYTES (64 MiB).
  • Data tidak dikenali: instruksi apa pun yang dikirim ke Compute Budget Program yang tidak dapat di-deserialisasi menjadi varian yang dikenal gagal dengan InvalidInstructionData.

Model biaya scheduler di bawah ini menjelaskan estimasi biaya pra-eksekusi internal validator. Sebagian besar developer hanya memerlukan instruksi compute budget di atas.

Model biaya scheduler

Scheduler validator menggunakan model biaya untuk memperkirakan penggunaan sumber daya transaksi sebelum eksekusi. Estimasi biaya pra-eksekusi ini menentukan apakah suatu transaksi sesuai dengan kapasitas blok yang tersisa. Ini terpisah dari pengukuran CU yang terjadi selama eksekusi.

Total biaya scheduler adalah jumlah dari lima komponen (UsageCostDetails::sum):

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

Komponen biaya

KomponenDeskripsi
Biaya signatureBiaya per signature untuk setiap jenis signature
Biaya write lockPer akun yang dapat ditulis
Biaya instruction dataBerdasarkan total byte instruction data
Biaya eksekusi programBatas CU dari compute budget atau default
Biaya loaded accounts dataBerdasarkan total ukuran loaded account data

Semua nilai dalam compute unit.

Konstanta biaya scheduler

Biaya transaksi vote

Transaksi vote menggunakan biaya statis sebesar 3.428 CU terlepas dari konten aktualnya.

Batas blok

Scheduler memberlakukan batas per blok. Jika menambahkan transaksi akan melebihi batas apa pun, transaksi tersebut tidak akan disertakan dalam blok.

SIMD-0286 mengusulkan peningkatan MAX_BLOCK_UNITS menjadi 100.000.000.

Konstanta budget eksekusi

Konstanta berikut dari execution_budget.rs mendefinisikan batas runtime selama eksekusi transaksi:

KonstantaNilaiDeskripsi
MAX_COMPUTE_UNIT_LIMIT1.400.000Batas CU maksimum per transaksi
DEFAULT_INSTRUCTION_COMPUTE_UNIT_LIMIT200.000CU default per instruksi non-builtin
MAX_BUILTIN_ALLOCATION_COMPUTE_UNIT_LIMIT3.000CU default per instruksi builtin (SIMD-0170)
DEFAULT_HEAP_COST8 CUBiaya per halaman heap 32 KiB
DEFAULT_INVOCATION_COST1.000 CUBiaya satu pemanggilan CPI
INVOKE_UNITS_COST_SIMD_0339946 CUBiaya pemanggilan CPI dengan SIMD-0339
MIN_HEAP_FRAME_BYTES32.768Ukuran heap minimum (32 KiB)
MAX_HEAP_FRAME_BYTES262.144Ukuran heap maksimum (256 KiB)
MAX_LOADED_ACCOUNTS_DATA_SIZE_BYTES67.108.864Data akun maksimum yang dimuat per transaksi (64 MiB)
MAX_INSTRUCTION_STACK_DEPTH5Kedalaman stack instruksi maksimum (top-level + CPI)
MAX_INSTRUCTION_STACK_DEPTH_SIMD_02689Kedalaman stack instruksi maksimum (top-level + CPI) dengan SIMD-0268
MAX_CALL_DEPTH64Kedalaman pemanggilan SBF-ke-SBF maksimum dalam program
STACK_FRAME_SIZE4.096 byteUkuran satu stack frame SBF

Is this page helpful?

Daftar Isi

Edit Halaman

Dikelola oleh

© 2026 Yayasan Solana.
Semua hak dilindungi.
Terhubung