Check that the program was granted access to program_id (#13890)
This commit is contained in:
52
programs/bpf/rust/caller_access/src/lib.rs
Normal file
52
programs/bpf/rust/caller_access/src/lib.rs
Normal file
@@ -0,0 +1,52 @@
|
||||
use solana_program::{
|
||||
account_info::AccountInfo,
|
||||
entrypoint,
|
||||
entrypoint::ProgramResult,
|
||||
instruction::{AccountMeta, Instruction},
|
||||
msg,
|
||||
program::invoke,
|
||||
pubkey::Pubkey,
|
||||
};
|
||||
use std::convert::TryInto;
|
||||
|
||||
entrypoint!(process_instruction);
|
||||
fn process_instruction(
|
||||
program_id: &Pubkey,
|
||||
accounts: &[AccountInfo],
|
||||
instruction_data: &[u8],
|
||||
) -> ProgramResult {
|
||||
if instruction_data.len() == 32 {
|
||||
let key = Pubkey::new_from_array(instruction_data.try_into().unwrap());
|
||||
let ix = Instruction::new(key, &[2], vec![]);
|
||||
let mut lamports = accounts[0].lamports();
|
||||
let owner = &accounts[0].owner;
|
||||
let mut data = accounts[0].try_borrow_mut_data()?;
|
||||
let account = AccountInfo::new(
|
||||
&key,
|
||||
false,
|
||||
false,
|
||||
&mut lamports,
|
||||
&mut data,
|
||||
&owner,
|
||||
true,
|
||||
0,
|
||||
);
|
||||
msg!("{:?} calling {:?}", program_id, key);
|
||||
invoke(&ix, &[account])?;
|
||||
} else {
|
||||
match instruction_data[0] {
|
||||
1 => {
|
||||
let ix = Instruction::new(
|
||||
*program_id,
|
||||
&accounts[1].key.to_bytes(),
|
||||
vec![AccountMeta::new_readonly(*program_id, false)],
|
||||
);
|
||||
msg!("{:?} calling {:?}", program_id, program_id);
|
||||
invoke(&ix, accounts)?;
|
||||
}
|
||||
|
||||
_ => msg!("Should never get here"),
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
Reference in New Issue
Block a user