light_token/instruction/
compressible.rs1use light_token_interface::{instructions::extensions::CompressToPubkey, state::TokenDataVersion};
2use solana_account_info::AccountInfo;
3use solana_pubkey::Pubkey;
4
5use crate::instruction::{COMPRESSIBLE_CONFIG_V1, RENT_SPONSOR};
6
7#[derive(Debug, Clone)]
25pub struct CompressibleParams {
26 pub token_account_version: TokenDataVersion,
27 pub pre_pay_num_epochs: u8,
28 pub lamports_per_write: Option<u32>,
32 pub compress_to_account_pubkey: Option<CompressToPubkey>,
33 pub compressible_config: Pubkey,
34 pub rent_sponsor: Pubkey,
35 pub compression_only: bool,
36}
37
38impl Default for CompressibleParams {
39 fn default() -> Self {
40 Self {
41 compressible_config: COMPRESSIBLE_CONFIG_V1,
42 rent_sponsor: RENT_SPONSOR,
43 pre_pay_num_epochs: 16,
44 lamports_per_write: Some(766),
45 compress_to_account_pubkey: None,
46 token_account_version: TokenDataVersion::ShaFlat,
47 compression_only: false,
48 }
49 }
50}
51
52impl CompressibleParams {
53 pub fn new() -> Self {
59 Self::default()
60 }
61
62 pub fn default_ata() -> Self {
65 Self {
66 compression_only: true,
67 ..Self::default()
68 }
69 }
70
71 pub fn compress_to_pubkey(mut self, compress_to: CompressToPubkey) -> Self {
73 self.compress_to_account_pubkey = Some(compress_to);
74 self
75 }
76}
77
78pub struct CompressibleParamsCpi<'info> {
96 pub compressible_config: AccountInfo<'info>,
97 pub rent_sponsor: AccountInfo<'info>,
98 pub system_program: AccountInfo<'info>,
99 pub pre_pay_num_epochs: u8,
100 pub lamports_per_write: Option<u32>,
101 pub compress_to_account_pubkey: Option<CompressToPubkey>,
102 pub token_account_version: TokenDataVersion,
103 pub compression_only: bool,
104}
105
106impl<'info> CompressibleParamsCpi<'info> {
107 pub fn new(
108 compressible_config: AccountInfo<'info>,
109 rent_sponsor: AccountInfo<'info>,
110 system_program: AccountInfo<'info>,
111 ) -> Self {
112 let defaults = CompressibleParams::default();
113 Self {
114 compressible_config,
115 rent_sponsor,
116 system_program,
117 pre_pay_num_epochs: defaults.pre_pay_num_epochs,
118 lamports_per_write: defaults.lamports_per_write,
119 compress_to_account_pubkey: None,
120 token_account_version: defaults.token_account_version,
121 compression_only: defaults.compression_only,
122 }
123 }
124
125 pub fn new_ata(
126 compressible_config: AccountInfo<'info>,
127 rent_sponsor: AccountInfo<'info>,
128 system_program: AccountInfo<'info>,
129 ) -> Self {
130 let defaults = CompressibleParams::default_ata();
131 Self {
132 compressible_config,
133 rent_sponsor,
134 system_program,
135 pre_pay_num_epochs: defaults.pre_pay_num_epochs,
136 lamports_per_write: defaults.lamports_per_write,
137 compress_to_account_pubkey: None,
138 token_account_version: defaults.token_account_version,
139 compression_only: defaults.compression_only,
140 }
141 }
142
143 pub fn with_compress_to_pubkey(mut self, compress_to: CompressToPubkey) -> Self {
144 self.compress_to_account_pubkey = Some(compress_to);
145 self
146 }
147}