* Partial revert "Updates documentation around what needs to be passed in CPI. (#21633)"
* Enforces the program_id being passed explicitly by removing it from get_instruction_keyed_accounts().
* instruction_accounts => instructions_account
(cherry picked from commit ba8e15848e
)
Co-authored-by: Alexander Meißner <AlexanderMeissner@gmx.net>
This commit is contained in:
@ -724,9 +724,15 @@ impl<'a> InvokeContext<'a> {
|
||||
|
||||
/// Get the owner of the currently executing program
|
||||
pub fn get_loader(&self) -> Result<Pubkey, InstructionError> {
|
||||
self.get_instruction_keyed_accounts()
|
||||
.and_then(|keyed_accounts| keyed_accounts.first().ok_or(InstructionError::CallDepth))
|
||||
.and_then(|keyed_account| keyed_account.owner())
|
||||
let frame = self
|
||||
.invoke_stack
|
||||
.last()
|
||||
.ok_or(InstructionError::CallDepth)?;
|
||||
let first_instruction_account = frame
|
||||
.number_of_program_accounts
|
||||
.checked_sub(1)
|
||||
.ok_or(InstructionError::CallDepth)?;
|
||||
frame.keyed_accounts[first_instruction_account].owner()
|
||||
}
|
||||
|
||||
/// Removes the first keyed account
|
||||
@ -754,17 +760,15 @@ impl<'a> InvokeContext<'a> {
|
||||
.ok_or(InstructionError::CallDepth)
|
||||
}
|
||||
|
||||
/// Get the list of keyed accounts skipping `first_instruction_account` many entries
|
||||
/// Get the list of keyed accounts without the chain of program accounts
|
||||
///
|
||||
/// Note: This only contains the `KeyedAccount`s passed by the caller.
|
||||
pub fn get_instruction_keyed_accounts(&self) -> Result<&[KeyedAccount], InstructionError> {
|
||||
let frame = self
|
||||
.invoke_stack
|
||||
.last()
|
||||
.ok_or(InstructionError::CallDepth)?;
|
||||
let first_instruction_account = frame
|
||||
.number_of_program_accounts
|
||||
.checked_sub(1)
|
||||
.ok_or(InstructionError::CallDepth)?;
|
||||
Ok(&frame.keyed_accounts[first_instruction_account..])
|
||||
Ok(&frame.keyed_accounts[frame.number_of_program_accounts..])
|
||||
}
|
||||
|
||||
/// Get this invocation's LogCollector
|
||||
|
Reference in New Issue
Block a user