Refactor: Cleanup InstructionProcessor (#21404)
* Moves create_message(), native_invoke() and process_cross_program_instruction() from the InstructionProcessor to the InvokeContext so that they can have a useful "self" parameter. * Moves InstructionProcessor into InvokeContext and Bank. * Moves ExecuteDetailsTimings into its own file. * Moves Executor into invoke_context.rs * Moves PreAccount into its own file. * impl AbiExample for BuiltinPrograms
This commit is contained in:
committed by
GitHub
parent
e922c2da9d
commit
b78f5b6032
@ -1,10 +1,10 @@
|
||||
use serde::{Deserialize, Serialize};
|
||||
use solana_measure::measure::Measure;
|
||||
use solana_program_runtime::{
|
||||
instruction_processor::{ExecuteDetailsTimings, Executors, InstructionProcessor},
|
||||
instruction_recorder::InstructionRecorder,
|
||||
invoke_context::{ComputeMeter, InvokeContext, ThisInvokeContext},
|
||||
invoke_context::{BuiltinProgram, ComputeMeter, Executors, InvokeContext, ThisInvokeContext},
|
||||
log_collector::LogCollector,
|
||||
timings::ExecuteDetailsTimings,
|
||||
};
|
||||
use solana_sdk::{
|
||||
account::{AccountSharedData, WritableAccount},
|
||||
@ -40,7 +40,7 @@ impl MessageProcessor {
|
||||
/// The accounts are committed back to the bank only if every instruction succeeds.
|
||||
#[allow(clippy::too_many_arguments)]
|
||||
pub fn process_message(
|
||||
instruction_processor: &InstructionProcessor,
|
||||
builtin_programs: &[BuiltinProgram],
|
||||
message: &Message,
|
||||
program_indices: &[Vec<usize>],
|
||||
accounts: &[(Pubkey, Rc<RefCell<AccountSharedData>>)],
|
||||
@ -59,7 +59,7 @@ impl MessageProcessor {
|
||||
let mut invoke_context = ThisInvokeContext::new(
|
||||
rent,
|
||||
accounts,
|
||||
instruction_processor.programs(),
|
||||
builtin_programs,
|
||||
sysvars,
|
||||
log_collector,
|
||||
compute_budget,
|
||||
@ -107,8 +107,7 @@ impl MessageProcessor {
|
||||
let result = invoke_context
|
||||
.push(message, instruction, program_indices, None)
|
||||
.and_then(|_| {
|
||||
instruction_processor
|
||||
.process_instruction(&instruction.data, &mut invoke_context)?;
|
||||
invoke_context.process_instruction(&instruction.data)?;
|
||||
invoke_context.verify(message, instruction, program_indices)?;
|
||||
timings.accumulate(&invoke_context.timings);
|
||||
Ok(())
|
||||
@ -199,8 +198,10 @@ mod tests {
|
||||
|
||||
let mock_system_program_id = Pubkey::new(&[2u8; 32]);
|
||||
let rent_collector = RentCollector::default();
|
||||
let mut instruction_processor = InstructionProcessor::default();
|
||||
instruction_processor.add_program(&mock_system_program_id, mock_system_process_instruction);
|
||||
let builtin_programs = &[BuiltinProgram {
|
||||
program_id: mock_system_program_id,
|
||||
process_instruction: mock_system_process_instruction,
|
||||
}];
|
||||
|
||||
let program_account = Rc::new(RefCell::new(create_loadable_account_for_test(
|
||||
"mock_system_program",
|
||||
@ -234,7 +235,7 @@ mod tests {
|
||||
);
|
||||
|
||||
let result = MessageProcessor::process_message(
|
||||
&instruction_processor,
|
||||
builtin_programs,
|
||||
&message,
|
||||
&program_indices,
|
||||
&accounts,
|
||||
@ -264,7 +265,7 @@ mod tests {
|
||||
);
|
||||
|
||||
let result = MessageProcessor::process_message(
|
||||
&instruction_processor,
|
||||
builtin_programs,
|
||||
&message,
|
||||
&program_indices,
|
||||
&accounts,
|
||||
@ -298,7 +299,7 @@ mod tests {
|
||||
);
|
||||
|
||||
let result = MessageProcessor::process_message(
|
||||
&instruction_processor,
|
||||
builtin_programs,
|
||||
&message,
|
||||
&program_indices,
|
||||
&accounts,
|
||||
@ -404,8 +405,10 @@ mod tests {
|
||||
|
||||
let mock_program_id = Pubkey::new(&[2u8; 32]);
|
||||
let rent_collector = RentCollector::default();
|
||||
let mut instruction_processor = InstructionProcessor::default();
|
||||
instruction_processor.add_program(&mock_program_id, mock_system_process_instruction);
|
||||
let builtin_programs = &[BuiltinProgram {
|
||||
program_id: mock_program_id,
|
||||
process_instruction: mock_system_process_instruction,
|
||||
}];
|
||||
|
||||
let program_account = Rc::new(RefCell::new(create_loadable_account_for_test(
|
||||
"mock_system_program",
|
||||
@ -441,7 +444,7 @@ mod tests {
|
||||
Some(&accounts[0].0),
|
||||
);
|
||||
let result = MessageProcessor::process_message(
|
||||
&instruction_processor,
|
||||
builtin_programs,
|
||||
&message,
|
||||
&program_indices,
|
||||
&accounts,
|
||||
@ -475,7 +478,7 @@ mod tests {
|
||||
Some(&accounts[0].0),
|
||||
);
|
||||
let result = MessageProcessor::process_message(
|
||||
&instruction_processor,
|
||||
builtin_programs,
|
||||
&message,
|
||||
&program_indices,
|
||||
&accounts,
|
||||
@ -506,7 +509,7 @@ mod tests {
|
||||
Some(&accounts[0].0),
|
||||
);
|
||||
let result = MessageProcessor::process_message(
|
||||
&instruction_processor,
|
||||
builtin_programs,
|
||||
&message,
|
||||
&program_indices,
|
||||
&accounts,
|
||||
@ -538,8 +541,10 @@ mod tests {
|
||||
) -> Result<(), InstructionError> {
|
||||
Err(InstructionError::Custom(0xbabb1e))
|
||||
}
|
||||
let mut instruction_processor = InstructionProcessor::default();
|
||||
instruction_processor.add_program(&mock_program_id, mock_process_instruction);
|
||||
let builtin_programs = &[BuiltinProgram {
|
||||
program_id: mock_program_id,
|
||||
process_instruction: mock_process_instruction,
|
||||
}];
|
||||
|
||||
let secp256k1_account = AccountSharedData::new_ref(1, 0, &native_loader::id());
|
||||
secp256k1_account.borrow_mut().set_executable(true);
|
||||
@ -562,7 +567,7 @@ mod tests {
|
||||
);
|
||||
|
||||
let result = MessageProcessor::process_message(
|
||||
&instruction_processor,
|
||||
builtin_programs,
|
||||
&message,
|
||||
&[vec![0], vec![1]],
|
||||
&accounts,
|
||||
|
Reference in New Issue
Block a user