diff --git a/program-runtime/src/invoke_context.rs b/program-runtime/src/invoke_context.rs index 70a8f3de580225..628db069a2d890 100644 --- a/program-runtime/src/invoke_context.rs +++ b/program-runtime/src/invoke_context.rs @@ -12,7 +12,7 @@ use { solana_clock::Slot, solana_epoch_schedule::EpochSchedule, solana_hash::Hash, - solana_instruction::{error::InstructionError, AccountMeta}, + solana_instruction::{error::InstructionError, AccountMeta, Instruction}, solana_log_collector::{ic_msg, LogCollector}, solana_measure::measure::Measure, solana_pubkey::Pubkey, @@ -26,7 +26,6 @@ use { solana_sdk_ids::{ bpf_loader, bpf_loader_deprecated, bpf_loader_upgradeable, loader_v4, native_loader, sysvar, }, - solana_stable_layout::stable_instruction::StableInstruction, solana_svm_callback::InvokeContextCallback, solana_svm_feature_set::SVMFeatureSet, solana_timings::{ExecuteDetailsTimings, ExecuteTimings}, @@ -304,7 +303,7 @@ impl<'a> InvokeContext<'a> { /// Entrypoint for a cross-program invocation from a builtin program pub fn native_invoke( &mut self, - instruction: StableInstruction, + instruction: Instruction, signers: &[Pubkey], ) -> Result<(), InstructionError> { let (instruction_accounts, program_indices) = @@ -324,7 +323,7 @@ impl<'a> InvokeContext<'a> { #[allow(clippy::type_complexity)] pub fn prepare_instruction( &mut self, - instruction: &StableInstruction, + instruction: &Instruction, signers: &[Pubkey], ) -> Result<(Vec, Vec), InstructionError> { // Finds the index of each account in the instruction by its pubkey. @@ -333,7 +332,7 @@ impl<'a> InvokeContext<'a> { // but performed on a very small slice and requires no heap allocations. let instruction_context = self.transaction_context.get_current_instruction_context()?; let mut deduplicated_instruction_accounts: Vec = Vec::new(); - let mut duplicate_indicies = Vec::with_capacity(instruction.accounts.len() as usize); + let mut duplicate_indicies = Vec::with_capacity(instruction.accounts.len()); for (instruction_account_index, account_meta) in instruction.accounts.iter().enumerate() { let index_in_transaction = self .transaction_context @@ -1028,7 +1027,7 @@ mod tests { assert_eq!(result, Err(InstructionError::UnbalancedInstruction)); result?; invoke_context - .native_invoke(inner_instruction.into(), &[]) + .native_invoke(inner_instruction, &[]) .and(invoke_context.pop())?; } MockInstruction::UnbalancedPop => instruction_context @@ -1186,7 +1185,7 @@ mod tests { let inner_instruction = Instruction::new_with_bincode(callee_program_id, &instruction, metas.clone()); let result = invoke_context - .native_invoke(inner_instruction.into(), &[]) + .native_invoke(inner_instruction, &[]) .and(invoke_context.pop()); assert_eq!(result, expected_result); } @@ -1250,7 +1249,6 @@ mod tests { }, metas.clone(), ); - let inner_instruction = StableInstruction::from(inner_instruction); let (inner_instruction_accounts, program_indices) = invoke_context .prepare_instruction(&inner_instruction, &[]) .unwrap(); diff --git a/program-test/src/lib.rs b/program-test/src/lib.rs index a97eb0d517ea62..ad3ba4ca88a732 100644 --- a/program-test/src/lib.rs +++ b/program-test/src/lib.rs @@ -42,7 +42,6 @@ use { runtime_config::RuntimeConfig, }, solana_signer::Signer, - solana_stable_layout::stable_instruction::StableInstruction, solana_sysvar::Sysvar, solana_sysvar_id::SysvarId, solana_timings::ExecuteTimings, @@ -250,7 +249,6 @@ impl solana_sysvar::program_stubs::SyscallStubs for SyscallStubs { account_infos: &[AccountInfo], signers_seeds: &[&[&[u8]]], ) -> ProgramResult { - let instruction = StableInstruction::from(instruction.clone()); let invoke_context = get_invoke_context(); let log_collector = invoke_context.get_log_collector(); let transaction_context = &invoke_context.transaction_context; @@ -273,7 +271,7 @@ impl solana_sysvar::program_stubs::SyscallStubs for SyscallStubs { .collect::>(); let (instruction_accounts, program_indices) = invoke_context - .prepare_instruction(&instruction, &signers) + .prepare_instruction(instruction, &signers) .unwrap(); // Copy caller's account_info modifications into invoke_context accounts diff --git a/programs/bpf_loader/src/lib.rs b/programs/bpf_loader/src/lib.rs index 1651fef03fe023..0f5f989f3d5be8 100644 --- a/programs/bpf_loader/src/lib.rs +++ b/programs/bpf_loader/src/lib.rs @@ -659,7 +659,7 @@ fn process_loader_upgradeable_instruction( .iter() .map(|seeds| Pubkey::create_program_address(seeds, caller_program_id)) .collect::, solana_pubkey::PubkeyError>>()?; - invoke_context.native_invoke(instruction.into(), signers.as_slice())?; + invoke_context.native_invoke(instruction, signers.as_slice())?; // Load and verify the program bits let transaction_context = &invoke_context.transaction_context; @@ -1291,8 +1291,7 @@ fn process_loader_upgradeable_instruction( &provided_authority_address, program_len as u32, &program_address, - ) - .into(), + ), &[], )?; @@ -1304,8 +1303,7 @@ fn process_loader_upgradeable_instruction( 0, 0, program_len as u32, - ) - .into(), + ), &[], )?; @@ -1313,8 +1311,7 @@ fn process_loader_upgradeable_instruction( solana_loader_v4_interface::instruction::deploy( &program_address, &provided_authority_address, - ) - .into(), + ), &[], )?; @@ -1324,8 +1321,7 @@ fn process_loader_upgradeable_instruction( &program_address, &provided_authority_address, &program_address, - ) - .into(), + ), &[], )?; } else if migration_authority::check_id(&provided_authority_address) { @@ -1334,8 +1330,7 @@ fn process_loader_upgradeable_instruction( &program_address, &provided_authority_address, &upgrade_authority_address.unwrap(), - ) - .into(), + ), &[], )?; } @@ -1496,7 +1491,7 @@ fn common_extend_program( )?; invoke_context.native_invoke( - system_instruction::transfer(&payer_key, &programdata_key, required_payment).into(), + system_instruction::transfer(&payer_key, &programdata_key, required_payment), &[], )?; } diff --git a/programs/bpf_loader/src/syscalls/cpi.rs b/programs/bpf_loader/src/syscalls/cpi.rs index 6eb4e46a401c91..675702e7a2d579 100644 --- a/programs/bpf_loader/src/syscalls/cpi.rs +++ b/programs/bpf_loader/src/syscalls/cpi.rs @@ -1,6 +1,7 @@ use { super::*, crate::{translate_inner, translate_slice_inner, translate_type_inner}, + solana_instruction::Instruction, solana_loader_v3_interface::instruction as bpf_loader_upgradeable, solana_measure::measure::Measure, solana_program_runtime::{ @@ -326,7 +327,7 @@ trait SyscallInvokeSigned { addr: u64, memory_mapping: &MemoryMapping, invoke_context: &mut InvokeContext, - ) -> Result; + ) -> Result; fn translate_accounts<'a>( instruction_accounts: &[InstructionAccount], account_infos_addr: u64, @@ -373,7 +374,7 @@ impl SyscallInvokeSigned for SyscallInvokeSignedRust { addr: u64, memory_mapping: &MemoryMapping, invoke_context: &mut InvokeContext, - ) -> Result { + ) -> Result { let ix = translate_type::( memory_mapping, addr, @@ -419,9 +420,9 @@ impl SyscallInvokeSigned for SyscallInvokeSignedRust { accounts.push(account_meta.clone()); } - Ok(StableInstruction { - accounts: accounts.into(), - data: data.into(), + Ok(Instruction { + accounts, + data, program_id: ix.program_id, }) } @@ -580,7 +581,7 @@ impl SyscallInvokeSigned for SyscallInvokeSignedC { addr: u64, memory_mapping: &MemoryMapping, invoke_context: &mut InvokeContext, - ) -> Result { + ) -> Result { let ix_c = translate_type::( memory_mapping, addr, @@ -641,9 +642,9 @@ impl SyscallInvokeSigned for SyscallInvokeSignedC { }); } - Ok(StableInstruction { - accounts: accounts.into(), - data: data.into(), + Ok(Instruction { + accounts, + data, program_id: *program_id, }) } diff --git a/rpc/src/rpc.rs b/rpc/src/rpc.rs index 1df8307ebd9bc3..054d2cc443bca6 100644 --- a/rpc/src/rpc.rs +++ b/rpc/src/rpc.rs @@ -4695,8 +4695,7 @@ pub mod tests { lamports, space, &owner_pubkey, - ) - .into(), + ), &[], )?; diff --git a/runtime/src/bank/builtin_programs.rs b/runtime/src/bank/builtin_programs.rs index a0bcbd607019b5..102680c055d950 100644 --- a/runtime/src/bank/builtin_programs.rs +++ b/runtime/src/bank/builtin_programs.rs @@ -108,7 +108,7 @@ mod tests_core_bpf_migration { let instruction = Instruction::new_with_bytes(*target_program_id, &[], Vec::new()); - invoke_context.native_invoke(instruction.into(), &[]) + invoke_context.native_invoke(instruction, &[]) }); }