solana_define_syscall/
definitions.rs

1//! This module is only for syscall definitions that bring in no extra dependencies.
2use crate::define_syscall;
3
4define_syscall!(fn sol_secp256k1_recover(hash: *const u8, recovery_id: u64, signature: *const u8, result: *mut u8) -> u64);
5define_syscall!(fn sol_poseidon(parameters: u64, endianness: u64, vals: *const u8, val_len: u64, hash_result: *mut u8) -> u64);
6define_syscall!(fn sol_invoke_signed_c(instruction_addr: *const u8, account_infos_addr: *const u8, account_infos_len: u64, signers_seeds_addr: *const u8, signers_seeds_len: u64) -> u64);
7define_syscall!(fn sol_invoke_signed_rust(instruction_addr: *const u8, account_infos_addr: *const u8, account_infos_len: u64, signers_seeds_addr: *const u8, signers_seeds_len: u64) -> u64);
8define_syscall!(fn sol_set_return_data(data: *const u8, length: u64));
9define_syscall!(fn sol_get_stack_height() -> u64);
10define_syscall!(fn sol_log_(message: *const u8, len: u64));
11define_syscall!(fn sol_log_64_(arg1: u64, arg2: u64, arg3: u64, arg4: u64, arg5: u64));
12define_syscall!(fn sol_log_compute_units_());
13define_syscall!(fn sol_log_data(data: *const u8, data_len: u64));
14define_syscall!(fn sol_memcpy_(dst: *mut u8, src: *const u8, n: u64));
15define_syscall!(fn sol_memmove_(dst: *mut u8, src: *const u8, n: u64));
16define_syscall!(fn sol_memcmp_(s1: *const u8, s2: *const u8, n: u64, result: *mut i32));
17define_syscall!(fn sol_memset_(s: *mut u8, c: u8, n: u64));
18define_syscall!(fn sol_log_pubkey(pubkey_addr: *const u8));
19define_syscall!(fn sol_create_program_address(seeds_addr: *const u8, seeds_len: u64, program_id_addr: *const u8, address_bytes_addr: *const u8) -> u64);
20define_syscall!(fn sol_try_find_program_address(seeds_addr: *const u8, seeds_len: u64, program_id_addr: *const u8, address_bytes_addr: *const u8, bump_seed_addr: *const u8) -> u64);
21define_syscall!(fn sol_sha256(vals: *const u8, val_len: u64, hash_result: *mut u8) -> u64);
22define_syscall!(fn sol_keccak256(vals: *const u8, val_len: u64, hash_result: *mut u8) -> u64);
23define_syscall!(fn sol_blake3(vals: *const u8, val_len: u64, hash_result: *mut u8) -> u64);
24define_syscall!(fn sol_curve_validate_point(curve_id: u64, point_addr: *const u8, result: *mut u8) -> u64);
25define_syscall!(fn sol_curve_group_op(curve_id: u64, group_op: u64, left_input_addr: *const u8, right_input_addr: *const u8, result_point_addr: *mut u8) -> u64);
26define_syscall!(fn sol_curve_multiscalar_mul(curve_id: u64, scalars_addr: *const u8, points_addr: *const u8, points_len: u64, result_point_addr: *mut u8) -> u64);
27define_syscall!(fn sol_curve_pairing_map(curve_id: u64, point: *const u8, result: *mut u8) -> u64);
28define_syscall!(fn sol_alt_bn128_group_op(group_op: u64, input: *const u8, input_size: u64, result: *mut u8) -> u64);
29define_syscall!(fn sol_big_mod_exp(params: *const u8, result: *mut u8) -> u64);
30define_syscall!(fn sol_remaining_compute_units() -> u64);
31define_syscall!(fn sol_alt_bn128_compression(op: u64, input: *const u8, input_size: u64, result: *mut u8) -> u64);
32define_syscall!(fn sol_get_sysvar(sysvar_id_addr: *const u8, result: *mut u8, offset: u64, length: u64) -> u64);
33define_syscall!(fn sol_get_epoch_stake(vote_address: *const u8) -> u64);
34define_syscall!(fn sol_panic_(filename: *const u8, filename_len: u64, line: u64, column: u64) -> !);
35define_syscall!(fn abort() -> !);
36
37// `program_id` points to an `Address` (`[u8; 32]`).
38define_syscall!(fn sol_get_return_data(data: *mut u8, length: u64, program_id: *mut u8) -> u64);
39
40// `meta` points to a structure containing:
41// - `data_len` (`u64`): length of the instruction data
42// - `accounts_len` (`u64`): number of `AccountMeta` entries
43//
44// `program_id` points to an `Address` (`[u8; 32]`).
45//
46// `accounts` is a pointer to an array of `AccountMeta`, each containing:
47// - `address` (`[u8; 32]`): account address
48// - `is_signer` (`u8`): `true` if the instruction requires a signature
49// - `is_writable` (`u8`): `true` if the instruction requires the account to be writable
50define_syscall!(fn sol_get_processed_sibling_instruction(index: u64, meta: *mut u8, program_id: *mut u8, data: *mut u8, accounts: *mut u8) -> u64);
51
52// these are deprecated - use sol_get_sysvar instead
53define_syscall!(#[deprecated(since = "3.0.0", note = "Use `sol_get_sysvar` with `Clock` sysvar address instead")] fn sol_get_clock_sysvar(addr: *mut u8) -> u64);
54define_syscall!(#[deprecated(since = "3.0.0", note = "Use `sol_get_sysvar` with `EpochSchedule` sysvar address instead")] fn sol_get_epoch_schedule_sysvar(addr: *mut u8) -> u64);
55define_syscall!(#[deprecated(since = "3.0.0", note = "Use `sol_get_sysvar` with `Rent` sysvar address instead")] fn sol_get_rent_sysvar(addr: *mut u8) -> u64);
56define_syscall!(#[deprecated(since = "3.0.0", note = "Use `sol_get_sysvar` with `LastRestartSlot` sysvar address instead")] fn sol_get_last_restart_slot(addr: *mut u8) -> u64);
57define_syscall!(#[deprecated(since = "3.0.0", note = "Use `sol_get_sysvar` with `EpochRewards` sysvar address instead")] fn sol_get_epoch_rewards_sysvar(addr: *mut u8) -> u64);
58
59// this cannot go through sol_get_sysvar but can be removed once no longer in use
60define_syscall!(fn sol_get_fees_sysvar(addr: *mut u8) -> u64);