Ringkasan
Program berinteraksi dengan runtime melalui syscall yang mencakup logging, hashing, kriptografi, CPI, sysvars, operasi memori, dan lainnya. Setiap syscall mengurangi compute unit dari budget bersama transaksi.
Syscall
Program berinteraksi dengan runtime melalui syscall yang terdaftar di
create_program_runtime_environment_v1().
Setiap syscall mengurangi compute unit dari compute budget transaksi.
Biaya syscall
Konstanta biaya compute unit dasar setiap syscall didefinisikan di
SVMTransactionExecutionCost.
Beberapa syscall menggabungkan konstanta ini menjadi formula yang lebih kompleks
dalam implementasinya (misalnya, scaling dengan ukuran input atau menambahkan
overhead syscall_base_cost). Lihat link source syscall individual di bawah
untuk kalkulasi biaya yang tepat.
Syscall yang tersedia
Set lengkap syscall yang tersedia untuk program sBPF, sebagaimana terdaftar di
create_program_runtime_environment_v1().
Syscall yang dibatasi fitur hanya tersedia ketika fitur yang sesuai aktif di
cluster.
Control flow
| Syscall | Deskripsi | Source |
|---|---|---|
abort | Menghentikan program secara langsung. Disisipkan oleh LLVM untuk kondisi yang tidak dapat dipertahankan; tidak dimaksudkan untuk penggunaan eksplisit. | SyscallAbort |
sol_panic_ | Menghentikan program dengan nama file, baris, dan nomor kolom untuk diagnostik. | SyscallPanic |
Logging
| Syscall | Deskripsi | Source |
|---|---|---|
sol_log_ | Mencatat pesan string UTF-8 ke program log. | SyscallLog |
sol_log_64_ | Mencatat lima nilai u64 sebagai hex ke program log. | SyscallLogU64 |
sol_log_pubkey | Mencatat Pubkey sebagai string base58 ke program log. | SyscallLogPubkey |
sol_log_compute_units_ | Mencatat sisa compute unit ke program log. | SyscallLogBpfComputeUnits |
sol_log_data | Mencatat byte slice arbitrer sebagai data yang di-encode base64. | SyscallLogData |
PDA
| Syscall | Deskripsi | Sumber |
|---|---|---|
sol_create_program_address | Menurunkan alamat program dari seed dan ID program. Mengembalikan 1 jika alamat yang diturunkan berada pada kurva Ed25519 (PDA tidak valid). | SyscallCreateProgramAddress |
sol_try_find_program_address | Menemukan PDA yang valid dengan melakukan iterasi bump seed dari 255 hingga 1. Mengembalikan alamat dan bump. | SyscallTryFindProgramAddress |
Hashing
| Syscall | Deskripsi | Sumber |
|---|---|---|
sol_sha256 | Menghitung hash SHA-256 pada satu atau lebih slice byte. | SyscallHash<Sha256Hasher> |
sol_keccak256 | Menghitung hash Keccak-256 pada satu atau lebih slice byte. | SyscallHash<Keccak256Hasher> |
sol_blake3 | Menghitung hash Blake3 pada satu atau lebih slice byte. Dibatasi fitur. | SyscallHash<Blake3Hasher> |
sol_poseidon | Menghitung hash Poseidon pada input. Dibatasi fitur. | SyscallPoseidon |
Kriptografi
| Syscall | Deskripsi | Sumber |
|---|---|---|
sol_secp256k1_recover | Memulihkan kunci publik secp256k1 dari hash pesan yang ditandatangani dan ID pemulihan. | SyscallSecp256k1Recover |
sol_curve_validate_point | Memvalidasi bahwa array byte adalah titik yang valid pada Curve25519 (Edwards atau Ristretto). Dibatasi fitur. | SyscallCurvePointValidation |
sol_curve_group_op | Melakukan operasi grup Curve25519 (tambah, kurang, kali) pada titik Edwards atau Ristretto. Dibatasi fitur. | SyscallCurveGroupOps |
sol_curve_multiscalar_mul | Melakukan perkalian multi-skalar pada titik Curve25519 Edwards atau Ristretto. Dibatasi fitur. | SyscallCurveMultiscalarMultiplication |
sol_alt_bn128_group_op | Melakukan operasi grup alt_bn128 (BN254): penambahan G1, perkalian G1, dan pemeriksaan pairing. Dibatasi fitur. | SyscallAltBn128 |
sol_alt_bn128_compression | Mengompresi dan mendekompresi titik G1 dan G2 alt_bn128. Dibatasi fitur. | SyscallAltBn128Compression |
sol_big_mod_exp | Menghitung eksponensiasi modular bilangan bulat besar (base^exp mod modulus). Dibatasi fitur. | SyscallBigModExp |
CPI
| Syscall | Deskripsi | Sumber |
|---|---|---|
sol_invoke_signed_rust | Memanggil instruksi cross-program dari program Rust. Menserialisasi instruksi, akun, dan signer seeds menggunakan Rust ABI. | SyscallInvokeSignedRust |
sol_invoke_signed_c | Memanggil instruksi cross-program dari program C. Menggunakan C SolInstruction ABI untuk serialisasi. | SyscallInvokeSignedC |
Sysvars
| Syscall | Deskripsi | Sumber |
|---|---|---|
sol_get_clock_sysvar | Menulis sysvar Clock ke buffer yang disediakan program. | SyscallGetClockSysvar |
sol_get_epoch_schedule_sysvar | Menulis sysvar EpochSchedule ke buffer yang disediakan program. | SyscallGetEpochScheduleSysvar |
sol_get_rent_sysvar | Menulis sysvar Rent ke buffer yang disediakan program. | SyscallGetRentSysvar |
sol_get_epoch_rewards_sysvar | Menulis sysvar EpochRewards ke buffer yang disediakan program. | SyscallGetEpochRewardsSysvar |
sol_get_last_restart_slot | Menulis sysvar LastRestartSlot ke buffer yang disediakan program. Dibatasi fitur. | SyscallGetLastRestartSlotSysvar |
sol_get_fees_sysvar | Menulis sysvar Fees yang sudah tidak digunakan ke buffer yang disediakan program. Dibatasi fitur (deprecated). | SyscallGetFeesSysvar |
sol_get_sysvar | Akses sysvar generik: membaca byte slice dari sysvar yang di-cache berdasarkan pubkey, offset, dan panjangnya (SIMD-0127). Dibatasi fitur. | SyscallGetSysvar |
Operasi memori
| Syscall | Deskripsi | Sumber |
|---|---|---|
sol_memcpy_ | Menyalin n byte dari sumber ke tujuan. Membatalkan jika region tumpang tindih dalam ruang alamat VM. | SyscallMemcpy |
sol_memmove_ | Menyalin n byte dari sumber ke tujuan, menangani region yang tumpang tindih dengan benar. | SyscallMemmove |
sol_memcmp_ | Membandingkan n byte dari dua region memori. Menulis hasil (perbandingan byte berbeda pertama) ke alamat hasil. | SyscallMemcmp |
sol_memset_ | Mengisi n byte dari region memori dengan nilai byte tertentu. | SyscallMemset |
Data program
| Syscall | Deskripsi | Sumber |
|---|---|---|
sol_set_return_data | Menetapkan data pengembalian (maksimal 1.024 byte) untuk instruksi saat ini. Dapat dibaca oleh pemanggil setelah CPI kembali. | SyscallSetReturnData |
sol_get_return_data | Membaca data pengembalian yang ditetapkan oleh CPI terbaru. Mengembalikan panjang data dan ID program yang menetapkannya. | SyscallGetReturnData |
sol_get_processed_sibling_instruction | Mengambil instruksi sibling yang sebelumnya dieksekusi pada tingkat stack yang sama (berdasarkan indeks terbalik). Mengembalikan ID program, data, dan meta akun. | SyscallGetProcessedSiblingInstruction |
sol_get_stack_height | Mengembalikan tinggi stack panggilan saat ini. Tinggi 1 = instruksi tingkat atas; setiap CPI bertambah 1. | SyscallGetStackHeight |
Komputasi
| Syscall | Deskripsi | Sumber |
|---|---|---|
sol_remaining_compute_units | Mengembalikan jumlah unit komputasi yang tersisa dalam anggaran transaksi. Dibatasi fitur. | SyscallRemainingComputeUnits |
Stake epoch
| Syscall | Deskripsi | Sumber |
|---|---|---|
sol_get_epoch_stake | Mengembalikan total stake cluster (pointer null) atau stake yang didelegasikan akun vote tertentu untuk epoch saat ini (SIMD-0133). Dibatasi fitur. | SyscallGetEpochStake |
Alokasi memori
| Syscall | Deskripsi | Sumber |
|---|---|---|
sol_alloc_free_ | Bump allocator lama untuk alokasi memori dinamis. Dinonaktifkan untuk deployment baru; hanya tersedia untuk program yang di-deploy sebelum feature gate. | SyscallAllocFree |
Is this page helpful?