Referencia de syscall

Resumen

Los programas interactúan con el runtime a través de syscalls que cubren logging, hashing, criptografía, CPI, sysvars, operaciones de memoria y más. Cada una deduce unidades de cómputo del presupuesto compartido de la transacción.

Syscalls

Los programas interactúan con el runtime a través de syscalls registradas en create_program_runtime_environment_v1(). Cada syscall deduce unidades de cómputo del presupuesto de cómputo de la transacción.

Costos de syscall

Las constantes de costo base de unidades de cómputo de cada syscall se definen en SVMTransactionExecutionCost. Algunas syscalls combinan estas constantes en fórmulas más complejas en su implementación (por ejemplo, escalando con el tamaño de entrada o añadiendo sobrecarga de syscall_base_cost). Consulta los enlaces de código fuente de cada syscall a continuación para los cálculos exactos de costo.

Syscalls disponibles

El conjunto completo de syscalls disponibles para programas sBPF, tal como están registradas en create_program_runtime_environment_v1(). Las syscalls protegidas por features solo están disponibles cuando la feature correspondiente está activa en el clúster.

Flujo de control

SyscallDescripciónCódigo fuente
abortDetiene el programa inmediatamente. Insertado por LLVM para condiciones insostenibles; no está destinado para uso explícito.SyscallAbort
sol_panic_Detiene el programa con un nombre de archivo, línea y número de columna para diagnósticos.SyscallPanic

Logging

SyscallDescripciónCódigo fuente
sol_log_Registra un mensaje de cadena UTF-8 en el log del programa.SyscallLog
sol_log_64_Registra cinco valores u64 como hexadecimal en el log del programa.SyscallLogU64
sol_log_pubkeyRegistra un Pubkey como cadena base58 en el log del programa.SyscallLogPubkey
sol_log_compute_units_Registra las unidades de cómputo restantes en el log del programa.SyscallLogBpfComputeUnits
sol_log_dataRegistra slices de bytes arbitrarios como datos codificados en base64.SyscallLogData

PDA

SyscallDescripciónFuente
sol_create_program_addressDeriva una dirección de programa a partir de semillas y un ID de programa. Devuelve 1 si la dirección derivada está en la curva Ed25519 (PDA inválido).SyscallCreateProgramAddress
sol_try_find_program_addressEncuentra un PDA válido iterando semillas bump desde 255 hasta 1. Devuelve la dirección y el bump.SyscallTryFindProgramAddress

Hashing

SyscallDescripciónFuente
sol_sha256Calcula un hash SHA-256 sobre uno o más segmentos de bytes.SyscallHash<Sha256Hasher>
sol_keccak256Calcula un hash Keccak-256 sobre uno o más segmentos de bytes.SyscallHash<Keccak256Hasher>
sol_blake3Calcula un hash Blake3 sobre uno o más segmentos de bytes. Requiere activación de característica.SyscallHash<Blake3Hasher>
sol_poseidonCalcula un hash Poseidon sobre entradas. Requiere activación de característica.SyscallPoseidon

Criptografía

SyscallDescripciónFuente
sol_secp256k1_recoverRecupera una clave pública secp256k1 a partir de un hash de mensaje firmado y un ID de recuperación.SyscallSecp256k1Recover
sol_curve_validate_pointValida que un array de bytes sea un punto válido en Curve25519 (Edwards o Ristretto). Requiere activación de característica.SyscallCurvePointValidation
sol_curve_group_opRealiza operaciones de grupo Curve25519 (suma, resta, multiplicación) en puntos Edwards o Ristretto. Requiere activación de característica.SyscallCurveGroupOps
sol_curve_multiscalar_mulRealiza multiplicación multi-escalar en puntos Curve25519 Edwards o Ristretto. Requiere activación de característica.SyscallCurveMultiscalarMultiplication
sol_alt_bn128_group_opRealiza operaciones de grupo alt_bn128 (BN254): suma G1, multiplicación G1 y verificación de emparejamiento. Requiere activación de característica.SyscallAltBn128
sol_alt_bn128_compressionComprime y descomprime puntos G1 y G2 de alt_bn128. Requiere activación de característica.SyscallAltBn128Compression
sol_big_mod_expCalcula exponenciación modular de enteros grandes (base^exp mod modulus). Requiere activación de característica.SyscallBigModExp

