light_token/compressed_token/v2/update_compressed_mint/
account_metas.rs1use solana_instruction::AccountMeta;
2use solana_pubkey::Pubkey;
3
4use crate::utils::TokenDefaultAccounts;
5
6#[derive(Debug, Clone)]
8pub struct UpdateMintMetaConfig {
9 pub fee_payer: Option<Pubkey>,
10 pub authority: Option<Pubkey>,
11 pub in_merkle_tree: Pubkey,
12 pub in_output_queue: Pubkey,
13 pub out_output_queue: Pubkey,
14 pub with_cpi_context: bool,
15}
16
17pub fn get_update_compressed_mint_instruction_account_metas(
19 config: UpdateMintMetaConfig,
20) -> Vec<AccountMeta> {
21 let default_pubkeys = TokenDefaultAccounts::default();
22
23 let mut metas = Vec::new();
24
25 metas.push(AccountMeta::new_readonly(
28 default_pubkeys.light_system_program,
29 false,
30 ));
31
32 if let Some(authority) = config.authority {
34 metas.push(AccountMeta::new_readonly(authority, true));
35 }
36
37 if config.with_cpi_context {
38 } else {
41 if let Some(fee_payer) = config.fee_payer {
44 metas.push(AccountMeta::new(fee_payer, true));
45 }
46
47 metas.push(AccountMeta::new_readonly(
49 default_pubkeys.cpi_authority_pda,
50 false,
51 ));
52
53 metas.push(AccountMeta::new_readonly(
55 default_pubkeys.registered_program_pda,
56 false,
57 ));
58
59 metas.push(AccountMeta::new_readonly(
61 default_pubkeys.account_compression_authority,
62 false,
63 ));
64
65 metas.push(AccountMeta::new_readonly(
67 default_pubkeys.account_compression_program,
68 false,
69 ));
70
71 metas.push(AccountMeta::new_readonly(
73 default_pubkeys.system_program,
74 false,
75 ));
76
77 metas.push(AccountMeta::new(config.in_merkle_tree, false));
80
81 metas.push(AccountMeta::new(config.in_output_queue, false));
83
84 metas.push(AccountMeta::new(config.out_output_queue, false));
86 }
87
88 metas
89}