Anggaran Komputasi
Biaya unit komputasi Solana (CU) untuk operasi Rome EVM — anggaran atomik vs. iteratif dan cara merancang kontrak Solidity yang efisien CU.
Setiap transaksi Solana memiliki anggaran komputasi yang diukur dalam Unit Komputasi (CU). Memahami biaya CU membantu Anda merancang kontrak Rome yang efisien.
Gambaran Anggaran
Atomik (VmAt)
~1.400.000 CU
Satu transaksi Solana
Iteratif (VmIt)
Tidak terbatas (multi-tx)
Opcode/langkah adaptif — disesuaikan dengan anggaran CU tiap tx
Setiap transaksi Solana memiliki anggaran default 200.000 CU, yang dapat diperluas hingga ~1,4 juta CU melalui instruksi anggaran komputasi (ditambahkan secara otomatis oleh SDK Rome).
Perkiraan Biaya CU
Operasi EVM
Verifikasi tanda tangan (ecrecover)
~5.000 CU
secp256k1 melalui syscall Solana
Transfer sederhana
~50.000-100.000 CU
Hanya pembaruan saldo
Transfer ERC-20
~100.000-150.000 CU
Termasuk panggilan precompile SPL
Penerapan kontrak (kecil)
~200.000-400.000 CU
Tergantung pada ukuran bytecode
Penulisan storage (SSTORE)
~5.000-20.000 CU
Akses dingin vs hangat
Operasi Precompile
ecrecover
~3.000-5.000 CU
SHA-256
~1.000 CU
BN254 ecAdd
~10.000 CU
BN254 ecMul
~40.000 CU
BN254 ecPairing
~200.000+ CU
Teknik Optimisasi
1. Gunakan Yul untuk Jalur Panas
Optimizer Solidity menghasilkan kode yang cukup baik, tetapi Yul (inline assembly) dapat mengurangi CU secara signifikan untuk operasi kritis:
2. Cache Derivasi PDA
Derivasi PDA melalui find_program_address mahal. Simpan PDA yang telah diturunkan di storage kontrak, bukan menghitungnya pada setiap panggilan:
3. Hardcode ID Program yang Diketahui
Jangan memuat ID program dari storage — gunakan konstanta:
4. Minimalkan Jumlah Akun
Setiap akun dalam transaksi Solana menambah overhead CU. Kurangi jumlah akun dengan:
Mengelompokkan operasi yang berbagi akun
Menggunakan lebih sedikit akun perantara
Menghindari pemeriksaan pembuatan ATA yang redundan
5. Gunakan Pengaturan Optimizer
Bangun dengan npx hardhat compile --build-profile production.
Mengukur Konsumsi CU
Gunakan eth_estimateGas untuk mengukur CU sebelum mengirim:
Atau melalui ethers.js:
Apa Selanjutnya
Kendala — daftar lengkap batasan dan batas-batas
Terakhir diperbarui
Apakah ini membantu?