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
| Syscall | Description | Source |
|---|---|---|
abort | Arrê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
| Syscall | Description | Source |
|---|---|---|
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_pubkey | Journalise 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_data | Journalise des tranches d'octets arbitraires sous forme de données encodées en base64. | SyscallLogData |
PDA
| Syscall | Description | Source |
|---|---|---|
sol_create_program_address | Dé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_address | Trouve un PDA valide en itérant les bump seeds de 255 à 1. Retourne l'adresse et le bump. | SyscallTryFindProgramAddress |
Hachage
| Syscall | Description | Source |
|---|---|---|
sol_sha256 | Calcule un hash SHA-256 sur une ou plusieurs tranches d'octets. | SyscallHash<Sha256Hasher> |
sol_keccak256 | Calcule un hash Keccak-256 sur une ou plusieurs tranches d'octets. | SyscallHash<Keccak256Hasher> |
sol_blake3 | Calcule un hash Blake3 sur une ou plusieurs tranches d'octets. Nécessite une feature. | SyscallHash<Blake3Hasher> |
sol_poseidon | Calcule un hash Poseidon sur les entrées. Nécessite une feature. | SyscallPoseidon |
Cryptographie
| Syscall | Description | Source |
|---|---|---|
sol_secp256k1_recover | Ré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_point | Valide qu'un tableau d'octets est un point valide sur Curve25519 (Edwards ou Ristretto). Nécessite une feature. | SyscallCurvePointValidation |
sol_curve_group_op | Effectue des opérations de groupe Curve25519 (addition, soustraction, multiplication) sur des points Edwards ou Ristretto. Nécessite une feature. | SyscallCurveGroupOps |
sol_curve_multiscalar_mul | Effectue une multiplication multi-scalaire sur des points Curve25519 Edwards ou Ristretto. Nécessite une feature. | SyscallCurveMultiscalarMultiplication |
sol_alt_bn128_group_op | Effectue 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_compression | Compresse et décompresse les points G1 et G2 alt_bn128. Nécessite une feature. | SyscallAltBn128Compression |
sol_big_mod_exp | Calcule l'exponentiation modulaire de grands entiers (base^exp mod modulus). Nécessite une feature. | SyscallBigModExp |
CPI
| Syscall | Description | Source |
|---|---|---|
sol_invoke_signed_rust | Invoque 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_c | Invoque une instruction inter-programmes depuis un programme C. Utilise l'ABI C SolInstruction pour la sérialisation. | SyscallInvokeSignedC |
Sysvars
| Syscall | Description | Source |
|---|---|---|
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_sysvar | Accè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
| Syscall | Description | Source |
|---|---|---|
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
| Syscall | Description | Source |
|---|---|---|
sol_set_return_data | Dé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_data | Lit 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_instruction | Ré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_height | Renvoie la hauteur actuelle de la pile d'appels. Hauteur 1 = instruction de niveau supérieur ; chaque CPI incrémente de 1. | SyscallGetStackHeight |
Calcul
| Syscall | Description | Source |
|---|---|---|
sol_remaining_compute_units | Renvoie le nombre d'unités de calcul restantes dans le budget de transaction. Contrôlé par feature gate. | SyscallRemainingComputeUnits |
Stake d'epoch
| Syscall | Description | Source |
|---|---|---|
sol_get_epoch_stake | Renvoie 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
| Syscall | Description | Source |
|---|---|---|
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?