Référence des syscalls

Résumé

Les programmes interagissent avec le runtime via des syscalls couvrant la journalisation, le hachage, la cryptographie, CPI, les sysvars, les opérations mémoire, et plus encore. Chacun déduit des unités de calcul du budget partagé de la transaction.

Syscalls

Les programmes interagissent avec le runtime via des syscalls enregistrés dans create_program_runtime_environment_v1(). Chaque syscall déduit des unités de calcul du budget de calcul de la transaction.

Coûts des syscalls

Les constantes de coût de base en unités de calcul de chaque syscall sont définies dans SVMTransactionExecutionCost. Certains syscalls combinent ces constantes en formules plus complexes dans leur implémentation (par exemple, mise à l'échelle selon la taille d'entrée ou ajout de surcharge syscall_base_cost). Consultez les liens sources des syscalls individuels ci-dessous pour les calculs de coût exacts.

Syscalls disponibles

L'ensemble complet des syscalls disponibles pour les programmes sBPF, tel qu'enregistré dans create_program_runtime_environment_v1(). Les syscalls conditionnés par des fonctionnalités ne sont disponibles que lorsque la fonctionnalité correspondante est active sur le cluster.

Flux de contrôle

SyscallDescriptionSource
abortArrête immédiatement le programme. Inséré par LLVM pour des conditions intenables ; non destiné à un usage explicite.SyscallAbort
sol_panic_Arrête le programme avec un nom de fichier, une ligne et un numéro de colonne pour le diagnostic.SyscallPanic

Journalisation

SyscallDescriptionSource
sol_log_Journalise un message de chaîne UTF-8 dans le journal du programme.SyscallLog
sol_log_64_Journalise cinq valeurs u64 en hexadécimal dans le journal du programme.SyscallLogU64
sol_log_pubkeyJournalise une Pubkey sous forme de chaîne base58 dans le journal du programme.SyscallLogPubkey
sol_log_compute_units_Journalise les unités de calcul restantes dans le journal du programme.SyscallLogBpfComputeUnits
sol_log_dataJournalise des tranches d'octets arbitraires sous forme de données encodées en base64.SyscallLogData

PDA

SyscallDescriptionSource
sol_create_program_addressDérive une adresse de programme à partir de seeds et d'un ID de programme. Retourne 1 si l'adresse dérivée est sur la courbe Ed25519 (PDA invalide).SyscallCreateProgramAddress
sol_try_find_program_addressTrouve un PDA valide en itérant les bump seeds de 255 à 1. Retourne l'adresse et le bump.SyscallTryFindProgramAddress

Hachage

SyscallDescriptionSource
sol_sha256Calcule un hash SHA-256 sur une ou plusieurs tranches d'octets.SyscallHash<Sha256Hasher>
sol_keccak256Calcule un hash Keccak-256 sur une ou plusieurs tranches d'octets.SyscallHash<Keccak256Hasher>
sol_blake3Calcule un hash Blake3 sur une ou plusieurs tranches d'octets. Nécessite une feature.SyscallHash<Blake3Hasher>
sol_poseidonCalcule un hash Poseidon sur les entrées. Nécessite une feature.SyscallPoseidon

Cryptographie

SyscallDescriptionSource
sol_secp256k1_recoverRécupère une clé publique secp256k1 à partir d'un hash de message signé et d'un ID de récupération.SyscallSecp256k1Recover
sol_curve_validate_pointValide qu'un tableau d'octets est un point valide sur Curve25519 (Edwards ou Ristretto). Nécessite une feature.SyscallCurvePointValidation
sol_curve_group_opEffectue des opérations de groupe Curve25519 (addition, soustraction, multiplication) sur des points Edwards ou Ristretto. Nécessite une feature.SyscallCurveGroupOps
sol_curve_multiscalar_mulEffectue une multiplication multi-scalaire sur des points Curve25519 Edwards ou Ristretto. Nécessite une feature.SyscallCurveMultiscalarMultiplication
sol_alt_bn128_group_opEffectue des opérations de groupe alt_bn128 (BN254) : addition G1, multiplication G1 et vérification de pairage. Nécessite une feature.SyscallAltBn128
sol_alt_bn128_compressionCompresse et décompresse les points G1 et G2 alt_bn128. Nécessite une feature.SyscallAltBn128Compression
sol_big_mod_expCalcule l'exponentiation modulaire de grands entiers (base^exp mod modulus). Nécessite une feature.SyscallBigModExp

