Referência de syscall

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

SyscallDescriçãoCódigo-fonte
abortInterrompe 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

SyscallDescriçãoCó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_pubkeyRegista 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_dataRegista slices de bytes arbitrários como dados codificados em base64.SyscallLogData

PDA

SyscallDescriçãoFonte
sol_create_program_addressDeriva 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_addressEncontra um PDA válido iterando bump seeds de 255 até 1. Retorna o endereço e o bump.SyscallTryFindProgramAddress

Hashing

SyscallDescriçãoFonte
sol_sha256Calcula um hash SHA-256 sobre uma ou mais fatias de bytes.SyscallHash<Sha256Hasher>
sol_keccak256Calcula um hash Keccak-256 sobre uma ou mais fatias de bytes.SyscallHash<Keccak256Hasher>
sol_blake3Calcula um hash Blake3 sobre uma ou mais fatias de bytes. Controlado por feature.SyscallHash<Blake3Hasher>
sol_poseidonCalcula um hash Poseidon sobre entradas. Controlado por feature.SyscallPoseidon

Criptografia

SyscallDescriçãoFonte
sol_secp256k1_recoverRecupera uma chave pública secp256k1 a partir de um hash de mensagem assinado e ID de recuperação.SyscallSecp256k1Recover
sol_curve_validate_pointValida que um array de bytes é um ponto válido na Curve25519 (Edwards ou Ristretto). Controlado por feature.SyscallCurvePointValidation
sol_curve_group_opRealiza operações de grupo Curve25519 (adicionar, subtrair, multiplicar) em pontos Edwards ou Ristretto. Controlado por feature.SyscallCurveGroupOps
sol_curve_multiscalar_mulRealiza multiplicação multi-escalar em pontos Curve25519 Edwards ou Ristretto. Controlado por feature.SyscallCurveMultiscalarMultiplication
sol_alt_bn128_group_opRealiza 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_compressionComprime e descomprime pontos G1 e G2 alt_bn128. Controlado por feature.SyscallAltBn128Compression
sol_big_mod_expCalcula exponenciação modular de inteiros grandes (base^exp mod modulus). Controlado por feature.SyscallBigModExp

CPI

SyscallDescriçãoFonte
sol_invoke_signed_rustInvoca 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_cInvoca uma instrução entre programas a partir de um programa C. Usa a ABI C SolInstruction para serialização.SyscallInvokeSignedC

Sysvars

SyscallDescriçãoFonte
sol_get_clock_sysvarEscreve a sysvar Clock num buffer fornecido pelo programa.SyscallGetClockSysvar
sol_get_epoch_schedule_sysvarEscreve a sysvar EpochSchedule num buffer fornecido pelo programa.SyscallGetEpochScheduleSysvar
sol_get_rent_sysvarEscreve a sysvar Rent num buffer fornecido pelo programa.SyscallGetRentSysvar
sol_get_epoch_rewards_sysvarEscreve a sysvar EpochRewards num buffer fornecido pelo programa.SyscallGetEpochRewardsSysvar
sol_get_last_restart_slotEscreve a sysvar LastRestartSlot num buffer fornecido pelo programa. Controlado por funcionalidade.SyscallGetLastRestartSlotSysvar
sol_get_fees_sysvarEscreve a sysvar Fees obsoleta num buffer fornecido pelo programa. Controlado por funcionalidade (obsoleto).SyscallGetFeesSysvar
sol_get_sysvarAcesso 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

SyscallDescriçãoFonte
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

SyscallDescriçãoFonte
sol_set_return_dataDefine 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_dataLê 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_instructionRecupera 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_heightRetorna a altura atual da pilha de chamadas. Altura 1 = instrução de nível superior; cada CPI incrementa em 1.SyscallGetStackHeight

Computação

SyscallDescriçãoFonte
sol_remaining_compute_unitsRetorna o número de unidades de computação restantes no orçamento da transação. Controlado por feature gate.SyscallRemainingComputeUnits

Stake de epoch

SyscallDescriçãoFonte
sol_get_epoch_stakeRetorna 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

SyscallDescriçãoFonte
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?

Índice

Editar Página

Gerenciado por

© 2026 Fundação Solana.
Todos os direitos reservados.
Conecte-se
  • Blog