diff --git a/programs/bpf_loader/src/syscalls/cpi.rs b/programs/bpf_loader/src/syscalls/cpi.rs index c56810f0a8ecd0..e1b29fed3eae5c 100644 --- a/programs/bpf_loader/src/syscalls/cpi.rs +++ b/programs/bpf_loader/src/syscalls/cpi.rs @@ -39,7 +39,7 @@ impl<'a> CallerAccount<'a> { _vm_addr: u64, account_info: &AccountInfo, original_data_len: usize, - ) -> Result, Box> { + ) -> Result, Error> { // account_info points to host memory. The addresses used internally are // in vm space so they need to be translated. @@ -129,7 +129,7 @@ impl<'a> CallerAccount<'a> { vm_addr: u64, account_info: &SolAccountInfo, original_data_len: usize, - ) -> Result, Box> { + ) -> Result, Error> { // account_info points to host memory. The addresses used internally are // in vm space so they need to be translated. @@ -212,7 +212,7 @@ trait SyscallInvokeSigned { addr: u64, memory_mapping: &mut MemoryMapping, invoke_context: &mut InvokeContext, - ) -> Result>; + ) -> Result; fn translate_accounts<'a>( instruction_accounts: &[InstructionAccount], program_indices: &[IndexOfAccount], @@ -220,14 +220,14 @@ trait SyscallInvokeSigned { account_infos_len: u64, memory_mapping: &mut MemoryMapping, invoke_context: &mut InvokeContext, - ) -> Result, Box>; + ) -> Result, Error>; fn translate_signers( program_id: &Pubkey, signers_seeds_addr: u64, signers_seeds_len: u64, memory_mapping: &mut MemoryMapping, invoke_context: &InvokeContext, - ) -> Result, Box>; + ) -> Result, Error>; } declare_syscall!( @@ -241,7 +241,7 @@ declare_syscall!( signers_seeds_addr: u64, signers_seeds_len: u64, memory_mapping: &mut MemoryMapping, - ) -> Result> { + ) -> Result { cpi_common::( invoke_context, instruction_addr, @@ -259,7 +259,7 @@ impl SyscallInvokeSigned for SyscallInvokeSignedRust { addr: u64, memory_mapping: &mut MemoryMapping, invoke_context: &mut InvokeContext, - ) -> Result> { + ) -> Result { let ix = translate_type::( memory_mapping, addr, @@ -312,7 +312,7 @@ impl SyscallInvokeSigned for SyscallInvokeSignedRust { account_infos_len: u64, memory_mapping: &mut MemoryMapping, invoke_context: &mut InvokeContext, - ) -> Result, Box> { + ) -> Result, Error> { let (account_infos, account_info_keys) = translate_account_infos( account_infos_addr, account_infos_len, @@ -339,7 +339,7 @@ impl SyscallInvokeSigned for SyscallInvokeSignedRust { signers_seeds_len: u64, memory_mapping: &mut MemoryMapping, invoke_context: &InvokeContext, - ) -> Result, Box> { + ) -> Result, Error> { let mut signers = Vec::new(); if signers_seeds_len > 0 { let signers_seeds = translate_slice::<&[&[u8]]>( @@ -374,7 +374,7 @@ impl SyscallInvokeSigned for SyscallInvokeSignedRust { invoke_context.get_check_size(), ) }) - .collect::, Box>>()?; + .collect::, Error>>()?; let signer = Pubkey::create_program_address(&seeds, program_id) .map_err(SyscallError::BadSeeds)?; signers.push(signer); @@ -450,7 +450,7 @@ declare_syscall!( signers_seeds_addr: u64, signers_seeds_len: u64, memory_mapping: &mut MemoryMapping, - ) -> Result> { + ) -> Result { cpi_common::( invoke_context, instruction_addr, @@ -468,7 +468,7 @@ impl SyscallInvokeSigned for SyscallInvokeSignedC { addr: u64, memory_mapping: &mut MemoryMapping, invoke_context: &mut InvokeContext, - ) -> Result> { + ) -> Result { let ix_c = translate_type::( memory_mapping, addr, @@ -527,7 +527,7 @@ impl SyscallInvokeSigned for SyscallInvokeSignedC { is_writable: meta_c.is_writable, }) }) - .collect::, Box>>()?; + .collect::, Error>>()?; Ok(StableInstruction { accounts: accounts.into(), @@ -543,7 +543,7 @@ impl SyscallInvokeSigned for SyscallInvokeSignedC { account_infos_len: u64, memory_mapping: &mut MemoryMapping, invoke_context: &mut InvokeContext, - ) -> Result, Box> { + ) -> Result, Error> { let (account_infos, account_info_keys) = translate_account_infos( account_infos_addr, account_infos_len, @@ -570,7 +570,7 @@ impl SyscallInvokeSigned for SyscallInvokeSignedC { signers_seeds_len: u64, memory_mapping: &mut MemoryMapping, invoke_context: &InvokeContext, - ) -> Result, Box> { + ) -> Result, Error> { if signers_seeds_len > 0 { let signers_seeds = translate_slice::( memory_mapping, @@ -593,8 +593,7 @@ impl SyscallInvokeSigned for SyscallInvokeSignedC { invoke_context.get_check_size(), )?; if seeds.len() > MAX_SEEDS { - return Err(Box::new(InstructionError::MaxSeedLengthExceeded) - as Box); + return Err(Box::new(InstructionError::MaxSeedLengthExceeded) as Error); } let seeds_bytes = seeds .iter() @@ -607,12 +606,11 @@ impl SyscallInvokeSigned for SyscallInvokeSignedC { invoke_context.get_check_size(), ) }) - .collect::, Box>>()?; - Pubkey::create_program_address(&seeds_bytes, program_id).map_err(|err| { - Box::new(SyscallError::BadSeeds(err)) as Box - }) + .collect::, Error>>()?; + Pubkey::create_program_address(&seeds_bytes, program_id) + .map_err(|err| Box::new(SyscallError::BadSeeds(err)) as Error) }) - .collect::, Box>>()?) + .collect::, Error>>()?) } else { Ok(vec![]) } @@ -625,7 +623,7 @@ fn translate_account_infos<'a, T, F>( key_addr: F, memory_mapping: &mut MemoryMapping, invoke_context: &mut InvokeContext, -) -> Result<(&'a [T], Vec<&'a Pubkey>), Box> +) -> Result<(&'a [T], Vec<&'a Pubkey>), Error> where F: Fn(&T) -> u64, { @@ -646,7 +644,7 @@ where invoke_context.get_check_aligned(), ) }) - .collect::, Box>>()?; + .collect::, Error>>()?; Ok((account_infos, account_info_keys)) } @@ -662,15 +660,9 @@ fn translate_and_update_accounts<'a, T, F>( invoke_context: &mut InvokeContext, memory_mapping: &MemoryMapping, do_translate: F, -) -> Result, Box> +) -> Result, Error> where - F: Fn( - &InvokeContext, - &MemoryMapping, - u64, - &T, - usize, - ) -> Result, Box>, + F: Fn(&InvokeContext, &MemoryMapping, u64, &T, usize) -> Result, Error>, { let transaction_context = &invoke_context.transaction_context; let instruction_context = transaction_context.get_current_instruction_context()?; @@ -765,7 +757,7 @@ fn check_instruction_size( num_accounts: usize, data_len: usize, invoke_context: &mut InvokeContext, -) -> Result<(), Box> { +) -> Result<(), Error> { if invoke_context .feature_set .is_active(&feature_set::loosen_cpi_size_restriction::id()) @@ -802,7 +794,7 @@ fn check_instruction_size( fn check_account_infos( num_account_infos: usize, invoke_context: &mut InvokeContext, -) -> Result<(), Box> { +) -> Result<(), Error> { if invoke_context .feature_set .is_active(&feature_set::loosen_cpi_size_restriction::id()) @@ -839,7 +831,7 @@ fn check_authorized_program( program_id: &Pubkey, instruction_data: &[u8], invoke_context: &InvokeContext, -) -> Result<(), Box> { +) -> Result<(), Error> { if native_loader::check_id(program_id) || bpf_loader::check_id(program_id) || bpf_loader_deprecated::check_id(program_id) @@ -871,7 +863,7 @@ fn cpi_common( signers_seeds_addr: u64, signers_seeds_len: u64, memory_mapping: &mut MemoryMapping, -) -> Result> { +) -> Result { // CPI entry. // // Translate the inputs to the syscall and synchronize the caller's account @@ -949,7 +941,7 @@ fn update_callee_account( invoke_context: &InvokeContext, caller_account: &CallerAccount, mut callee_account: BorrowedAccount<'_>, -) -> Result<(), Box> { +) -> Result<(), Error> { let is_disable_cpi_setting_executable_and_rent_epoch_active = invoke_context .feature_set .is_active(&disable_cpi_setting_executable_and_rent_epoch::id()); @@ -1019,7 +1011,7 @@ fn update_caller_account( memory_mapping: &MemoryMapping, caller_account: &mut CallerAccount, callee_account: &BorrowedAccount<'_>, -) -> Result<(), Box> { +) -> Result<(), Error> { *caller_account.lamports = callee_account.get_lamports(); *caller_account.owner = *callee_account.get_owner(); let new_len = callee_account.get_data().len(); diff --git a/programs/bpf_loader/src/syscalls/logging.rs b/programs/bpf_loader/src/syscalls/logging.rs index b2485855f33dbc..bfe4f80acabb1a 100644 --- a/programs/bpf_loader/src/syscalls/logging.rs +++ b/programs/bpf_loader/src/syscalls/logging.rs @@ -11,7 +11,7 @@ declare_syscall!( _arg4: u64, _arg5: u64, memory_mapping: &mut MemoryMapping, - ) -> Result> { + ) -> Result { let cost = invoke_context .get_compute_budget() .syscall_base_cost @@ -44,7 +44,7 @@ declare_syscall!( arg4: u64, arg5: u64, _memory_mapping: &mut MemoryMapping, - ) -> Result> { + ) -> Result { let cost = invoke_context.get_compute_budget().log_64_units; consume_compute_meter(invoke_context, cost)?; @@ -67,7 +67,7 @@ declare_syscall!( _arg4: u64, _arg5: u64, _memory_mapping: &mut MemoryMapping, - ) -> Result> { + ) -> Result { let cost = invoke_context.get_compute_budget().syscall_base_cost; consume_compute_meter(invoke_context, cost)?; @@ -91,7 +91,7 @@ declare_syscall!( _arg4: u64, _arg5: u64, memory_mapping: &mut MemoryMapping, - ) -> Result> { + ) -> Result { let cost = invoke_context.get_compute_budget().log_pubkey_units; consume_compute_meter(invoke_context, cost)?; @@ -116,7 +116,7 @@ declare_syscall!( _arg4: u64, _arg5: u64, memory_mapping: &mut MemoryMapping, - ) -> Result> { + ) -> Result { let budget = invoke_context.get_compute_budget(); consume_compute_meter(invoke_context, budget.syscall_base_cost)?; diff --git a/programs/bpf_loader/src/syscalls/mem_ops.rs b/programs/bpf_loader/src/syscalls/mem_ops.rs index 5460ccc158bfab..d501311461339f 100644 --- a/programs/bpf_loader/src/syscalls/mem_ops.rs +++ b/programs/bpf_loader/src/syscalls/mem_ops.rs @@ -1,9 +1,6 @@ use {super::*, crate::declare_syscall}; -fn mem_op_consume( - invoke_context: &mut InvokeContext, - n: u64, -) -> Result<(), Box> { +fn mem_op_consume(invoke_context: &mut InvokeContext, n: u64) -> Result<(), Error> { let compute_budget = invoke_context.get_compute_budget(); let cost = compute_budget .mem_op_base_cost @@ -22,7 +19,7 @@ declare_syscall!( _arg4: u64, _arg5: u64, memory_mapping: &mut MemoryMapping, - ) -> Result> { + ) -> Result { mem_op_consume(invoke_context, n)?; if !is_nonoverlapping(src_addr, n, dst_addr, n) { @@ -69,7 +66,7 @@ declare_syscall!( _arg4: u64, _arg5: u64, memory_mapping: &mut MemoryMapping, - ) -> Result> { + ) -> Result { mem_op_consume(invoke_context, n)?; let dst = translate_slice_mut::( @@ -104,7 +101,7 @@ declare_syscall!( cmp_result_addr: u64, _arg5: u64, memory_mapping: &mut MemoryMapping, - ) -> Result> { + ) -> Result { mem_op_consume(invoke_context, n)?; let s1 = translate_slice::( @@ -152,7 +149,7 @@ declare_syscall!( _arg4: u64, _arg5: u64, memory_mapping: &mut MemoryMapping, - ) -> Result> { + ) -> Result { mem_op_consume(invoke_context, n)?; let s = translate_slice_mut::( diff --git a/programs/bpf_loader/src/syscalls/mod.rs b/programs/bpf_loader/src/syscalls/mod.rs index b0bf5c8e233fe0..46c869c12ef694 100644 --- a/programs/bpf_loader/src/syscalls/mod.rs +++ b/programs/bpf_loader/src/syscalls/mod.rs @@ -123,10 +123,9 @@ pub enum SyscallError { InvalidAttribute, } -fn consume_compute_meter( - invoke_context: &InvokeContext, - amount: u64, -) -> Result<(), Box> { +type Error = Box; + +fn consume_compute_meter(invoke_context: &InvokeContext, amount: u64) -> Result<(), Error> { invoke_context.consume_checked(amount)?; Ok(()) } @@ -147,7 +146,7 @@ pub fn create_loader<'a>( reject_deployment_of_broken_elfs: bool, disable_deploy_of_alloc_free_syscall: bool, debugging_features: bool, -) -> Result>>, Box> { +) -> Result>>, Error> { use rand::Rng; let config = Config { max_call_depth: compute_budget.max_call_depth, @@ -321,7 +320,7 @@ fn translate( access_type: AccessType, vm_addr: u64, len: u64, -) -> Result> { +) -> Result { memory_mapping.map(access_type, vm_addr, len, 0).into() } @@ -330,7 +329,7 @@ fn translate_type_inner<'a, T>( access_type: AccessType, vm_addr: u64, check_aligned: bool, -) -> Result<&'a mut T, Box> { +) -> Result<&'a mut T, Error> { let host_addr = translate(memory_mapping, access_type, vm_addr, size_of::() as u64)?; if check_aligned && (host_addr as *mut T as usize).wrapping_rem(align_of::()) != 0 { @@ -342,14 +341,14 @@ fn translate_type_mut<'a, T>( memory_mapping: &MemoryMapping, vm_addr: u64, check_aligned: bool, -) -> Result<&'a mut T, Box> { +) -> Result<&'a mut T, Error> { translate_type_inner::(memory_mapping, AccessType::Store, vm_addr, check_aligned) } fn translate_type<'a, T>( memory_mapping: &MemoryMapping, vm_addr: u64, check_aligned: bool, -) -> Result<&'a T, Box> { +) -> Result<&'a T, Error> { translate_type_inner::(memory_mapping, AccessType::Load, vm_addr, check_aligned) .map(|value| &*value) } @@ -361,7 +360,7 @@ fn translate_slice_inner<'a, T>( len: u64, check_aligned: bool, check_size: bool, -) -> Result<&'a mut [T], Box> { +) -> Result<&'a mut [T], Error> { if len == 0 { return Ok(&mut []); } @@ -384,7 +383,7 @@ fn translate_slice_mut<'a, T>( len: u64, check_aligned: bool, check_size: bool, -) -> Result<&'a mut [T], Box> { +) -> Result<&'a mut [T], Error> { translate_slice_inner::( memory_mapping, AccessType::Store, @@ -400,7 +399,7 @@ fn translate_slice<'a, T>( len: u64, check_aligned: bool, check_size: bool, -) -> Result<&'a [T], Box> { +) -> Result<&'a [T], Error> { translate_slice_inner::( memory_mapping, AccessType::Load, @@ -420,8 +419,8 @@ fn translate_string_and_do( len: u64, check_aligned: bool, check_size: bool, - work: &mut dyn FnMut(&str) -> Result>, -) -> Result> { + work: &mut dyn FnMut(&str) -> Result, +) -> Result { let buf = translate_slice::(memory_mapping, addr, len, check_aligned, check_size)?; let i = match buf.iter().position(|byte| *byte == 0) { Some(i) => i, @@ -474,7 +473,7 @@ declare_syscall!( _arg4: u64, _arg5: u64, _memory_mapping: &mut MemoryMapping, - ) -> Result> { + ) -> Result { Err(SyscallError::Abort.into()) } ); @@ -491,7 +490,7 @@ declare_syscall!( column: u64, _arg5: u64, memory_mapping: &mut MemoryMapping, - ) -> Result> { + ) -> Result { consume_compute_meter(invoke_context, len)?; translate_string_and_do( @@ -521,7 +520,7 @@ declare_syscall!( _arg4: u64, _arg5: u64, _memory_mapping: &mut MemoryMapping, - ) -> Result> { + ) -> Result { let allocator = invoke_context.get_allocator()?; let mut allocator = allocator .try_borrow_mut() @@ -557,7 +556,7 @@ fn translate_and_check_program_address_inputs<'a>( memory_mapping: &mut MemoryMapping, check_aligned: bool, check_size: bool, -) -> Result<(Vec<&'a [u8]>, &'a Pubkey), Box> { +) -> Result<(Vec<&'a [u8]>, &'a Pubkey), Error> { let untranslated_seeds = translate_slice::<&[&u8]>( memory_mapping, seeds_addr, @@ -582,7 +581,7 @@ fn translate_and_check_program_address_inputs<'a>( check_size, ) }) - .collect::, Box>>()?; + .collect::, Error>>()?; let program_id = translate_type::(memory_mapping, program_id_addr, check_aligned)?; Ok((seeds, program_id)) } @@ -598,7 +597,7 @@ declare_syscall!( address_addr: u64, _arg5: u64, memory_mapping: &mut MemoryMapping, - ) -> Result> { + ) -> Result { let cost = invoke_context .get_compute_budget() .create_program_address_units; @@ -642,7 +641,7 @@ declare_syscall!( address_addr: u64, bump_seed_addr: u64, memory_mapping: &mut MemoryMapping, - ) -> Result> { + ) -> Result { let cost = invoke_context .get_compute_budget() .create_program_address_units; @@ -712,7 +711,7 @@ declare_syscall!( _arg4: u64, _arg5: u64, memory_mapping: &mut MemoryMapping, - ) -> Result> { + ) -> Result { let compute_budget = invoke_context.get_compute_budget(); if compute_budget.sha256_max_slices < vals_len { ic_msg!( @@ -775,7 +774,7 @@ declare_syscall!( _arg4: u64, _arg5: u64, memory_mapping: &mut MemoryMapping, - ) -> Result> { + ) -> Result { let compute_budget = invoke_context.get_compute_budget(); if compute_budget.sha256_max_slices < vals_len { ic_msg!( @@ -838,7 +837,7 @@ declare_syscall!( result_addr: u64, _arg5: u64, memory_mapping: &mut MemoryMapping, - ) -> Result> { + ) -> Result { let cost = invoke_context.get_compute_budget().secp256k1_recover_cost; consume_compute_meter(invoke_context, cost)?; @@ -930,7 +929,7 @@ declare_syscall!( _arg4: u64, _arg5: u64, memory_mapping: &mut MemoryMapping, - ) -> Result> { + ) -> Result { use solana_zk_token_sdk::curve25519::{curve_syscall_traits::*, edwards, ristretto}; match curve_id { CURVE25519_EDWARDS => { @@ -987,7 +986,7 @@ declare_syscall!( right_input_addr: u64, result_point_addr: u64, memory_mapping: &mut MemoryMapping, - ) -> Result> { + ) -> Result { use solana_zk_token_sdk::curve25519::{ curve_syscall_traits::*, edwards, ristretto, scalar, }; @@ -1188,7 +1187,7 @@ declare_syscall!( points_len: u64, result_point_addr: u64, memory_mapping: &mut MemoryMapping, - ) -> Result> { + ) -> Result { use solana_zk_token_sdk::curve25519::{ curve_syscall_traits::*, edwards, ristretto, scalar, }; @@ -1291,7 +1290,7 @@ declare_syscall!( _arg4: u64, _arg5: u64, memory_mapping: &mut MemoryMapping, - ) -> Result> { + ) -> Result { let compute_budget = invoke_context.get_compute_budget(); if compute_budget.sha256_max_slices < vals_len { ic_msg!( @@ -1354,7 +1353,7 @@ declare_syscall!( _arg4: u64, _arg5: u64, memory_mapping: &mut MemoryMapping, - ) -> Result> { + ) -> Result { let budget = invoke_context.get_compute_budget(); let cost = len @@ -1402,7 +1401,7 @@ declare_syscall!( _arg4: u64, _arg5: u64, memory_mapping: &mut MemoryMapping, - ) -> Result> { + ) -> Result { let budget = invoke_context.get_compute_budget(); consume_compute_meter(invoke_context, budget.syscall_base_cost)?; @@ -1469,7 +1468,7 @@ declare_syscall!( data_addr: u64, accounts_addr: u64, memory_mapping: &mut MemoryMapping, - ) -> Result> { + ) -> Result { let budget = invoke_context.get_compute_budget(); consume_compute_meter(invoke_context, budget.syscall_base_cost)?; @@ -1618,7 +1617,7 @@ declare_syscall!( _arg4: u64, _arg5: u64, _memory_mapping: &mut MemoryMapping, - ) -> Result> { + ) -> Result { let budget = invoke_context.get_compute_budget(); consume_compute_meter(invoke_context, budget.syscall_base_cost)?; @@ -1638,7 +1637,7 @@ declare_syscall!( result_addr: u64, _arg5: u64, memory_mapping: &mut MemoryMapping, - ) -> Result> { + ) -> Result { use solana_sdk::alt_bn128::prelude::{ALT_BN128_ADD, ALT_BN128_MUL, ALT_BN128_PAIRING}; let budget = invoke_context.get_compute_budget(); let (cost, output): (u64, usize) = match group_op { @@ -1723,7 +1722,7 @@ declare_syscall!( _arg4: u64, _arg5: u64, memory_mapping: &mut MemoryMapping, - ) -> Result> { + ) -> Result { let params = &translate_slice::( memory_mapping, params, @@ -3437,7 +3436,7 @@ mod tests { program_id: &Pubkey, overlap_outputs: bool, syscall: BuiltInFunction>, - ) -> Result<(Pubkey, u8), Box> { + ) -> Result<(Pubkey, u8), Error> { const SEEDS_VA: u64 = 0x100000000; const PROGRAM_ID_VA: u64 = 0x200000000; const ADDRESS_VA: u64 = 0x300000000; @@ -3484,14 +3483,14 @@ mod tests { &mut memory_mapping, &mut result, ); - Result::>::from(result).map(|_| (address, bump_seed)) + Result::::from(result).map(|_| (address, bump_seed)) } fn create_program_address( invoke_context: &mut InvokeContext, seeds: &[&[u8]], address: &Pubkey, - ) -> Result> { + ) -> Result { let (address, _) = call_program_address_common( invoke_context, seeds, @@ -3506,7 +3505,7 @@ mod tests { invoke_context: &mut InvokeContext, seeds: &[&[u8]], address: &Pubkey, - ) -> Result<(Pubkey, u8), Box> { + ) -> Result<(Pubkey, u8), Error> { call_program_address_common( invoke_context, seeds, diff --git a/programs/bpf_loader/src/syscalls/sysvar.rs b/programs/bpf_loader/src/syscalls/sysvar.rs index fbd8624fc024c3..9ab061b8a25ba7 100644 --- a/programs/bpf_loader/src/syscalls/sysvar.rs +++ b/programs/bpf_loader/src/syscalls/sysvar.rs @@ -6,7 +6,7 @@ fn get_sysvar( check_aligned: bool, memory_mapping: &mut MemoryMapping, invoke_context: &mut InvokeContext, -) -> Result> { +) -> Result { consume_compute_meter( invoke_context, invoke_context @@ -33,7 +33,7 @@ declare_syscall!( _arg4: u64, _arg5: u64, memory_mapping: &mut MemoryMapping, - ) -> Result> { + ) -> Result { get_sysvar( invoke_context.get_sysvar_cache().get_clock(), var_addr, @@ -55,7 +55,7 @@ declare_syscall!( _arg4: u64, _arg5: u64, memory_mapping: &mut MemoryMapping, - ) -> Result> { + ) -> Result { get_sysvar( invoke_context.get_sysvar_cache().get_epoch_schedule(), var_addr, @@ -77,7 +77,7 @@ declare_syscall!( _arg4: u64, _arg5: u64, memory_mapping: &mut MemoryMapping, - ) -> Result> { + ) -> Result { #[allow(deprecated)] { get_sysvar( @@ -102,7 +102,7 @@ declare_syscall!( _arg4: u64, _arg5: u64, memory_mapping: &mut MemoryMapping, - ) -> Result> { + ) -> Result { get_sysvar( invoke_context.get_sysvar_cache().get_rent(), var_addr,