Skip to content

Commit c87ab7c

Browse files
authored
Use Instruction instead of StableInstruction across runtime (#7040)
Use Instruction instead of StableInstruction
1 parent de80e15 commit c87ab7c

File tree

6 files changed

+26
-35
lines changed

6 files changed

+26
-35
lines changed

program-runtime/src/invoke_context.rs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use {
1212
solana_clock::Slot,
1313
solana_epoch_schedule::EpochSchedule,
1414
solana_hash::Hash,
15-
solana_instruction::{error::InstructionError, AccountMeta},
15+
solana_instruction::{error::InstructionError, AccountMeta, Instruction},
1616
solana_log_collector::{ic_msg, LogCollector},
1717
solana_measure::measure::Measure,
1818
solana_pubkey::Pubkey,
@@ -26,7 +26,6 @@ use {
2626
solana_sdk_ids::{
2727
bpf_loader, bpf_loader_deprecated, bpf_loader_upgradeable, loader_v4, native_loader, sysvar,
2828
},
29-
solana_stable_layout::stable_instruction::StableInstruction,
3029
solana_svm_callback::InvokeContextCallback,
3130
solana_svm_feature_set::SVMFeatureSet,
3231
solana_timings::{ExecuteDetailsTimings, ExecuteTimings},
@@ -304,7 +303,7 @@ impl<'a> InvokeContext<'a> {
304303
/// Entrypoint for a cross-program invocation from a builtin program
305304
pub fn native_invoke(
306305
&mut self,
307-
instruction: StableInstruction,
306+
instruction: Instruction,
308307
signers: &[Pubkey],
309308
) -> Result<(), InstructionError> {
310309
let (instruction_accounts, program_indices) =
@@ -324,7 +323,7 @@ impl<'a> InvokeContext<'a> {
324323
#[allow(clippy::type_complexity)]
325324
pub fn prepare_instruction(
326325
&mut self,
327-
instruction: &StableInstruction,
326+
instruction: &Instruction,
328327
signers: &[Pubkey],
329328
) -> Result<(Vec<InstructionAccount>, Vec<IndexOfAccount>), InstructionError> {
330329
// Finds the index of each account in the instruction by its pubkey.
@@ -333,7 +332,7 @@ impl<'a> InvokeContext<'a> {
333332
// but performed on a very small slice and requires no heap allocations.
334333
let instruction_context = self.transaction_context.get_current_instruction_context()?;
335334
let mut deduplicated_instruction_accounts: Vec<InstructionAccount> = Vec::new();
336-
let mut duplicate_indicies = Vec::with_capacity(instruction.accounts.len() as usize);
335+
let mut duplicate_indicies = Vec::with_capacity(instruction.accounts.len());
337336
for (instruction_account_index, account_meta) in instruction.accounts.iter().enumerate() {
338337
let index_in_transaction = self
339338
.transaction_context
@@ -1028,7 +1027,7 @@ mod tests {
10281027
assert_eq!(result, Err(InstructionError::UnbalancedInstruction));
10291028
result?;
10301029
invoke_context
1031-
.native_invoke(inner_instruction.into(), &[])
1030+
.native_invoke(inner_instruction, &[])
10321031
.and(invoke_context.pop())?;
10331032
}
10341033
MockInstruction::UnbalancedPop => instruction_context
@@ -1186,7 +1185,7 @@ mod tests {
11861185
let inner_instruction =
11871186
Instruction::new_with_bincode(callee_program_id, &instruction, metas.clone());
11881187
let result = invoke_context
1189-
.native_invoke(inner_instruction.into(), &[])
1188+
.native_invoke(inner_instruction, &[])
11901189
.and(invoke_context.pop());
11911190
assert_eq!(result, expected_result);
11921191
}
@@ -1250,7 +1249,6 @@ mod tests {
12501249
},
12511250
metas.clone(),
12521251
);
1253-
let inner_instruction = StableInstruction::from(inner_instruction);
12541252
let (inner_instruction_accounts, program_indices) = invoke_context
12551253
.prepare_instruction(&inner_instruction, &[])
12561254
.unwrap();

program-test/src/lib.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ use {
4242
runtime_config::RuntimeConfig,
4343
},
4444
solana_signer::Signer,
45-
solana_stable_layout::stable_instruction::StableInstruction,
4645
solana_sysvar::Sysvar,
4746
solana_sysvar_id::SysvarId,
4847
solana_timings::ExecuteTimings,
@@ -250,7 +249,6 @@ impl solana_sysvar::program_stubs::SyscallStubs for SyscallStubs {
250249
account_infos: &[AccountInfo],
251250
signers_seeds: &[&[&[u8]]],
252251
) -> ProgramResult {
253-
let instruction = StableInstruction::from(instruction.clone());
254252
let invoke_context = get_invoke_context();
255253
let log_collector = invoke_context.get_log_collector();
256254
let transaction_context = &invoke_context.transaction_context;
@@ -273,7 +271,7 @@ impl solana_sysvar::program_stubs::SyscallStubs for SyscallStubs {
273271
.collect::<Vec<_>>();
274272

275273
let (instruction_accounts, program_indices) = invoke_context
276-
.prepare_instruction(&instruction, &signers)
274+
.prepare_instruction(instruction, &signers)
277275
.unwrap();
278276

279277
// Copy caller's account_info modifications into invoke_context accounts

programs/bpf_loader/src/lib.rs

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -659,7 +659,7 @@ fn process_loader_upgradeable_instruction(
659659
.iter()
660660
.map(|seeds| Pubkey::create_program_address(seeds, caller_program_id))
661661
.collect::<Result<Vec<Pubkey>, solana_pubkey::PubkeyError>>()?;
662-
invoke_context.native_invoke(instruction.into(), signers.as_slice())?;
662+
invoke_context.native_invoke(instruction, signers.as_slice())?;
663663

664664
// Load and verify the program bits
665665
let transaction_context = &invoke_context.transaction_context;
@@ -1291,8 +1291,7 @@ fn process_loader_upgradeable_instruction(
12911291
&provided_authority_address,
12921292
program_len as u32,
12931293
&program_address,
1294-
)
1295-
.into(),
1294+
),
12961295
&[],
12971296
)?;
12981297

@@ -1304,17 +1303,15 @@ fn process_loader_upgradeable_instruction(
13041303
0,
13051304
0,
13061305
program_len as u32,
1307-
)
1308-
.into(),
1306+
),
13091307
&[],
13101308
)?;
13111309

13121310
invoke_context.native_invoke(
13131311
solana_loader_v4_interface::instruction::deploy(
13141312
&program_address,
13151313
&provided_authority_address,
1316-
)
1317-
.into(),
1314+
),
13181315
&[],
13191316
)?;
13201317

@@ -1324,8 +1321,7 @@ fn process_loader_upgradeable_instruction(
13241321
&program_address,
13251322
&provided_authority_address,
13261323
&program_address,
1327-
)
1328-
.into(),
1324+
),
13291325
&[],
13301326
)?;
13311327
} else if migration_authority::check_id(&provided_authority_address) {
@@ -1334,8 +1330,7 @@ fn process_loader_upgradeable_instruction(
13341330
&program_address,
13351331
&provided_authority_address,
13361332
&upgrade_authority_address.unwrap(),
1337-
)
1338-
.into(),
1333+
),
13391334
&[],
13401335
)?;
13411336
}
@@ -1496,7 +1491,7 @@ fn common_extend_program(
14961491
)?;
14971492

14981493
invoke_context.native_invoke(
1499-
system_instruction::transfer(&payer_key, &programdata_key, required_payment).into(),
1494+
system_instruction::transfer(&payer_key, &programdata_key, required_payment),
15001495
&[],
15011496
)?;
15021497
}

