Riepilogo
I programmi interagiscono con il runtime attraverso syscall che coprono logging, hashing, crittografia, CPI, sysvars, operazioni di memoria e altro. Ognuna deduce compute unit dal budget condiviso della transazione.
Syscall
I programmi interagiscono con il runtime attraverso syscall registrate in
create_program_runtime_environment_v1().
Ogni syscall deduce compute unit dal compute budget della transazione.
Costi delle syscall
Le costanti del costo base in compute unit di ogni syscall sono definite in
SVMTransactionExecutionCost.
Alcune syscall combinano queste costanti in formule più complesse nella loro
implementazione (ad es., scalando con la dimensione dell'input o aggiungendo
overhead syscall_base_cost). Consulta i link al codice sorgente delle singole
syscall qui sotto per i calcoli esatti dei costi.
Syscall disponibili
L'insieme completo di syscall disponibili per i programmi sBPF, come registrate
in
create_program_runtime_environment_v1().
Le syscall protette da feature sono disponibili solo quando la feature
corrispondente è attiva sul cluster.
Flusso di controllo
| Syscall | Descrizione | Sorgente |
|---|---|---|
abort | Interrompe immediatamente il programma. Inserita da LLVM per condizioni insostenibili; non destinata all'uso esplicito. | SyscallAbort |
sol_panic_ | Interrompe il programma con nome file, riga e colonna per la diagnostica. | SyscallPanic |
Logging
| Syscall | Descrizione | Sorgente |
|---|---|---|
sol_log_ | Registra un messaggio stringa UTF-8 nel log del programma. | SyscallLog |
sol_log_64_ | Registra cinque valori u64 come esadecimali nel log del programma. | SyscallLogU64 |
sol_log_pubkey | Registra un Pubkey come stringa base58 nel log del programma. | SyscallLogPubkey |
sol_log_compute_units_ | Registra le compute unit rimanenti nel log del programma. | SyscallLogBpfComputeUnits |
sol_log_data | Registra slice di byte arbitrari come dati codificati in base64. | SyscallLogData |
PDA
| Syscall | Descrizione | Sorgente |
|---|---|---|
sol_create_program_address | Deriva un indirizzo di programma da seed e un ID programma. Restituisce 1 se l'indirizzo derivato è sulla curva Ed25519 (PDA non valido). | SyscallCreateProgramAddress |
sol_try_find_program_address | Trova un PDA valido iterando i bump seed da 255 fino a 1. Restituisce l'indirizzo e il bump. | SyscallTryFindProgramAddress |
Hashing
| Syscall | Descrizione | Sorgente |
|---|---|---|
sol_sha256 | Calcola un hash SHA-256 su una o più sequenze di byte. | SyscallHash<Sha256Hasher> |
sol_keccak256 | Calcola un hash Keccak-256 su una o più sequenze di byte. | SyscallHash<Keccak256Hasher> |
sol_blake3 | Calcola un hash Blake3 su una o più sequenze di byte. Richiede feature gate. | SyscallHash<Blake3Hasher> |
sol_poseidon | Calcola un hash Poseidon sugli input. Richiede feature gate. | SyscallPoseidon |
Crittografia
| Syscall | Descrizione | Sorgente |
|---|---|---|
sol_secp256k1_recover | Recupera una chiave pubblica secp256k1 da un hash di messaggio firmato e un ID di recupero. | SyscallSecp256k1Recover |
sol_curve_validate_point | Valida che un array di byte sia un punto valido sulla curva Curve25519 (Edwards o Ristretto). Richiede feature gate. | SyscallCurvePointValidation |
sol_curve_group_op | Esegue operazioni di gruppo Curve25519 (addizione, sottrazione, moltiplicazione) su punti Edwards o Ristretto. Richiede feature gate. | SyscallCurveGroupOps |
sol_curve_multiscalar_mul | Esegue la moltiplicazione multi-scalare su punti Curve25519 Edwards o Ristretto. Richiede feature gate. | SyscallCurveMultiscalarMultiplication |
sol_alt_bn128_group_op | Esegue operazioni di gruppo alt_bn128 (BN254): addizione G1, moltiplicazione G1 e verifica di pairing. Richiede feature gate. | SyscallAltBn128 |
sol_alt_bn128_compression | Comprime e decomprime punti G1 e G2 alt_bn128. Richiede feature gate. | SyscallAltBn128Compression |
sol_big_mod_exp | Calcola l'esponenziazione modulare di interi grandi (base^exp mod modulus). Richiede feature gate. | SyscallBigModExp |
CPI
| Syscall | Descrizione | Sorgente |
|---|---|---|
sol_invoke_signed_rust | Invoca un'istruzione cross-program da un programma Rust. Serializza istruzione, account e signer seed utilizzando l'ABI Rust. | SyscallInvokeSignedRust |
sol_invoke_signed_c | Invoca un'istruzione cross-program da un programma C. Utilizza l'ABI C SolInstruction per la serializzazione. | SyscallInvokeSignedC |
Sysvars
| Syscall | Descrizione | Sorgente |
|---|---|---|
sol_get_clock_sysvar | Scrive la sysvar Clock in un buffer fornito dal programma. | SyscallGetClockSysvar |
sol_get_epoch_schedule_sysvar | Scrive la sysvar EpochSchedule in un buffer fornito dal programma. | SyscallGetEpochScheduleSysvar |
sol_get_rent_sysvar | Scrive la sysvar Rent in un buffer fornito dal programma. | SyscallGetRentSysvar |
sol_get_epoch_rewards_sysvar | Scrive la sysvar EpochRewards in un buffer fornito dal programma. | SyscallGetEpochRewardsSysvar |
sol_get_last_restart_slot | Scrive la sysvar LastRestartSlot in un buffer fornito dal programma. Protetto da feature gate. | SyscallGetLastRestartSlotSysvar |
sol_get_fees_sysvar | Scrive la sysvar Fees deprecata in un buffer fornito dal programma. Protetto da feature gate (deprecato). | SyscallGetFeesSysvar |
sol_get_sysvar | Accesso generico alle sysvar: legge una sequenza di byte da qualsiasi sysvar in cache tramite la sua pubkey, offset e lunghezza (SIMD-0127). Protetto da feature gate. | SyscallGetSysvar |
Operazioni di memoria
| Syscall | Descrizione | Sorgente |
|---|---|---|
sol_memcpy_ | Copia n byte dalla sorgente alla destinazione. Interrompe se le regioni si sovrappongono nello spazio degli indirizzi VM. | SyscallMemcpy |
sol_memmove_ | Copia n byte dalla sorgente alla destinazione, gestendo correttamente le regioni sovrapposte. | SyscallMemmove |
sol_memcmp_ | Confronta n byte di due regioni di memoria. Scrive il risultato (confronto del primo byte differente) in un indirizzo di risultato. | SyscallMemcmp |
sol_memset_ | Riempie n byte di una regione di memoria con un determinato valore byte. | SyscallMemset |
Dati del programma
| Syscall | Descrizione | Sorgente |
|---|---|---|
sol_set_return_data | Imposta i dati di ritorno (max 1.024 byte) per l'istruzione corrente. Leggibili dal chiamante dopo il ritorno della CPI. | SyscallSetReturnData |
sol_get_return_data | Legge i dati di ritorno impostati dalla CPI più recente. Restituisce la lunghezza dei dati e l'ID del programma che li ha impostati. | SyscallGetReturnData |
sol_get_processed_sibling_instruction | Recupera un'istruzione sibling precedentemente eseguita alla stessa altezza dello stack (per indice inverso). Restituisce l'ID del programma, i dati e i metadati degli account. | SyscallGetProcessedSiblingInstruction |
sol_get_stack_height | Restituisce l'altezza corrente dello stack di chiamate. Altezza 1 = istruzione di livello superiore; ogni CPI incrementa di 1. | SyscallGetStackHeight |
Compute
| Syscall | Descrizione | Sorgente |
|---|---|---|
sol_remaining_compute_units | Restituisce il numero di unità di calcolo rimanenti nel budget della transazione. Controllato da feature gate. | SyscallRemainingComputeUnits |
Stake dell'epoch
| Syscall | Descrizione | Sorgente |
|---|---|---|
sol_get_epoch_stake | Restituisce lo stake totale del cluster (puntatore nullo) o lo stake delegato di uno specifico account di voto per l'epoch corrente (SIMD-0133). Controllato da feature gate. | SyscallGetEpochStake |
Allocazione della memoria
| Syscall | Descrizione | Sorgente |
|---|---|---|
sol_alloc_free_ | Allocatore bump legacy per l'allocazione dinamica della memoria. Disabilitato per i nuovi deployment; disponibile solo per i programmi distribuiti prima del feature gate. | SyscallAllocFree |
Is this page helpful?