Skip to main content

BuiltinFunctionDefinition

Trait BuiltinFunctionDefinition 

Source
pub trait BuiltinFunctionDefinition<C>
where C: ContextObject,
{ type Error: Into<Box<dyn Error>>; // Required method fn rust( vm: &mut C, arg_a: u64, arg_b: u64, arg_c: u64, arg_d: u64, arg_e: u64, ) -> Result<u64, Self::Error>; // Provided methods fn vm( vm: EncryptedHostAddressToEbpfVm<C>, a: u64, b: u64, c: u64, d: u64, e: u64, ) { ... } fn codegen(jit: &mut JitCompiler<'_, C>) { ... } fn register( program: &mut BuiltinProgram<C>, name: &str, ) -> Result<(), ElfError> where Self: Sized { ... } }
Expand description

Native built-in functions that can be made available to programs to call.

Required Associated Types§

Source

type Error: Into<Box<dyn Error>>

Error type returned by this built-in function.

Required Methods§

Source

fn rust( vm: &mut C, arg_a: u64, arg_b: u64, arg_c: u64, arg_d: u64, arg_e: u64, ) -> Result<u64, Self::Error>

The Rust side of the function logic.

This is the only method you are required to override.

Provided Methods§

Source

fn vm( vm: EncryptedHostAddressToEbpfVm<C>, a: u64, b: u64, c: u64, d: u64, e: u64, )

The VM wrapper.

Source

fn codegen(jit: &mut JitCompiler<'_, C>)

Hook for the JIT compiler on how to codegen this built-in function.

You could opt to codegen it in-line, but do note that defining the other methods is still required for non-JIT execution modes.

Source

fn register(program: &mut BuiltinProgram<C>, name: &str) -> Result<(), ElfError>
where Self: Sized,

Register this syscall to the provided program.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementations on Foreign Types§

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for Entrypoint

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, _arg0: u64, _arg1: u64, _arg2: u64, _arg3: u64, _arg4: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for Entrypoint

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, _arg0: u64, _arg1: u64, _arg2: u64, _arg3: u64, _arg4: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for Entrypoint

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, _arg0: u64, _arg1: u64, _arg2: u64, _arg3: u64, _arg4: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for Entrypoint

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, _arg0: u64, _arg1: u64, _arg2: u64, _arg3: u64, _arg4: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for Entrypoint

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, _arg0: u64, _arg1: u64, _arg2: u64, _arg3: u64, _arg4: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for SyscallAbort

Source§

type Error = Box<dyn Error>

Source§

fn rust( _invoke_context: &mut InvokeContext<'_, '_>, _arg1: u64, _arg2: u64, _arg3: u64, _arg4: u64, _arg5: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for SyscallAllocFree

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, size: u64, free_addr: u64, _arg3: u64, _arg4: u64, _arg5: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for SyscallAltBn128

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, group_op: u64, input_addr: u64, input_size: u64, result_addr: u64, _arg5: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for SyscallAltBn128Compression

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, op: u64, input_addr: u64, input_size: u64, result_addr: u64, _arg5: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for SyscallBigModExp

Source§

type Error = Box<dyn Error>

Source§

fn rust( _invoke_context: &mut InvokeContext<'_, '_>, _params: u64, _return_value: u64, _arg3: u64, _arg4: u64, _arg5: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for SyscallCreateProgramAddress

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, seeds_addr: u64, seeds_len: u64, program_id_addr: u64, address_addr: u64, _arg5: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for SyscallCurveDecompress

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, curve_id: u64, point_addr: u64, result_addr: u64, _arg4: u64, _arg5: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for SyscallCurveGroupOps

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, curve_id: u64, group_op: u64, left_input_addr: u64, right_input_addr: u64, result_point_addr: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for SyscallCurveMultiscalarMultiplication

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, curve_id: u64, scalars_addr: u64, points_addr: u64, points_len: u64, result_point_addr: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for SyscallCurvePairingMap

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, curve_id: u64, num_pairs: u64, g1_points_addr: u64, g2_points_addr: u64, result_addr: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for SyscallCurvePointValidation

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, curve_id: u64, point_addr: u64, _arg3: u64, _arg4: u64, _arg5: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for SyscallGetClockSysvar

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, var_addr: u64, _arg2: u64, _arg3: u64, _arg4: u64, _arg5: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for SyscallGetEpochRewardsSysvar

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, var_addr: u64, _arg2: u64, _arg3: u64, _arg4: u64, _arg5: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for SyscallGetEpochScheduleSysvar

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, var_addr: u64, _arg2: u64, _arg3: u64, _arg4: u64, _arg5: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for SyscallGetEpochStake

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, var_addr: u64, _arg2: u64, _arg3: u64, _arg4: u64, _arg5: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for SyscallGetFeesSysvar

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, var_addr: u64, _arg2: u64, _arg3: u64, _arg4: u64, _arg5: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for SyscallGetLastRestartSlotSysvar

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, var_addr: u64, _arg2: u64, _arg3: u64, _arg4: u64, _arg5: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for SyscallGetProcessedSiblingInstruction

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, index: u64, meta_addr: u64, program_id_addr: u64, data_addr: u64, accounts_addr: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for SyscallGetRentSysvar

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, var_addr: u64, _arg2: u64, _arg3: u64, _arg4: u64, _arg5: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for SyscallGetReturnData

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, return_data_addr: u64, length: u64, program_id_addr: u64, _arg4: u64, _arg5: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for SyscallGetStackHeight

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, _arg1: u64, _arg2: u64, _arg3: u64, _arg4: u64, _arg5: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for SyscallGetSysvar

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, sysvar_id_addr: u64, var_addr: u64, offset: u64, length: u64, _arg5: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for SyscallInvokeSignedC

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, instruction_addr: u64, account_infos_addr: u64, account_infos_len: u64, signers_seeds_addr: u64, signers_seeds_len: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for SyscallInvokeSignedRust

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, instruction_addr: u64, account_infos_addr: u64, account_infos_len: u64, signers_seeds_addr: u64, signers_seeds_len: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for SyscallLog

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, addr: u64, len: u64, _arg3: u64, _arg4: u64, _arg5: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for SyscallLogBpfComputeUnits

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, _arg1: u64, _arg2: u64, _arg3: u64, _arg4: u64, _arg5: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for SyscallLogData

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, addr: u64, len: u64, _arg3: u64, _arg4: u64, _arg5: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for SyscallLogPubkey

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, pubkey_addr: u64, _arg2: u64, _arg3: u64, _arg4: u64, _arg5: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for SyscallLogU64

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, arg1: u64, arg2: u64, arg3: u64, arg4: u64, arg5: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for SyscallMemcmp

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, s1_addr: u64, s2_addr: u64, n: u64, cmp_result_addr: u64, _arg5: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for SyscallMemcpy

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, dst_addr: u64, src_addr: u64, n: u64, _arg4: u64, _arg5: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for SyscallMemmove

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, dst_addr: u64, src_addr: u64, n: u64, _arg4: u64, _arg5: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for SyscallMemset

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, dst_addr: u64, c: u64, n: u64, _arg4: u64, _arg5: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for SyscallPanic

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, file: u64, len: u64, line: u64, column: u64, _arg5: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for SyscallPoseidon

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, parameters: u64, endianness: u64, vals_addr: u64, vals_len: u64, result_addr: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for SyscallRemainingComputeUnits

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, _arg1: u64, _arg2: u64, _arg3: u64, _arg4: u64, _arg5: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for SyscallSecp256k1Recover

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, hash_addr: u64, recovery_id_val: u64, signature_addr: u64, result_addr: u64, _arg5: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for SyscallSetReturnData

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, addr: u64, len: u64, _arg3: u64, _arg4: u64, _arg5: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'_, '_>> for SyscallTryFindProgramAddress

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, seeds_addr: u64, seeds_len: u64, program_id_addr: u64, address_addr: u64, bump_seed_addr: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl BuiltinFunctionDefinition<InvokeContext<'static, 'static>> for Entrypoint

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'static, 'static>, _arg0: u64, _arg1: u64, _arg2: u64, _arg3: u64, _arg4: u64, ) -> Result<u64, Box<dyn Error>>

Source§

impl<H> BuiltinFunctionDefinition<InvokeContext<'_, '_>> for SyscallHash<H>
where H: HasherImpl,

Source§

type Error = Box<dyn Error>

Source§

fn rust( invoke_context: &mut InvokeContext<'_, '_>, vals_addr: u64, vals_len: u64, result_addr: u64, _arg4: u64, _arg5: u64, ) -> Result<u64, Box<dyn Error>>

Implementors§