programs/bpf_loader/src/syscalls/cpi.rs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use {
22
super::*,
33
crate::{translate_inner, translate_slice_inner, translate_type_inner},
4+
solana_instruction::Instruction,
45
solana_loader_v3_interface::instruction as bpf_loader_upgradeable,
56
solana_measure::measure::Measure,
67
solana_program_runtime::{
@@ -326,7 +327,7 @@ trait SyscallInvokeSigned {
326327
addr: u64,
327328
memory_mapping: &MemoryMapping,
328329
invoke_context: &mut InvokeContext,
329-
) -> Result<StableInstruction, Error>;
330+
) -> Result<Instruction, Error>;
330331
fn translate_accounts<'a>(
331332
instruction_accounts: &[InstructionAccount],
332333
account_infos_addr: u64,
@@ -373,7 +374,7 @@ impl SyscallInvokeSigned for SyscallInvokeSignedRust {
373374
addr: u64,
374375
memory_mapping: &MemoryMapping,
375376
invoke_context: &mut InvokeContext,
376-
) -> Result<StableInstruction, Error> {
377+
) -> Result<Instruction, Error> {
377378
let ix = translate_type::<StableInstruction>(
378379
memory_mapping,
379380
addr,
@@ -419,9 +420,9 @@ impl SyscallInvokeSigned for SyscallInvokeSignedRust {
419420
accounts.push(account_meta.clone());
420421
}
421422

422-
Ok(StableInstruction {
423-
accounts: accounts.into(),
424-
data: data.into(),
423+
Ok(Instruction {
424+
accounts,
425+
data,
425426
program_id: ix.program_id,
426427
})
427428
}
@@ -580,7 +581,7 @@ impl SyscallInvokeSigned for SyscallInvokeSignedC {
580581
addr: u64,
581582
memory_mapping: &MemoryMapping,
582583
invoke_context: &mut InvokeContext,
583-
) -> Result<StableInstruction, Error> {
584+
) -> Result<Instruction, Error> {
584585
let ix_c = translate_type::<SolInstruction>(
585586
memory_mapping,
586587
addr,
@@ -641,9 +642,9 @@ impl SyscallInvokeSigned for SyscallInvokeSignedC {
641642
});
642643
}
643644

644-
Ok(StableInstruction {
645-
accounts: accounts.into(),
646-
data: data.into(),
645+
Ok(Instruction {
646+
accounts,
647+
data,
647648
program_id: *program_id,
648649
})
649650
}

rpc/src/rpc.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4695,8 +4695,7 @@ pub mod tests {
46954695
lamports,
46964696
space,
46974697
&owner_pubkey,
4698-
)
4699-
.into(),
4698+
),
47004699
&[],
47014700
)?;
47024701

runtime/src/bank/builtin_programs.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ mod tests_core_bpf_migration {
108108

109109
let instruction = Instruction::new_with_bytes(*target_program_id, &[], Vec::new());
110110

111-
invoke_context.native_invoke(instruction.into(), &[])
111+
invoke_context.native_invoke(instruction, &[])
112112
});
113113
}
114114

0 commit comments

Comments
 (0)