2021-10-19 19:17:33 -06:00
|
|
|
//! Example Rust-based BPF program that issues a cross-program-invocation
|
2020-04-28 14:33:56 -07:00
|
|
|
|
2020-10-23 17:22:10 -07:00
|
|
|
use solana_program::{
|
2020-04-28 14:33:56 -07:00
|
|
|
instruction::{AccountMeta, Instruction},
|
|
|
|
pubkey::Pubkey,
|
|
|
|
};
|
|
|
|
|
2021-01-08 18:27:39 -08:00
|
|
|
pub const VERIFY_TRANSLATIONS: u8 = 0;
|
|
|
|
pub const RETURN_ERROR: u8 = 1;
|
|
|
|
pub const DERIVED_SIGNERS: u8 = 2;
|
|
|
|
pub const VERIFY_NESTED_SIGNERS: u8 = 3;
|
|
|
|
pub const VERIFY_WRITER: u8 = 4;
|
|
|
|
pub const VERIFY_PRIVILEGE_ESCALATION: u8 = 5;
|
|
|
|
pub const NESTED_INVOKE: u8 = 6;
|
|
|
|
pub const RETURN_OK: u8 = 7;
|
2021-01-21 01:19:46 -08:00
|
|
|
pub const VERIFY_PRIVILEGE_DEESCALATION: u8 = 8;
|
|
|
|
pub const VERIFY_PRIVILEGE_DEESCALATION_ESCALATION_SIGNER: u8 = 9;
|
|
|
|
pub const VERIFY_PRIVILEGE_DEESCALATION_ESCALATION_WRITABLE: u8 = 10;
|
2021-01-22 15:28:01 -08:00
|
|
|
pub const WRITE_ACCOUNT: u8 = 11;
|
2021-04-27 13:36:42 -07:00
|
|
|
pub const CREATE_AND_INIT: u8 = 12;
|
2021-09-01 10:14:01 +01:00
|
|
|
pub const SET_RETURN_DATA: u8 = 13;
|
2020-05-08 12:24:36 -07:00
|
|
|
|
2020-04-28 14:33:56 -07:00
|
|
|
pub fn create_instruction(
|
|
|
|
program_id: Pubkey,
|
|
|
|
arguments: &[(&Pubkey, bool, bool)],
|
|
|
|
data: Vec<u8>,
|
|
|
|
) -> Instruction {
|
|
|
|
let accounts = arguments
|
|
|
|
.iter()
|
|
|
|
.map(|(key, is_writable, is_signer)| {
|
|
|
|
if *is_writable {
|
|
|
|
AccountMeta::new(**key, *is_signer)
|
|
|
|
} else {
|
|
|
|
AccountMeta::new_readonly(**key, *is_signer)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
.collect();
|
|
|
|
Instruction {
|
|
|
|
program_id,
|
|
|
|
accounts,
|
|
|
|
data,
|
|
|
|
}
|
|
|
|
}
|