Справочник по системным вызовам (syscall)

Кратко

Программы взаимодействуют с рантаймом через системные вызовы, охватывающие логирование, хеширование, криптографию, CPI, sysvars, операции с памятью и многое другое. Каждый из них списывает вычислительные единицы из общего бюджета транзакции.

Системные вызовы (syscalls)

Программы взаимодействуют с рантаймом через системные вызовы, зарегистрированные в 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 в лог программы в виде hex.SyscallLogU64
sol_log_pubkeyЗаписывает Pubkey как строку в формате base58 в лог программы.SyscallLogPubkey
sol_log_compute_units_Записывает оставшееся количество вычислительных единиц в лог программы.SyscallLogBpfComputeUnits
sol_log_dataЗаписывает произвольные байтовые срезы в лог программы в виде данных, закодированных в base64.SyscallLogData

PDA

Системный вызовОписаниеИсходный код
sol_create_program_addressПолучает адрес программы из сидов и идентификатора программы. Возвращает 1, если полученный адрес находится на кривой Ed25519 (некорректный PDA).SyscallCreateProgramAddress
sol_try_find_program_addressНаходит корректный PDA, перебирая bump seed от 255 до 1. Возвращает адрес и bump.SyscallTryFindProgramAddress

Хеширование

Системный вызовОписаниеИсходный код
sol_sha256Вычисляет SHA-256 хеш для одного или нескольких срезов байтов.SyscallHash<Sha256Hasher>
sol_keccak256Вычисляет Keccak-256 хеш для одного или нескольких срезов байтов.SyscallHash<Keccak256Hasher>
sol_blake3Вычисляет Blake3 хеш для одного или нескольких срезов байтов. Требует включения соответствующей функции.SyscallHash<Blake3Hasher>
sol_poseidonВычисляет Poseidon хеш по входным данным. Требует включения соответствующей функции.SyscallPoseidon

Криптография

Системный вызовОписаниеИсходный код
sol_secp256k1_recoverВосстанавливает публичный ключ secp256k1 из хеша подписанного сообщения и recovery ID.SyscallSecp256k1Recover
sol_curve_validate_pointПроверяет, что байтовый массив является корректной точкой на Curve25519 (Edwards или Ristretto). Требует включения функции.SyscallCurvePointValidation
sol_curve_group_opВыполняет групповые операции Curve25519 (сложение, вычитание, умножение) над точками Edwards или Ristretto. Требует включения функции.SyscallCurveGroupOps
sol_curve_multiscalar_mulВыполняет мультискалярное умножение над точками Curve25519 Edwards или Ristretto. Требует включения функции.SyscallCurveMultiscalarMultiplication
sol_alt_bn128_group_opВыполняет операции над группой alt_bn128 (BN254): сложение G1, умножение G1 и проверку паринга. Требует включения функции.SyscallAltBn128
sol_alt_bn128_compressionСжимает и восстанавливает точки alt_bn128 G1 и G2. Требует включения функции.SyscallAltBn128Compression
sol_big_mod_expВычисляет модульное возведение в степень больших целых чисел (base^exp mod modulus). Требует включения функции.SyscallBigModExp

CPI

Системный вызовОписаниеИсходный код
sol_invoke_signed_rustВызывает межпрограммную инструкцию из Rust-программы. Сериализует инструкцию, аккаунты и signer seeds с использованием Rust ABI.SyscallInvokeSignedRust
sol_invoke_signed_cВызывает межпрограммную инструкцию из C-программы. Для сериализации используется C SolInstruction ABI.SyscallInvokeSignedC

Сисвары

Системный вызовОписаниеИсходный код
sol_get_clock_sysvarЗаписывает сисвар Clock в предоставленный программой буфер.SyscallGetClockSysvar
sol_get_epoch_schedule_sysvarЗаписывает сисвар EpochSchedule в предоставленный программой буфер.SyscallGetEpochScheduleSysvar
sol_get_rent_sysvarЗаписывает сисвар Rent в предоставленный программой буфер.SyscallGetRentSysvar
sol_get_epoch_rewards_sysvarЗаписывает сисвар EpochRewards в предоставленный программой буфер.SyscallGetEpochRewardsSysvar
sol_get_last_restart_slotЗаписывает сисвар LastRestartSlot в предоставленный программой буфер. Доступно по фиче.SyscallGetLastRestartSlotSysvar
sol_get_fees_sysvarЗаписывает устаревший сисвар Fees в предоставленный программой буфер. Доступно по фиче (устаревшее).SyscallGetFeesSysvar
sol_get_sysvarУниверсальный доступ к сисварам: читает срез байтов из любого кэшированного сисвара по его pubkey, смещению и длине (SIMD-0127). Доступно по фиче.SyscallGetSysvar

Операции с памятью

Системный вызовОписаниеИсходный код
sol_memcpy_Копирует n байт из источника в назначение. Прерывает выполнение, если области пересекаются в адресном пространстве ВМ.SyscallMemcpy
sol_memmove_Копирует n байт из источника в назначение, корректно обрабатывая пересекающиеся области.SyscallMemmove
sol_memcmp_Сравнивает n байт двух областей памяти. Записывает результат (первое несовпадение байтов) по адресу результата.SyscallMemcmp
sol_memset_Заполняет n байт области памяти заданным байтовым значением.SyscallMemset

Данные программы

Системный вызовОписаниеИсходный код
sol_set_return_dataУстанавливает возвращаемые данные (максимум 1 024 байта) для текущей инструкции. Доступно вызывающей стороне после возврата CPI.SyscallSetReturnData
sol_get_return_dataЧитает возвращаемые данные, установленные последним CPI. Возвращает длину данных и program ID, который их установил.SyscallGetReturnData
sol_get_processed_sibling_instructionПолучает ранее выполненную соседнюю инструкцию на той же высоте стека (по обратному индексу). Возвращает program ID, данные и метаданные аккаунта.SyscallGetProcessedSiblingInstruction
sol_get_stack_heightВозвращает текущую высоту стека вызовов. Высота 1 = инструкция верхнего уровня; каждый CPI увеличивает значение на 1.SyscallGetStackHeight

Вычисления

Системный вызовОписаниеИсходный код
sol_remaining_compute_unitsВозвращает количество оставшихся вычислительных единиц в бюджете транзакции. Функция с ограничением по фиче.SyscallRemainingComputeUnits

Стейк эпохи

Системный вызовОписаниеИсходный код
sol_get_epoch_stakeВозвращает общий стейк кластера (нулевой указатель) или делегированный стейк определённого vote аккаунта за текущий epoch (SIMD-0133). Функция с ограничением по фиче.SyscallGetEpochStake

Выделение памяти

Системный вызовОписаниеИсходный код
sol_alloc_free_Устаревший bump-аллокатор для динамического выделения памяти. Отключён для новых деплоев; доступен только программам, размещённым до включения фичи.SyscallAllocFree

Is this page helpful?

Управляется

© 2026 Solana Foundation.
Все права защищены.
Связаться с нами