CPI

SyscallDescriptionSource
sol_invoke_signed_rustInvoque une instruction inter-programmes depuis un programme Rust. Sérialise l'instruction, les comptes et les graines de signataire en utilisant l'ABI Rust.SyscallInvokeSignedRust
sol_invoke_signed_cInvoque une instruction inter-programmes depuis un programme C. Utilise l'ABI C SolInstruction pour la sérialisation.SyscallInvokeSignedC

Sysvars

SyscallDescriptionSource
sol_get_clock_sysvarÉcrit la sysvar Clock dans un tampon fourni par le programme.SyscallGetClockSysvar
sol_get_epoch_schedule_sysvarÉcrit la sysvar EpochSchedule dans un tampon fourni par le programme.SyscallGetEpochScheduleSysvar
sol_get_rent_sysvarÉcrit la sysvar Rent dans un tampon fourni par le programme.SyscallGetRentSysvar
sol_get_epoch_rewards_sysvarÉcrit la sysvar EpochRewards dans un tampon fourni par le programme.SyscallGetEpochRewardsSysvar
sol_get_last_restart_slotÉcrit la sysvar LastRestartSlot dans un tampon fourni par le programme. Contrôlé par feature gate.SyscallGetLastRestartSlotSysvar
sol_get_fees_sysvarÉcrit la sysvar Fees obsolète dans un tampon fourni par le programme. Contrôlé par feature gate (obsolète).SyscallGetFeesSysvar
sol_get_sysvarAccès générique aux sysvars : lit une tranche d'octets depuis n'importe quelle sysvar en cache par sa pubkey, son offset et sa longueur (SIMD-0127). Contrôlé par feature gate.SyscallGetSysvar

Opérations mémoire

SyscallDescriptionSource
sol_memcpy_Copie n octets de la source vers la destination. Interrompt si les régions se chevauchent dans l'espace d'adressage de la VM.SyscallMemcpy
sol_memmove_Copie n octets de la source vers la destination, en gérant correctement les régions qui se chevauchent.SyscallMemmove
sol_memcmp_Compare n octets de deux régions mémoire. Écrit le résultat (comparaison du premier octet différent) à une adresse de résultat.SyscallMemcmp
sol_memset_Remplit n octets d'une région mémoire avec une valeur d'octet donnée.SyscallMemset

Données du programme

SyscallDescriptionSource
sol_set_return_dataDéfinit les données de retour (max 1 024 octets) pour l'instruction actuelle. Lisibles par l'appelant après le retour du CPI.SyscallSetReturnData
sol_get_return_dataLit les données de retour définies par le CPI le plus récent. Renvoie la longueur des données et l'ID du programme qui les a définies.SyscallGetReturnData
sol_get_processed_sibling_instructionRécupère une instruction sœur précédemment exécutée à la même hauteur de pile (par index inversé). Renvoie l'ID du programme, les données et les métadonnées de compte.SyscallGetProcessedSiblingInstruction
sol_get_stack_heightRenvoie la hauteur actuelle de la pile d'appels. Hauteur 1 = instruction de niveau supérieur ; chaque CPI incrémente de 1.SyscallGetStackHeight

Calcul

SyscallDescriptionSource
sol_remaining_compute_unitsRenvoie le nombre d'unités de calcul restantes dans le budget de transaction. Contrôlé par feature gate.SyscallRemainingComputeUnits

Stake d'epoch

SyscallDescriptionSource
sol_get_epoch_stakeRenvoie le stake total du cluster (pointeur nul) ou le stake délégué d'un compte de vote spécifique pour l'epoch actuelle (SIMD-0133). Contrôlé par feature gate.SyscallGetEpochStake

Allocation mémoire

SyscallDescriptionSource
sol_alloc_free_Allocateur bump legacy pour l'allocation dynamique de mémoire. Désactivé pour les nouveaux déploiements ; disponible uniquement pour les programmes déployés avant le feature gate.SyscallAllocFree

Is this page helpful?

Table des matières

Modifier la page

Géré par

© 2026 Fondation Solana.
Tous droits réservés.
Restez connecté