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
| Syscall | Descripción | Código fuente |
|---|---|---|
abort | Detiene 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
| Syscall | Descripción | Có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_pubkey | Registra 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_data | Registra slices de bytes arbitrarios como datos codificados en base64. | SyscallLogData |
PDA
| Syscall | Descripción | Fuente |
|---|---|---|
sol_create_program_address | Deriva 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_address | Encuentra un PDA válido iterando semillas bump desde 255 hasta 1. Devuelve la dirección y el bump. | SyscallTryFindProgramAddress |
Hashing
| Syscall | Descripción | Fuente |
|---|---|---|
sol_sha256 | Calcula un hash SHA-256 sobre uno o más segmentos de bytes. | SyscallHash<Sha256Hasher> |
sol_keccak256 | Calcula un hash Keccak-256 sobre uno o más segmentos de bytes. | SyscallHash<Keccak256Hasher> |
sol_blake3 | Calcula un hash Blake3 sobre uno o más segmentos de bytes. Requiere activación de característica. | SyscallHash<Blake3Hasher> |
sol_poseidon | Calcula un hash Poseidon sobre entradas. Requiere activación de característica. | SyscallPoseidon |
Criptografía
| Syscall | Descripción | Fuente |
|---|---|---|
sol_secp256k1_recover | Recupera una clave pública secp256k1 a partir de un hash de mensaje firmado y un ID de recuperación. | SyscallSecp256k1Recover |
sol_curve_validate_point | Valida 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_op | Realiza operaciones de grupo Curve25519 (suma, resta, multiplicación) en puntos Edwards o Ristretto. Requiere activación de característica. | SyscallCurveGroupOps |
sol_curve_multiscalar_mul | Realiza multiplicación multi-escalar en puntos Curve25519 Edwards o Ristretto. Requiere activación de característica. | SyscallCurveMultiscalarMultiplication |
sol_alt_bn128_group_op | Realiza 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_compression | Comprime y descomprime puntos G1 y G2 de alt_bn128. Requiere activación de característica. | SyscallAltBn128Compression |
sol_big_mod_exp | Calcula exponenciación modular de enteros grandes (base^exp mod modulus). Requiere activación de característica. | SyscallBigModExp |
CPI
| Syscall | Descripción | Fuente |
|---|---|---|
sol_invoke_signed_rust | Invoca 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_c | Invoca una instrucción entre programas desde un programa C. Usa el ABI SolInstruction de C para la serialización. | SyscallInvokeSignedC |
Sysvars
| Syscall | Descripción | Fuente |
|---|---|---|
sol_get_clock_sysvar | Escribe el sysvar Clock en un búfer proporcionado por el programa. | SyscallGetClockSysvar |
sol_get_epoch_schedule_sysvar | Escribe el sysvar EpochSchedule en un búfer proporcionado por el programa. | SyscallGetEpochScheduleSysvar |
sol_get_rent_sysvar | Escribe el sysvar Rent en un búfer proporcionado por el programa. | SyscallGetRentSysvar |
sol_get_epoch_rewards_sysvar | Escribe el sysvar EpochRewards en un búfer proporcionado por el programa. | SyscallGetEpochRewardsSysvar |
sol_get_last_restart_slot | Escribe el sysvar LastRestartSlot en un búfer proporcionado por el programa. Controlado por feature gate. | SyscallGetLastRestartSlotSysvar |
sol_get_fees_sysvar | Escribe el sysvar Fees obsoleto en un búfer proporcionado por el programa. Controlado por feature gate (obsoleto). | SyscallGetFeesSysvar |
sol_get_sysvar | Acceso 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
| Syscall | Descripción | Fuente |
|---|---|---|
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
| Syscall | Descripción | Fuente |
|---|---|---|
sol_set_return_data | Establece 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_data | Lee 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_instruction | Recupera 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_height | Retorna la altura actual de la pila de llamadas. Altura 1 = instrucción de nivel superior; cada CPI incrementa en 1. | SyscallGetStackHeight |
Cómputo
| Syscall | Descripción | Fuente |
|---|---|---|
sol_remaining_compute_units | Retorna el número de unidades de cómputo restantes en el presupuesto de la transacción. Controlado por feature gate. | SyscallRemainingComputeUnits |
Stake de epoch
| Syscall | Descripción | Fuente |
|---|---|---|
sol_get_epoch_stake | Retorna 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
| Syscall | Descripción | Fuente |
|---|---|---|
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?