CPI

SyscallDescripciónFuente
sol_invoke_signed_rustInvoca una instrucción entre programas desde un programa Rust. Serializa la instrucción, cuentas y semillas de firmante usando el ABI de Rust.SyscallInvokeSignedRust
sol_invoke_signed_cInvoca una instrucción entre programas desde un programa C. Usa el ABI SolInstruction de C para la serialización.SyscallInvokeSignedC

Sysvars

SyscallDescripciónFuente
sol_get_clock_sysvarEscribe el sysvar Clock en un búfer proporcionado por el programa.SyscallGetClockSysvar
sol_get_epoch_schedule_sysvarEscribe el sysvar EpochSchedule en un búfer proporcionado por el programa.SyscallGetEpochScheduleSysvar
sol_get_rent_sysvarEscribe el sysvar Rent en un búfer proporcionado por el programa.SyscallGetRentSysvar
sol_get_epoch_rewards_sysvarEscribe el sysvar EpochRewards en un búfer proporcionado por el programa.SyscallGetEpochRewardsSysvar
sol_get_last_restart_slotEscribe el sysvar LastRestartSlot en un búfer proporcionado por el programa. Controlado por feature gate.SyscallGetLastRestartSlotSysvar
sol_get_fees_sysvarEscribe el sysvar Fees obsoleto en un búfer proporcionado por el programa. Controlado por feature gate (obsoleto).SyscallGetFeesSysvar
sol_get_sysvarAcceso genérico a sysvar: lee un slice de bytes de cualquier sysvar en caché por su pubkey, offset y longitud (SIMD-0127). Controlado por feature gate.SyscallGetSysvar

Operaciones de memoria

SyscallDescripciónFuente
sol_memcpy_Copia n bytes desde el origen al destino. Aborta si las regiones se superponen en el espacio de direcciones de la VM.SyscallMemcpy
sol_memmove_Copia n bytes desde el origen al destino, manejando correctamente las regiones superpuestas.SyscallMemmove
sol_memcmp_Compara n bytes de dos regiones de memoria. Escribe el resultado (comparación del primer byte diferente) en una dirección de resultado.SyscallMemcmp
sol_memset_Rellena n bytes de una región de memoria con un valor de byte dado.SyscallMemset

Datos del programa

SyscallDescripciónFuente
sol_set_return_dataEstablece datos de retorno (máx. 1.024 bytes) para la instrucción actual. Legible por el llamador después de que el CPI retorna.SyscallSetReturnData
sol_get_return_dataLee los datos de retorno establecidos por el CPI más reciente. Retorna la longitud de los datos y el ID del programa que los estableció.SyscallGetReturnData
sol_get_processed_sibling_instructionRecupera una instrucción hermana ejecutada previamente a la misma altura de pila (por índice inverso). Retorna ID del programa, datos y metadatos de cuenta.SyscallGetProcessedSiblingInstruction
sol_get_stack_heightRetorna la altura actual de la pila de llamadas. Altura 1 = instrucción de nivel superior; cada CPI incrementa en 1.SyscallGetStackHeight

Cómputo

SyscallDescripciónFuente
sol_remaining_compute_unitsRetorna el número de unidades de cómputo restantes en el presupuesto de la transacción. Controlado por feature gate.SyscallRemainingComputeUnits

Stake de epoch

SyscallDescripciónFuente
sol_get_epoch_stakeRetorna el stake total del clúster (puntero nulo) o el stake delegado de una cuenta de voto específica para el epoch actual (SIMD-0133). Controlado por feature gate.SyscallGetEpochStake

Asignación de memoria

SyscallDescripciónFuente
sol_alloc_free_Asignador bump heredado para asignación dinámica de memoria. Deshabilitado para nuevos despliegues; solo disponible para programas desplegados antes del feature gate.SyscallAllocFree

Is this page helpful?

Tabla de Contenidos

Editar Página

Gestionado por

© 2026 Fundación Solana.
Todos los derechos reservados.
Conéctate