2021-03-11 16:09:04 -08:00
|
|
|
use solana_sdk::{
|
|
|
|
account::{Account, AccountSharedData},
|
2023-01-25 16:52:55 -08:00
|
|
|
bpf_loader_upgradeable::UpgradeableLoaderState,
|
2021-03-11 16:09:04 -08:00
|
|
|
pubkey::Pubkey,
|
|
|
|
rent::Rent,
|
|
|
|
};
|
2020-12-08 23:18:27 -08:00
|
|
|
|
|
|
|
mod spl_token {
|
|
|
|
solana_sdk::declare_id!("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");
|
|
|
|
}
|
2023-01-25 16:52:55 -08:00
|
|
|
mod spl_token_2022 {
|
|
|
|
solana_sdk::declare_id!("TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb");
|
|
|
|
}
|
2021-02-18 23:59:31 -08:00
|
|
|
mod spl_memo_1_0 {
|
2020-12-08 23:18:27 -08:00
|
|
|
solana_sdk::declare_id!("Memo1UhkJRfHyvLMcVucJwxXeuD728EqVDDwQDxFMNo");
|
|
|
|
}
|
2021-02-18 23:59:31 -08:00
|
|
|
mod spl_memo_3_0 {
|
|
|
|
solana_sdk::declare_id!("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr");
|
|
|
|
}
|
2020-12-08 23:18:27 -08:00
|
|
|
mod spl_associated_token_account {
|
|
|
|
solana_sdk::declare_id!("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL");
|
|
|
|
}
|
|
|
|
|
2023-01-25 16:52:55 -08:00
|
|
|
static SPL_PROGRAMS: &[(Pubkey, Pubkey, &[u8])] = &[
|
|
|
|
(
|
|
|
|
spl_token::ID,
|
|
|
|
solana_sdk::bpf_loader::ID,
|
|
|
|
include_bytes!("programs/spl_token-3.5.0.so"),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
spl_token_2022::ID,
|
|
|
|
solana_sdk::bpf_loader_upgradeable::ID,
|
2023-03-09 17:32:19 -08:00
|
|
|
include_bytes!("programs/spl_token_2022-0.6.0.so"),
|
2023-01-25 16:52:55 -08:00
|
|
|
),
|
2021-02-18 23:59:31 -08:00
|
|
|
(
|
|
|
|
spl_memo_1_0::ID,
|
2023-01-25 16:52:55 -08:00
|
|
|
solana_sdk::bpf_loader::ID,
|
2021-02-18 23:59:31 -08:00
|
|
|
include_bytes!("programs/spl_memo-1.0.0.so"),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
spl_memo_3_0::ID,
|
2023-01-25 16:52:55 -08:00
|
|
|
solana_sdk::bpf_loader::ID,
|
2021-02-18 23:59:31 -08:00
|
|
|
include_bytes!("programs/spl_memo-3.0.0.so"),
|
|
|
|
),
|
2020-12-08 23:18:27 -08:00
|
|
|
(
|
|
|
|
spl_associated_token_account::ID,
|
2023-01-25 16:52:55 -08:00
|
|
|
solana_sdk::bpf_loader::ID,
|
2022-08-04 18:05:31 -07:00
|
|
|
include_bytes!("programs/spl_associated_token_account-1.1.1.so"),
|
2020-12-08 23:18:27 -08:00
|
|
|
),
|
|
|
|
];
|
|
|
|
|
2021-03-09 13:06:07 -08:00
|
|
|
pub fn spl_programs(rent: &Rent) -> Vec<(Pubkey, AccountSharedData)> {
|
2020-12-08 23:18:27 -08:00
|
|
|
SPL_PROGRAMS
|
|
|
|
.iter()
|
2023-01-25 16:52:55 -08:00
|
|
|
.flat_map(|(program_id, loader_id, elf)| {
|
|
|
|
let mut accounts = vec![];
|
|
|
|
let data = if *loader_id == solana_sdk::bpf_loader_upgradeable::ID {
|
|
|
|
let (programdata_address, _) =
|
|
|
|
Pubkey::find_program_address(&[program_id.as_ref()], loader_id);
|
|
|
|
let mut program_data = bincode::serialize(&UpgradeableLoaderState::ProgramData {
|
|
|
|
slot: 0,
|
|
|
|
upgrade_authority_address: Some(Pubkey::default()),
|
|
|
|
})
|
|
|
|
.unwrap();
|
|
|
|
program_data.extend_from_slice(elf);
|
|
|
|
accounts.push((
|
|
|
|
programdata_address,
|
|
|
|
AccountSharedData::from(Account {
|
|
|
|
lamports: rent.minimum_balance(program_data.len()).max(1),
|
|
|
|
data: program_data,
|
|
|
|
owner: *loader_id,
|
|
|
|
executable: false,
|
|
|
|
rent_epoch: 0,
|
|
|
|
}),
|
|
|
|
));
|
|
|
|
bincode::serialize(&UpgradeableLoaderState::Program {
|
|
|
|
programdata_address,
|
|
|
|
})
|
|
|
|
.unwrap()
|
|
|
|
} else {
|
|
|
|
elf.to_vec()
|
|
|
|
};
|
|
|
|
accounts.push((
|
2020-12-08 23:18:27 -08:00
|
|
|
*program_id,
|
2021-03-11 16:09:04 -08:00
|
|
|
AccountSharedData::from(Account {
|
2023-01-25 16:52:55 -08:00
|
|
|
lamports: rent.minimum_balance(data.len()).max(1),
|
|
|
|
data,
|
|
|
|
owner: *loader_id,
|
2020-12-08 23:18:27 -08:00
|
|
|
executable: true,
|
|
|
|
rent_epoch: 0,
|
2021-03-11 16:09:04 -08:00
|
|
|
}),
|
2023-01-25 16:52:55 -08:00
|
|
|
));
|
|
|
|
accounts.into_iter()
|
2020-12-08 23:18:27 -08:00
|
|
|
})
|
|
|
|
.collect()
|
|
|
|
}
|