Tham chiếu syscall

Tóm tắt

Các chương trình tương tác với runtime thông qua các syscall bao gồm logging, hashing, mã hóa, CPI, sysvars, thao tác bộ nhớ và nhiều hơn nữa. Mỗi syscall trừ compute units từ ngân sách chung của giao dịch.

Syscalls

Các chương trình tương tác với runtime thông qua các syscall được đăng ký trong create_program_runtime_environment_v1(). Mỗi syscall trừ compute units từ ngân sách compute của giao dịch.

Chi phí syscall

Các hằng số chi phí compute unit cơ bản của mỗi syscall được định nghĩa trong SVMTransactionExecutionCost. Một số syscall kết hợp các hằng số này thành các công thức phức tạp hơn trong việc triển khai của chúng (ví dụ: tỷ lệ theo kích thước đầu vào hoặc thêm chi phí syscall_base_cost). Xem các liên kết mã nguồn syscall riêng lẻ bên dưới để biết cách tính chi phí chính xác.

Các syscall có sẵn

Tập hợp đầy đủ các syscall có sẵn cho các chương trình sBPF, như được đăng ký trong create_program_runtime_environment_v1(). Các syscall được kiểm soát bởi feature chỉ khả dụng khi feature tương ứng được kích hoạt trên cluster.

Luồng điều khiển

SyscallMô tảNguồn
abortDừng chương trình ngay lập tức. Được chèn bởi LLVM cho các điều kiện không thể duy trì; không dành cho việc sử dụng rõ ràng.SyscallAbort
sol_panic_Dừng chương trình với tên file, số dòng và số cột để chẩn đoán.SyscallPanic

Logging

SyscallMô tảNguồn
sol_log_Ghi một chuỗi thông điệp UTF-8 vào program log.SyscallLog
sol_log_64_Ghi năm giá trị u64 dưới dạng hex vào program log.SyscallLogU64
sol_log_pubkeyGhi một Pubkey dưới dạng chuỗi base58 vào program log.SyscallLogPubkey
sol_log_compute_units_Ghi số compute units còn lại vào program log.SyscallLogBpfComputeUnits
sol_log_dataGhi các byte slices tùy ý dưới dạng dữ liệu được mã hóa base64.SyscallLogData

PDA

SyscallMô tảNguồn
sol_create_program_addressTạo địa chỉ chương trình từ các seed và program ID. Trả về 1 nếu địa chỉ được tạo nằm trên đường cong Ed25519 (PDA không hợp lệ).SyscallCreateProgramAddress
sol_try_find_program_addressTìm PDA hợp lệ bằng cách lặp các bump seed từ 255 xuống 1. Trả về địa chỉ và bump.SyscallTryFindProgramAddress

Hashing

SyscallMô tảNguồn
sol_sha256Tính toán hash SHA-256 trên một hoặc nhiều byte slice.SyscallHash<Sha256Hasher>
sol_keccak256Tính toán hash Keccak-256 trên một hoặc nhiều byte slice.SyscallHash<Keccak256Hasher>
sol_blake3Tính toán hash Blake3 trên một hoặc nhiều byte slice. Yêu cầu feature gate.SyscallHash<Blake3Hasher>
sol_poseidonTính toán hash Poseidon trên các đầu vào. Yêu cầu feature gate.SyscallPoseidon

Mã hóa

SyscallMô tảNguồn
sol_secp256k1_recoverKhôi phục public key secp256k1 từ hash thông điệp đã ký và recovery ID.SyscallSecp256k1Recover
sol_curve_validate_pointXác thực rằng một mảng byte là điểm hợp lệ trên Curve25519 (Edwards hoặc Ristretto). Yêu cầu feature gate.SyscallCurvePointValidation
sol_curve_group_opThực hiện các phép toán nhóm Curve25519 (cộng, trừ, nhân) trên các điểm Edwards hoặc Ristretto. Yêu cầu feature gate.SyscallCurveGroupOps
sol_curve_multiscalar_mulThực hiện phép nhân đa vô hướng trên các điểm Curve25519 Edwards hoặc Ristretto. Yêu cầu feature gate.SyscallCurveMultiscalarMultiplication
sol_alt_bn128_group_opThực hiện các phép toán nhóm alt_bn128 (BN254): phép cộng G1, phép nhân G1 và kiểm tra pairing. Yêu cầu feature gate.SyscallAltBn128
sol_alt_bn128_compressionNén và giải nén các điểm alt_bn128 G1 và G2. Yêu cầu feature gate.SyscallAltBn128Compression
sol_big_mod_expTính toán lũy thừa modular số nguyên lớn (base^exp mod modulus). Yêu cầu feature gate.SyscallBigModExp

