Resumo
Os programas interagem com o runtime através de syscalls que abrangem logging, hashing, criptografia, CPI, sysvars, operações de memória e mais. Cada uma deduz unidades de computação do orçamento partilhado da transação.
Syscalls
Os programas interagem com o runtime através de syscalls registadas em
create_program_runtime_environment_v1().
Cada syscall deduz unidades de computação do orçamento de computação da
transação.
Custos de syscall
As constantes de custo base de unidades de computação de cada syscall são
definidas em
SVMTransactionExecutionCost.
Algumas syscalls combinam estas constantes em fórmulas mais complexas na sua
implementação (por exemplo, escalando com o tamanho da entrada ou adicionando
sobrecarga de syscall_base_cost). Consulte os links de código-fonte das
syscalls individuais abaixo para cálculos de custo exatos.
Syscalls disponíveis
O conjunto completo de syscalls disponíveis para programas sBPF, conforme
registado em
create_program_runtime_environment_v1().
As syscalls condicionadas por funcionalidades só estão disponíveis quando a
funcionalidade correspondente está ativa no cluster.
Fluxo de controlo
| Syscall | Descrição | Código-fonte |
|---|---|---|
abort | Interrompe o programa imediatamente. Inserido pelo LLVM para condições insustentáveis; não destinado a uso explícito. | SyscallAbort |
sol_panic_ | Interrompe o programa com um nome de ficheiro, linha e número de coluna para diagnóstico. | SyscallPanic |
Logging
| Syscall | Descrição | Código-fonte |
|---|---|---|
sol_log_ | Regista uma mensagem de string UTF-8 no log do programa. | SyscallLog |
sol_log_64_ | Regista cinco valores u64 como hexadecimal no log do programa. | SyscallLogU64 |
sol_log_pubkey | Regista uma Pubkey como string base58 no log do programa. | SyscallLogPubkey |
sol_log_compute_units_ | Regista as unidades de computação restantes no log do programa. | SyscallLogBpfComputeUnits |
sol_log_data | Regista slices de bytes arbitrários como dados codificados em base64. | SyscallLogData |
PDA
| Syscall | Descrição | Fonte |
|---|---|---|
sol_create_program_address | Deriva um endereço de programa a partir de seeds e um ID de programa. Retorna 1 se o endereço derivado estiver na curva Ed25519 (PDA inválido). | SyscallCreateProgramAddress |
sol_try_find_program_address | Encontra um PDA válido iterando bump seeds de 255 até 1. Retorna o endereço e o bump. | SyscallTryFindProgramAddress |
Hashing
| Syscall | Descrição | Fonte |
|---|---|---|
sol_sha256 | Calcula um hash SHA-256 sobre uma ou mais fatias de bytes. | SyscallHash<Sha256Hasher> |
sol_keccak256 | Calcula um hash Keccak-256 sobre uma ou mais fatias de bytes. | SyscallHash<Keccak256Hasher> |
sol_blake3 | Calcula um hash Blake3 sobre uma ou mais fatias de bytes. Controlado por feature. | SyscallHash<Blake3Hasher> |
sol_poseidon | Calcula um hash Poseidon sobre entradas. Controlado por feature. | SyscallPoseidon |
Criptografia
| Syscall | Descrição | Fonte |
|---|---|---|
sol_secp256k1_recover | Recupera uma chave pública secp256k1 a partir de um hash de mensagem assinado e ID de recuperação. | SyscallSecp256k1Recover |
sol_curve_validate_point | Valida que um array de bytes é um ponto válido na Curve25519 (Edwards ou Ristretto). Controlado por feature. | SyscallCurvePointValidation |
sol_curve_group_op | Realiza operações de grupo Curve25519 (adicionar, subtrair, multiplicar) em pontos Edwards ou Ristretto. Controlado por feature. | SyscallCurveGroupOps |
sol_curve_multiscalar_mul | Realiza multiplicação multi-escalar em pontos Curve25519 Edwards ou Ristretto. Controlado por feature. | SyscallCurveMultiscalarMultiplication |
sol_alt_bn128_group_op | Realiza operações de grupo alt_bn128 (BN254): adição G1, multiplicação G1 e verificação de emparelhamento. Controlado por feature. | SyscallAltBn128 |
sol_alt_bn128_compression | Comprime e descomprime pontos G1 e G2 alt_bn128. Controlado por feature. | SyscallAltBn128Compression |
sol_big_mod_exp | Calcula exponenciação modular de inteiros grandes (base^exp mod modulus). Controlado por feature. | SyscallBigModExp |
CPI
| Syscall | Descrição | Fonte |
|---|---|---|
sol_invoke_signed_rust | Invoca uma instrução entre programas a partir de um programa Rust. Serializa instrução, contas e sementes de signatário usando a ABI Rust. | SyscallInvokeSignedRust |
sol_invoke_signed_c | Invoca uma instrução entre programas a partir de um programa C. Usa a ABI C SolInstruction para serialização. | SyscallInvokeSignedC |
Sysvars
| Syscall | Descrição | Fonte |
|---|---|---|
sol_get_clock_sysvar | Escreve a sysvar Clock num buffer fornecido pelo programa. | SyscallGetClockSysvar |
sol_get_epoch_schedule_sysvar | Escreve a sysvar EpochSchedule num buffer fornecido pelo programa. | SyscallGetEpochScheduleSysvar |
sol_get_rent_sysvar | Escreve a sysvar Rent num buffer fornecido pelo programa. | SyscallGetRentSysvar |
sol_get_epoch_rewards_sysvar | Escreve a sysvar EpochRewards num buffer fornecido pelo programa. | SyscallGetEpochRewardsSysvar |
sol_get_last_restart_slot | Escreve a sysvar LastRestartSlot num buffer fornecido pelo programa. Controlado por funcionalidade. | SyscallGetLastRestartSlotSysvar |
sol_get_fees_sysvar | Escreve a sysvar Fees obsoleta num buffer fornecido pelo programa. Controlado por funcionalidade (obsoleto). | SyscallGetFeesSysvar |
sol_get_sysvar | Acesso genérico a sysvar: lê uma sequência de bytes de qualquer sysvar em cache pela sua pubkey, deslocamento e comprimento (SIMD-0127). Controlado por funcionalidade. | SyscallGetSysvar |
Operações de memória
| Syscall | Descrição | Fonte |
|---|---|---|
sol_memcpy_ | Copia n bytes da origem para o destino. Aborta se as regiões se sobrepuserem no espaço de endereços da VM. | SyscallMemcpy |
sol_memmove_ | Copia n bytes da origem para o destino, tratando corretamente regiões sobrepostas. | SyscallMemmove |
sol_memcmp_ | Compara n bytes de duas regiões de memória. Escreve o resultado (comparação do primeiro byte diferente) num endereço de resultado. | SyscallMemcmp |
sol_memset_ | Preenche n bytes de uma região de memória com um determinado valor de byte. | SyscallMemset |
Dados do programa
| Syscall | Descrição | Fonte |
|---|---|---|
sol_set_return_data | Define dados de retorno (máximo de 1.024 bytes) para a instrução atual. Legível pelo chamador após o retorno do CPI. | SyscallSetReturnData |
sol_get_return_data | Lê os dados de retorno definidos pelo CPI mais recente. Retorna o comprimento dos dados e o ID do programa que os definiu. | SyscallGetReturnData |
sol_get_processed_sibling_instruction | Recupera uma instrução irmã executada anteriormente na mesma altura de pilha (por índice reverso). Retorna ID do programa, dados e metadados de conta. | SyscallGetProcessedSiblingInstruction |
sol_get_stack_height | Retorna a altura atual da pilha de chamadas. Altura 1 = instrução de nível superior; cada CPI incrementa em 1. | SyscallGetStackHeight |
Computação
| Syscall | Descrição | Fonte |
|---|---|---|
sol_remaining_compute_units | Retorna o número de unidades de computação restantes no orçamento da transação. Controlado por feature gate. | SyscallRemainingComputeUnits |
Stake de epoch
| Syscall | Descrição | Fonte |
|---|---|---|
sol_get_epoch_stake | Retorna o stake total do cluster (ponteiro nulo) ou o stake delegado de uma conta de voto específica para o epoch atual (SIMD-0133). Controlado por feature gate. | SyscallGetEpochStake |
Alocação de memória
| Syscall | Descrição | Fonte |
|---|---|---|
sol_alloc_free_ | Alocador bump legado para alocação dinâmica de memória. Desativado para novas implementações; disponível apenas para programas implementados antes do feature gate. | SyscallAllocFree |
Is this page helpful?