#[cfg(target_os = "solana")]
hopper_native::define_syscall!(
#[link_name = "sol_set_return_data"]
fn syscall_sol_set_return_data(data: *const u8, length: u64)
);
#[cfg(target_os = "solana")]
hopper_native::define_syscall!(
#[link_name = "sol_get_return_data"]
fn syscall_sol_get_return_data(data: *mut u8, length: u64, program_id: *mut u8) -> u64
);
#[cfg(all(target_os = "solana", feature = "remaining-compute-units-syscall"))]
hopper_native::define_syscall!(
#[link_name = "sol_remaining_compute_units"]
fn syscall_sol_remaining_compute_units() -> u64
);
#[cfg(target_os = "solana")]
hopper_native::define_syscall!(
#[link_name = "sol_memcpy_"]
fn syscall_sol_memcpy(dst: *mut u8, src: *const u8, n: u64)
);
#[cfg(target_os = "solana")]
hopper_native::define_syscall!(
#[link_name = "sol_memmove_"]
fn syscall_sol_memmove(dst: *mut u8, src: *const u8, n: u64)
);
#[cfg(target_os = "solana")]
hopper_native::define_syscall!(
#[link_name = "sol_memcmp_"]
fn syscall_sol_memcmp(left: *const u8, right: *const u8, n: u64, result: *mut i32)
);
#[cfg(target_os = "solana")]
hopper_native::define_syscall!(
#[link_name = "sol_memset_"]
fn syscall_sol_memset(dst: *mut u8, byte: u8, n: u64)
);
#[inline(always)]
pub unsafe fn sol_log_data(segments: *const u8, segments_len: u64) {
#[cfg(target_os = "solana")]
unsafe {
hopper_native::syscalls::sol_log_data(segments, segments_len);
}
#[cfg(not(target_os = "solana"))]
{
let _ = (segments, segments_len);
}
}
#[inline(always)]
pub unsafe fn sol_sha256(vals: *const u8, vals_len: u64, result: *mut u8) {
#[cfg(target_os = "solana")]
unsafe {
hopper_native::syscalls::sol_sha256(vals, vals_len, result);
}
#[cfg(not(target_os = "solana"))]
{
let _ = (vals, vals_len, result);
}
}
#[inline(always)]
pub unsafe fn sol_keccak256(vals: *const u8, vals_len: u64, result: *mut u8) {
#[cfg(target_os = "solana")]
unsafe {
hopper_native::syscalls::sol_keccak256(vals, vals_len, result);
}
#[cfg(not(target_os = "solana"))]
{
let _ = (vals, vals_len, result);
}
}
#[inline(always)]
pub unsafe fn sol_blake3(vals: *const u8, vals_len: u64, result: *mut u8) -> u64 {
#[cfg(target_os = "solana")]
unsafe {
return hopper_native::syscalls::sol_blake3(vals, vals_len, result);
}
#[cfg(not(target_os = "solana"))]
{
let _ = (vals, vals_len, result);
0
}
}
#[inline(always)]
pub unsafe fn sol_secp256k1_recover(
hash: *const u8,
recovery_id: u64,
signature: *const u8,
result: *mut u8,
) -> u64 {
#[cfg(target_os = "solana")]
unsafe {
return hopper_native::syscalls::sol_secp256k1_recover(
hash,
recovery_id,
signature,
result,
);
}
#[cfg(not(target_os = "solana"))]
{
let _ = (hash, recovery_id, signature, result);
1
}
}
#[inline(always)]
pub unsafe fn sol_curve_validate_point(
curve_id: u64,
point_addr: *const u8,
result_point_addr: *mut u8,
) -> u64 {
#[cfg(target_os = "solana")]
unsafe {
return hopper_native::syscalls::sol_curve_validate_point(
curve_id,
point_addr,
result_point_addr,
);
}
#[cfg(not(target_os = "solana"))]
{
let _ = (curve_id, point_addr, result_point_addr);
1
}
}
#[inline(always)]
pub unsafe 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 {
#[cfg(target_os = "solana")]
unsafe {
return hopper_native::syscalls::sol_curve_group_op(
curve_id,
group_op,
left_input_addr,
right_input_addr,
result_point_addr,
);
}
#[cfg(not(target_os = "solana"))]
{
let _ = (
curve_id,
group_op,
left_input_addr,
right_input_addr,
result_point_addr,
);
1
}
}
#[inline(always)]
pub unsafe 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 {
#[cfg(target_os = "solana")]
unsafe {
return hopper_native::syscalls::sol_curve_multiscalar_mul(
curve_id,
scalars_addr,
points_addr,
points_len,
result_point_addr,
);
}
#[cfg(not(target_os = "solana"))]
{
let _ = (
curve_id,
scalars_addr,
points_addr,
points_len,
result_point_addr,
);
1
}
}
#[inline(always)]
pub unsafe fn sol_poseidon(
parameters: u64,
endianness: u64,
vals: *const u8,
val_len: u64,
hash_result: *mut u8,
) -> u64 {
#[cfg(target_os = "solana")]
unsafe {
return hopper_native::syscalls::sol_poseidon(
parameters,
endianness,
vals,
val_len,
hash_result,
);
}
#[cfg(not(target_os = "solana"))]
{
let _ = (parameters, endianness, vals, val_len, hash_result);
1
}
}
#[inline(always)]
pub unsafe fn sol_alt_bn128_group_op(
group_op: u64,
input: *const u8,
input_size: u64,
result: *mut u8,
) -> u64 {
#[cfg(target_os = "solana")]
unsafe {
return hopper_native::syscalls::sol_alt_bn128_group_op(
group_op, input, input_size, result,
);
}
#[cfg(not(target_os = "solana"))]
{
let _ = (group_op, input, input_size, result);
1
}
}
#[inline(always)]
pub unsafe fn sol_alt_bn128_compression(
op: u64,
input: *const u8,
input_size: u64,
result: *mut u8,
) -> u64 {
#[cfg(target_os = "solana")]
unsafe {
return hopper_native::syscalls::sol_alt_bn128_compression(op, input, input_size, result);
}
#[cfg(not(target_os = "solana"))]
{
let _ = (op, input, input_size, result);
1
}
}
#[inline(always)]
pub unsafe fn sol_big_mod_exp(params: *const u8, result: *mut u8) -> u64 {
#[cfg(target_os = "solana")]
unsafe {
return hopper_native::syscalls::sol_big_mod_exp(params, result);
}
#[cfg(not(target_os = "solana"))]
{
let _ = (params, result);
1
}
}
#[inline(always)]
pub fn sol_get_stack_height() -> u64 {
#[cfg(target_os = "solana")]
unsafe {
return hopper_native::syscalls::sol_get_stack_height();
}
#[cfg(not(target_os = "solana"))]
{
1
}
}
#[inline(always)]
pub unsafe fn sol_get_processed_sibling_instruction(
index: u64,
meta: *mut u8,
program_id: *mut u8,
data: *mut u8,
accounts: *mut u8,
) -> u64 {
#[cfg(target_os = "solana")]
unsafe {
return hopper_native::syscalls::sol_get_processed_sibling_instruction(
index, meta, program_id, data, accounts,
);
}
#[cfg(not(target_os = "solana"))]
{
let _ = (index, meta, program_id, data, accounts);
1
}
}
#[inline(always)]
pub unsafe fn sol_set_return_data(data: *const u8, length: u64) {
#[cfg(target_os = "solana")]
unsafe {
syscall_sol_set_return_data(data, length);
}
#[cfg(not(target_os = "solana"))]
{
let _ = (data, length);
}
}
#[inline(always)]
pub unsafe fn sol_get_return_data(data: *mut u8, length: u64, program_id: *mut u8) -> u64 {
#[cfg(target_os = "solana")]
unsafe {
return syscall_sol_get_return_data(data, length, program_id);
}
#[cfg(not(target_os = "solana"))]
{
let _ = (data, length, program_id);
0
}
}
#[cfg(any(not(target_os = "solana"), feature = "remaining-compute-units-syscall"))]
#[inline(always)]
pub fn sol_remaining_compute_units() -> u64 {
#[cfg(target_os = "solana")]
unsafe {
return syscall_sol_remaining_compute_units();
}
#[cfg(not(target_os = "solana"))]
{
u64::MAX
}
}
#[inline(always)]
pub unsafe fn sol_memcpy_(dst: *mut u8, src: *const u8, n: u64) {
#[cfg(target_os = "solana")]
unsafe {
syscall_sol_memcpy(dst, src, n);
}
#[cfg(not(target_os = "solana"))]
unsafe {
core::ptr::copy_nonoverlapping(src, dst, n as usize);
}
}
#[inline(always)]
pub unsafe fn sol_memmove_(dst: *mut u8, src: *const u8, n: u64) {
#[cfg(target_os = "solana")]
unsafe {
syscall_sol_memmove(dst, src, n);
}
#[cfg(not(target_os = "solana"))]
unsafe {
core::ptr::copy(src, dst, n as usize);
}
}
#[inline(always)]
pub unsafe fn sol_memcmp_(left: *const u8, right: *const u8, n: u64, result: *mut i32) {
#[cfg(target_os = "solana")]
unsafe {
syscall_sol_memcmp(left, right, n, result);
}
#[cfg(not(target_os = "solana"))]
unsafe {
let left_bytes = core::slice::from_raw_parts(left, n as usize);
let right_bytes = core::slice::from_raw_parts(right, n as usize);
*result = match left_bytes.cmp(right_bytes) {
core::cmp::Ordering::Less => -1,
core::cmp::Ordering::Equal => 0,
core::cmp::Ordering::Greater => 1,
};
}
}
#[inline(always)]
pub unsafe fn sol_memset_(dst: *mut u8, byte: u8, n: u64) {
#[cfg(target_os = "solana")]
unsafe {
syscall_sol_memset(dst, byte, n);
}
#[cfg(not(target_os = "solana"))]
unsafe {
core::ptr::write_bytes(dst, byte, n as usize);
}
}