Підсумок
Програми взаємодіють із середовищем виконання через системні виклики, що охоплюють логування, хешування, криптографію, CPI, системні змінні, операції з пам'яттю та інше. Кожен вираховує обчислювальні одиниці зі спільного бюджету транзакції.
Системні виклики
Програми взаємодіють із середовищем виконання через системні виклики,
зареєстровані в
create_program_runtime_environment_v1().
Кожен системний виклик вираховує обчислювальні одиниці з бюджету обчислень
транзакції.
Вартість системних викликів
Базові константи вартості обчислювальних одиниць для кожного системного виклику
визначені в
SVMTransactionExecutionCost.
Деякі системні виклики комбінують ці константи в складніші формули у своїй
реалізації (наприклад, масштабування залежно від розміру вхідних даних або
додавання накладних витрат syscall_base_cost). Дивіться посилання на вихідний
код окремих системних викликів нижче для точних розрахунків вартості.
Доступні системні виклики
Повний набір системних викликів, доступних для програм sBPF, зареєстрованих у
create_program_runtime_environment_v1().
Системні виклики, обмежені функціональністю, доступні лише тоді, коли відповідна
функція активна в кластері.
Управління потоком виконання
| Системний виклик | Опис | Джерело |
|---|---|---|
abort | Негайно зупиняє програму. Вставляється LLVM для неприйнятних умов; не призначений для явного використання. | SyscallAbort |
sol_panic_ | Зупиняє програму з іменем файлу, номером рядка та стовпця для діагностики. | SyscallPanic |
Логування
| Системний виклик | Опис | Джерело |
|---|---|---|
sol_log_ | Записує UTF-8 рядок повідомлення в журнал програми. | SyscallLog |
sol_log_64_ | Записує п'ять значень u64 у шістнадцятковому форматі в журнал програми. | SyscallLogU64 |
sol_log_pubkey | Записує Pubkey як рядок base58 у журнал програми. | SyscallLogPubkey |
sol_log_compute_units_ | Записує залишок обчислювальних одиниць у журнал програми. | SyscallLogBpfComputeUnits |
sol_log_data | Записує довільні байтові послідовності як дані в кодуванні base64. | SyscallLogData |
PDA
| Системний виклик | Опис | Джерело |
|---|---|---|
sol_create_program_address | Виводить адресу програми з seeds та ID програми. Повертає 1, якщо виведена адреса знаходиться на кривій Ed25519 (невалідний PDA). | SyscallCreateProgramAddress |
sol_try_find_program_address | Знаходить валідний PDA шляхом ітерації bump seeds від 255 до 1. Повертає адресу та bump. | SyscallTryFindProgramAddress |
Хешування
| Системний виклик | Опис | Джерело |
|---|---|---|
sol_sha256 | Обчислює SHA-256 хеш для одного або кількох байтових фрагментів. | SyscallHash<Sha256Hasher> |
sol_keccak256 | Обчислює Keccak-256 хеш для одного або кількох байтових фрагментів. | SyscallHash<Keccak256Hasher> |
sol_blake3 | Обчислює Blake3 хеш для одного або кількох байтових фрагментів. Доступно за feature-gate. | SyscallHash<Blake3Hasher> |
sol_poseidon | Обчислює Poseidon хеш для вхідних даних. Доступно за feature-gate. | SyscallPoseidon |
Криптографія
| Системний виклик | Опис | Джерело |
|---|---|---|
sol_secp256k1_recover | Відновлює публічний ключ secp256k1 з підписаного хешу повідомлення та recovery ID. | SyscallSecp256k1Recover |
sol_curve_validate_point | Перевіряє, що байтовий масив є валідною точкою на Curve25519 (Edwards або Ristretto). Доступно за feature-gate. | SyscallCurvePointValidation |
sol_curve_group_op | Виконує групові операції Curve25519 (додавання, віднімання, множення) на точках Edwards або Ristretto. Доступно за feature-gate. | SyscallCurveGroupOps |
sol_curve_multiscalar_mul | Виконує мультискалярне множення на точках Curve25519 Edwards або Ristretto. Доступно за feature-gate. | SyscallCurveMultiscalarMultiplication |
sol_alt_bn128_group_op | Виконує групові операції alt_bn128 (BN254): додавання G1, множення G1 та перевірку pairing. Доступно за feature-gate. | SyscallAltBn128 |
sol_alt_bn128_compression | Стискає та розпаковує точки alt_bn128 G1 та G2. Доступно за feature-gate. | SyscallAltBn128Compression |
sol_big_mod_exp | Обчислює модульне піднесення до степеня великих цілих чисел (base^exp mod modulus). Доступно за feature-gate. | SyscallBigModExp |
CPI
| Системний виклик | Опис | Джерело |
|---|---|---|
sol_invoke_signed_rust | Викликає міжпрограмну інструкцію з програми на Rust. Серіалізує інструкцію, облікові записи та ключі підписантів за допомогою Rust ABI. | SyscallInvokeSignedRust |
sol_invoke_signed_c | Викликає міжпрограмну інструкцію з програми на C. Використовує C SolInstruction ABI для серіалізації. | SyscallInvokeSignedC |
Sysvars
| Системний виклик | Опис | Джерело |
|---|---|---|
sol_get_clock_sysvar | Записує sysvar Clock у буфер, наданий програмою. | SyscallGetClockSysvar |
sol_get_epoch_schedule_sysvar | Записує sysvar EpochSchedule у буфер, наданий програмою. | SyscallGetEpochScheduleSysvar |
sol_get_rent_sysvar | Записує sysvar Rent у буфер, наданий програмою. | SyscallGetRentSysvar |
sol_get_epoch_rewards_sysvar | Записує sysvar EpochRewards у буфер, наданий програмою. | SyscallGetEpochRewardsSysvar |
sol_get_last_restart_slot | Записує sysvar LastRestartSlot у буфер, наданий програмою. Контролюється функціональним прапором. | SyscallGetLastRestartSlotSysvar |
sol_get_fees_sysvar | Записує застарілий sysvar Fees у буфер, наданий програмою. Контролюється функціональним прапором (застарілий). | SyscallGetFeesSysvar |
sol_get_sysvar | Загальний доступ до sysvar: зчитує байтовий зріз з будь-якого кешованого sysvar за його pubkey, зміщенням та довжиною (SIMD-0127). Контролюється функціональним прапором. | SyscallGetSysvar |
Операції з пам'яттю
| Системний виклик | Опис | Джерело |
|---|---|---|
sol_memcpy_ | Копіює n байтів з джерела до призначення. Переривається, якщо регіони перекриваються в адресному просторі VM. | SyscallMemcpy |
sol_memmove_ | Копіює n байтів з джерела до призначення, коректно обробляючи регіони, що перекриваються. | SyscallMemmove |
sol_memcmp_ | Порівнює n байтів двох областей пам'яті. Записує результат (порівняння першого відмінного байта) за адресою результату. | SyscallMemcmp |
sol_memset_ | Заповнює n байтів області пам'яті заданим значенням байта. | SyscallMemset |
Дані програми
| Syscall | Опис | Джерело |
|---|---|---|
sol_set_return_data | Встановлює дані повернення (максимум 1 024 байти) для поточної інструкції. Доступні для читання викликачем після повернення CPI. | SyscallSetReturnData |
sol_get_return_data | Зчитує дані повернення, встановлені останнім CPI. Повертає довжину даних та ID програми, яка їх встановила. | SyscallGetReturnData |
sol_get_processed_sibling_instruction | Отримує раніше виконану споріднену інструкцію на тій самій висоті стека (за зворотним індексом). Повертає ID програми, дані та метадані акаунтів. | SyscallGetProcessedSiblingInstruction |
sol_get_stack_height | Повертає поточну висоту стека викликів. Висота 1 = інструкція верхнього рівня; кожен CPI збільшує на 1. | SyscallGetStackHeight |
Обчислення
| Syscall | Опис | Джерело |
|---|---|---|
sol_remaining_compute_units | Повертає кількість обчислювальних одиниць, що залишилися в бюджеті транзакції. Керується feature-gate. | SyscallRemainingComputeUnits |
Стейк епохи
| Syscall | Опис | Джерело |
|---|---|---|
sol_get_epoch_stake | Повертає загальний стейк кластера (нульовий вказівник) або делегований стейк конкретного акаунта голосування для поточної епохи (SIMD-0133). Керується feature-gate. | SyscallGetEpochStake |
Виділення пам'яті
| Syscall | Опис | Джерело |
|---|---|---|
sol_alloc_free_ | Застарілий bump-алокатор для динамічного виділення пам'яті. Вимкнено для нових розгортань; доступний лише для програм, розгорнутих до feature gate. | SyscallAllocFree |
Is this page helpful?