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
| Syscall | Mô tả | Nguồn |
|---|---|---|
abort | Dừ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
| Syscall | Mô 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_pubkey | Ghi 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_data | Ghi các byte slices tùy ý dưới dạng dữ liệu được mã hóa base64. | SyscallLogData |
PDA
| Syscall | Mô tả | Nguồn |
|---|---|---|
sol_create_program_address | Tạ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_address | Tì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
| Syscall | Mô tả | Nguồn |
|---|---|---|
sol_sha256 | Tính toán hash SHA-256 trên một hoặc nhiều byte slice. | SyscallHash<Sha256Hasher> |
sol_keccak256 | Tính toán hash Keccak-256 trên một hoặc nhiều byte slice. | SyscallHash<Keccak256Hasher> |
sol_blake3 | Tính toán hash Blake3 trên một hoặc nhiều byte slice. Yêu cầu feature gate. | SyscallHash<Blake3Hasher> |
sol_poseidon | Tính toán hash Poseidon trên các đầu vào. Yêu cầu feature gate. | SyscallPoseidon |
Mã hóa
| Syscall | Mô tả | Nguồn |
|---|---|---|
sol_secp256k1_recover | Khôi phục public key secp256k1 từ hash thông điệp đã ký và recovery ID. | SyscallSecp256k1Recover |
sol_curve_validate_point | Xá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_op | Thự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_mul | Thự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_op | Thự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_compression | Né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_exp | Tí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
| Syscall | Mô tả | Nguồn |
|---|---|---|
sol_invoke_signed_rust | Gọ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_c | Gọ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
| Syscall | Mô tả | Nguồn |
|---|---|---|
sol_get_clock_sysvar | Ghi Clock sysvar vào bộ đệm do chương trình cung cấp. | SyscallGetClockSysvar |
sol_get_epoch_schedule_sysvar | Ghi EpochSchedule sysvar vào bộ đệm do chương trình cung cấp. | SyscallGetEpochScheduleSysvar |
sol_get_rent_sysvar | Ghi Rent sysvar vào bộ đệm do chương trình cung cấp. | SyscallGetRentSysvar |
sol_get_epoch_rewards_sysvar | Ghi EpochRewards sysvar vào bộ đệm do chương trình cung cấp. | SyscallGetEpochRewardsSysvar |
sol_get_last_restart_slot | Ghi 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_sysvar | Ghi 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_sysvar | Truy 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ớ
| Syscall | Mô 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
| Syscall | Mô 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_instruction | Truy 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_height | Trả 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
| Syscall | Mô tả | Nguồn |
|---|---|---|
sol_remaining_compute_units | Trả 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
| Syscall | Mô tả | Nguồn |
|---|---|---|
sol_get_epoch_stake | Trả 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ớ
| Syscall | Mô 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?