CPI without Account Refs (#20034)
* Removes search for accounts and unsafe lifetime transmute in InvokeContext::push(). * Replaces accounts by account_indices in verify_and_update() and process_cross_program_instruction(). Co-authored-by: Justin Starry <justin.m.starry@gmail.com>
This commit is contained in:
committed by
GitHub
parent
f128cf69a5
commit
b507715d44
@ -51,19 +51,15 @@ impl<'a> InvokeContextStackFrame<'a> {
|
||||
/// Invocation context passed to loaders
|
||||
pub trait InvokeContext {
|
||||
/// Push a stack frame onto the invocation stack
|
||||
///
|
||||
/// Used in MessageProcessor::process_cross_program_instruction
|
||||
fn push(
|
||||
&mut self,
|
||||
key: &Pubkey,
|
||||
message: &Message,
|
||||
instruction: &CompiledInstruction,
|
||||
program_indices: &[usize],
|
||||
instruction_accounts: &[(Pubkey, Rc<RefCell<AccountSharedData>>)],
|
||||
account_indices: &[usize],
|
||||
) -> Result<(), InstructionError>;
|
||||
/// Pop a stack frame from the invocation stack
|
||||
///
|
||||
/// Used in MessageProcessor::process_cross_program_instruction
|
||||
fn pop(&mut self);
|
||||
/// Current depth of the invocation stake
|
||||
fn invoke_depth(&self) -> usize;
|
||||
@ -71,7 +67,7 @@ pub trait InvokeContext {
|
||||
fn verify_and_update(
|
||||
&mut self,
|
||||
instruction: &CompiledInstruction,
|
||||
accounts: &[(Pubkey, Rc<RefCell<AccountSharedData>>)],
|
||||
account_indices: &[usize],
|
||||
write_privileges: &[bool],
|
||||
) -> Result<(), InstructionError>;
|
||||
/// Get the program ID of the currently executing program
|
||||
@ -478,7 +474,7 @@ impl<'a> InvokeContext for MockInvokeContext<'a> {
|
||||
_message: &Message,
|
||||
_instruction: &CompiledInstruction,
|
||||
_program_indices: &[usize],
|
||||
_instruction_accounts: &[(Pubkey, Rc<RefCell<AccountSharedData>>)],
|
||||
_account_indices: &[usize],
|
||||
) -> Result<(), InstructionError> {
|
||||
self.invoke_stack.push(InvokeContextStackFrame::new(
|
||||
*_key,
|
||||
@ -495,7 +491,7 @@ impl<'a> InvokeContext for MockInvokeContext<'a> {
|
||||
fn verify_and_update(
|
||||
&mut self,
|
||||
_instruction: &CompiledInstruction,
|
||||
_accounts: &[(Pubkey, Rc<RefCell<AccountSharedData>>)],
|
||||
_account_indices: &[usize],
|
||||
_write_pivileges: &[bool],
|
||||
) -> Result<(), InstructionError> {
|
||||
Ok(())
|
||||
|
Reference in New Issue
Block a user