CPI

SyscallMô tảNguồn
sol_invoke_signed_rustGọi một lệnh cross-program từ chương trình Rust. Tuần tự hóa lệnh, tài khoản và signer seeds sử dụng Rust ABI.SyscallInvokeSignedRust
sol_invoke_signed_cGọi một lệnh cross-program từ chương trình C. Sử dụng C SolInstruction ABI để tuần tự hóa.SyscallInvokeSignedC

Sysvars

SyscallMô tảNguồn
sol_get_clock_sysvarGhi Clock sysvar vào bộ đệm do chương trình cung cấp.SyscallGetClockSysvar
sol_get_epoch_schedule_sysvarGhi EpochSchedule sysvar vào bộ đệm do chương trình cung cấp.SyscallGetEpochScheduleSysvar
sol_get_rent_sysvarGhi Rent sysvar vào bộ đệm do chương trình cung cấp.SyscallGetRentSysvar
sol_get_epoch_rewards_sysvarGhi EpochRewards sysvar vào bộ đệm do chương trình cung cấp.SyscallGetEpochRewardsSysvar
sol_get_last_restart_slotGhi LastRestartSlot sysvar vào bộ đệm do chương trình cung cấp. Được kiểm soát bởi feature gate.SyscallGetLastRestartSlotSysvar
sol_get_fees_sysvarGhi Fees sysvar đã lỗi thời vào bộ đệm do chương trình cung cấp. Được kiểm soát bởi feature gate (đã lỗi thời).SyscallGetFeesSysvar
sol_get_sysvarTruy cập sysvar tổng quát: đọc một byte slice từ bất kỳ sysvar được cache nào theo pubkey, offset và length của nó (SIMD-0127). Được kiểm soát bởi feature gate.SyscallGetSysvar

Thao tác bộ nhớ

SyscallMô tảNguồn
sol_memcpy_Sao chép n byte từ nguồn đến đích. Hủy bỏ nếu các vùng chồng lấn trong không gian địa chỉ VM.SyscallMemcpy
sol_memmove_Sao chép n byte từ nguồn đến đích, xử lý đúng các vùng chồng lấn.SyscallMemmove
sol_memcmp_So sánh n byte của hai vùng bộ nhớ. Ghi kết quả (so sánh byte khác biệt đầu tiên) vào địa chỉ kết quả.SyscallMemcmp
sol_memset_Điền n byte của một vùng bộ nhớ với một giá trị byte cho trước.SyscallMemset

Dữ liệu chương trình

SyscallMô tảNguồn
sol_set_return_dataĐặt dữ liệu trả về (tối đa 1.024 byte) cho lệnh hiện tại. Có thể đọc được bởi caller sau khi CPI trả về.SyscallSetReturnData
sol_get_return_dataĐọc dữ liệu trả về được đặt bởi CPI gần nhất. Trả về độ dài dữ liệu và program ID đã đặt nó.SyscallGetReturnData
sol_get_processed_sibling_instructionTruy xuất lệnh sibling đã thực thi trước đó ở cùng độ cao stack (theo chỉ số ngược). Trả về program ID, dữ liệu và account metas.SyscallGetProcessedSiblingInstruction
sol_get_stack_heightTrả về độ cao call stack hiện tại. Độ cao 1 = lệnh cấp cao nhất; mỗi CPI tăng thêm 1.SyscallGetStackHeight

Compute

SyscallMô tảNguồn
sol_remaining_compute_unitsTrả về số lượng compute units còn lại trong ngân sách giao dịch. Được kiểm soát bởi feature gate.SyscallRemainingComputeUnits

Epoch stake

SyscallMô tảNguồn
sol_get_epoch_stakeTrả về tổng stake của cluster (null pointer) hoặc delegated stake của một vote account cụ thể cho epoch hiện tại (SIMD-0133). Được kiểm soát bởi feature gate.SyscallGetEpochStake

Cấp phát bộ nhớ

SyscallMô tảNguồn
sol_alloc_free_Bump allocator cũ cho cấp phát bộ nhớ động. Bị vô hiệu hóa cho các triển khai mới; chỉ khả dụng cho các chương trình được triển khai trước feature gate.SyscallAllocFree

Is this page helpful?

Mục lục

Chỉnh sửa trang

Quản lý bởi

© 2026 Solana Foundation.
Đã đăng ký bản quyền.
Kết nối