Довідник системних викликів

Підсумок

Програми взаємодіють із середовищем виконання через системні виклики, що охоплюють логування, хешування, криптографію, 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?

Керується

© 2026 Фонд Solana.
Всі права захищені.
Залишайтеся на зв'язку