(cherry picked from commit 9d53eca6e3
)
Co-authored-by: Jack May <jack@solana.com>
This commit is contained in:
@ -253,10 +253,10 @@ fn process_instruction_common(
|
|||||||
return Err(InstructionError::IncorrectProgramId);
|
return Err(InstructionError::IncorrectProgramId);
|
||||||
}
|
}
|
||||||
|
|
||||||
let executor = match invoke_context.get_executor(program.unsigned_key()) {
|
let executor = match invoke_context.get_executor(program_id) {
|
||||||
Some(executor) => executor,
|
Some(executor) => executor,
|
||||||
None => create_and_cache_executor(
|
None => create_and_cache_executor(
|
||||||
program.unsigned_key(),
|
program_id,
|
||||||
&program.try_account_ref()?.data[offset..],
|
&program.try_account_ref()?.data[offset..],
|
||||||
invoke_context,
|
invoke_context,
|
||||||
use_jit,
|
use_jit,
|
||||||
@ -264,7 +264,7 @@ fn process_instruction_common(
|
|||||||
};
|
};
|
||||||
executor.execute(
|
executor.execute(
|
||||||
loader_id,
|
loader_id,
|
||||||
first_account.unsigned_key(),
|
program_id,
|
||||||
keyed_accounts,
|
keyed_accounts,
|
||||||
instruction_data,
|
instruction_data,
|
||||||
invoke_context,
|
invoke_context,
|
||||||
@ -425,7 +425,7 @@ fn process_loader_upgradeable_instruction(
|
|||||||
|
|
||||||
// Load and verify the program bits
|
// Load and verify the program bits
|
||||||
let _ = create_and_cache_executor(
|
let _ = create_and_cache_executor(
|
||||||
programdata.unsigned_key(),
|
program_id,
|
||||||
&buffer.try_account_ref()?.data[buffer_data_offset..],
|
&buffer.try_account_ref()?.data[buffer_data_offset..],
|
||||||
invoke_context,
|
invoke_context,
|
||||||
use_jit,
|
use_jit,
|
||||||
@ -538,7 +538,7 @@ fn process_loader_upgradeable_instruction(
|
|||||||
// Load and verify the program bits
|
// Load and verify the program bits
|
||||||
|
|
||||||
let _ = create_and_cache_executor(
|
let _ = create_and_cache_executor(
|
||||||
programdata.unsigned_key(),
|
program.unsigned_key(),
|
||||||
&buffer.try_account_ref()?.data[buffer_data_offset..],
|
&buffer.try_account_ref()?.data[buffer_data_offset..],
|
||||||
invoke_context,
|
invoke_context,
|
||||||
use_jit,
|
use_jit,
|
||||||
@ -723,8 +723,7 @@ impl Executor for BPFExecutor {
|
|||||||
let invoke_depth = invoke_context.invoke_depth();
|
let invoke_depth = invoke_context.invoke_depth();
|
||||||
|
|
||||||
let mut keyed_accounts_iter = keyed_accounts.iter();
|
let mut keyed_accounts_iter = keyed_accounts.iter();
|
||||||
let program = next_keyed_account(&mut keyed_accounts_iter)?;
|
let _ = next_keyed_account(&mut keyed_accounts_iter)?;
|
||||||
|
|
||||||
let parameter_accounts = keyed_accounts_iter.as_slice();
|
let parameter_accounts = keyed_accounts_iter.as_slice();
|
||||||
let mut parameter_bytes =
|
let mut parameter_bytes =
|
||||||
serialize_parameters(loader_id, program_id, parameter_accounts, &instruction_data)?;
|
serialize_parameters(loader_id, program_id, parameter_accounts, &instruction_data)?;
|
||||||
@ -744,7 +743,7 @@ impl Executor for BPFExecutor {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
stable_log::program_invoke(&logger, program.unsigned_key(), invoke_depth);
|
stable_log::program_invoke(&logger, program_id, invoke_depth);
|
||||||
let mut instruction_meter = ThisInstructionMeter::new(compute_meter.clone());
|
let mut instruction_meter = ThisInstructionMeter::new(compute_meter.clone());
|
||||||
let before = compute_meter.borrow().get_remaining();
|
let before = compute_meter.borrow().get_remaining();
|
||||||
let result = if use_jit {
|
let result = if use_jit {
|
||||||
@ -756,7 +755,7 @@ impl Executor for BPFExecutor {
|
|||||||
log!(
|
log!(
|
||||||
logger,
|
logger,
|
||||||
"Program {} consumed {} of {} compute units",
|
"Program {} consumed {} of {} compute units",
|
||||||
program.unsigned_key(),
|
program_id,
|
||||||
before - after,
|
before - after,
|
||||||
before
|
before
|
||||||
);
|
);
|
||||||
@ -764,17 +763,12 @@ impl Executor for BPFExecutor {
|
|||||||
Ok(status) => {
|
Ok(status) => {
|
||||||
if status != SUCCESS {
|
if status != SUCCESS {
|
||||||
let error: InstructionError = status.into();
|
let error: InstructionError = status.into();
|
||||||
stable_log::program_failure(&logger, program.unsigned_key(), &error);
|
stable_log::program_failure(&logger, program_id, &error);
|
||||||
return Err(error);
|
return Err(error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Err(error) => {
|
Err(error) => {
|
||||||
log!(
|
log!(logger, "Program {} BPF VM error: {}", program_id, error);
|
||||||
logger,
|
|
||||||
"Program {} BPF VM error: {}",
|
|
||||||
program.unsigned_key(),
|
|
||||||
error
|
|
||||||
);
|
|
||||||
let error = match error {
|
let error = match error {
|
||||||
EbpfError::UserError(BPFError::SyscallError(
|
EbpfError::UserError(BPFError::SyscallError(
|
||||||
SyscallError::InstructionError(error),
|
SyscallError::InstructionError(error),
|
||||||
@ -785,13 +779,13 @@ impl Executor for BPFExecutor {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
stable_log::program_failure(&logger, program.unsigned_key(), &error);
|
stable_log::program_failure(&logger, program_id, &error);
|
||||||
return Err(error);
|
return Err(error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
deserialize_parameters(loader_id, parameter_accounts, ¶meter_bytes)?;
|
deserialize_parameters(loader_id, parameter_accounts, ¶meter_bytes)?;
|
||||||
stable_log::program_success(&logger, program.unsigned_key());
|
stable_log::program_success(&logger, program_id);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user