Skip to content

Commit ed4a4ae

Browse files
committed
refactor sdk-token-test ixs into files
1 parent b0b9528 commit ed4a4ae

File tree

5 files changed

+217
-151
lines changed

5 files changed

+217
-151
lines changed

program-tests/sdk-token-test/src/lib.rs

Lines changed: 18 additions & 151 deletions
Original file line numberDiff line numberDiff line change
@@ -1,65 +1,33 @@
11
#![allow(unexpected_cfgs)]
22

3-
use anchor_lang::{prelude::*, solana_program::program::invoke, Discriminator};
4-
use light_compressed_token_sdk::instructions::transfer::instruction::DecompressInputs;
3+
use anchor_lang::prelude::*;
54
use light_compressed_token_sdk::instructions::Recipient;
6-
use light_compressed_token_sdk::{
7-
account::CTokenAccount,
8-
instructions::{
9-
batch_compress::{create_batch_compress_instruction, BatchCompressInputs},
10-
transfer::{
11-
instruction::{compress, decompress, transfer, CompressInputs, TransferInputs},
12-
TransferAccountInfos,
13-
},
14-
},
15-
TokenAccountMeta, ValidityProof,
16-
};
5+
use light_compressed_token_sdk::{TokenAccountMeta, ValidityProof};
6+
7+
mod process_compress_tokens;
8+
mod process_transfer_tokens;
9+
mod process_decompress_tokens;
10+
mod process_batch_compress_tokens;
11+
12+
use process_compress_tokens::process_compress_tokens;
13+
use process_transfer_tokens::process_transfer_tokens;
14+
use process_decompress_tokens::process_decompress_tokens;
15+
use process_batch_compress_tokens::process_batch_compress_tokens;
1716

1817
declare_id!("5p1t1GAaKtK1FKCh5Hd2Gu8JCu3eREhJm4Q2qYfTEPYK");
1918

2019
#[program]
2120
pub mod sdk_token_test {
22-
23-
use light_compressed_token_sdk::account_infos::BatchCompressAccountInfos;
24-
2521
use super::*;
2622

2723
pub fn compress_tokens<'info>(
2824
ctx: Context<'_, '_, '_, 'info, Generic<'info>>,
2925
output_tree_index: u8,
30-
recipient: Pubkey, // TODO: make recpient pda
31-
mint: Pubkey, // TODO: deserialize from token account.
26+
recipient: Pubkey,
27+
mint: Pubkey,
3228
amount: u64,
3329
) -> Result<()> {
34-
let light_cpi_accounts = TransferAccountInfos::new_compress(
35-
ctx.accounts.signer.as_ref(),
36-
ctx.accounts.signer.as_ref(),
37-
ctx.remaining_accounts,
38-
);
39-
40-
let compress_inputs = CompressInputs {
41-
fee_payer: *ctx.accounts.signer.key,
42-
authority: *ctx.accounts.signer.key,
43-
mint,
44-
recipient,
45-
sender_token_account: *light_cpi_accounts.sender_token_account().unwrap().key,
46-
amount,
47-
// can be hardcoded as 0, exposed for flexibility
48-
// and as marker that a tree has to be provided.
49-
output_tree_index,
50-
output_queue_pubkey: *light_cpi_accounts.tree_accounts().unwrap()[0].key,
51-
token_pool_pda: *light_cpi_accounts.token_pool_pda().unwrap().key,
52-
transfer_config: None,
53-
spl_token_program: *light_cpi_accounts.spl_token_program().unwrap().key,
54-
};
55-
56-
let instruction = compress(compress_inputs).map_err(ProgramError::from)?;
57-
msg!("instruction {:?}", instruction);
58-
let account_infos = light_cpi_accounts.to_account_infos();
59-
60-
invoke(&instruction, account_infos.as_slice())?;
61-
62-
Ok(())
30+
process_compress_tokens(ctx, output_tree_index, recipient, mint, amount)
6331
}
6432

6533
pub fn transfer_tokens<'info>(
@@ -70,37 +38,7 @@ pub mod sdk_token_test {
7038
mint: Pubkey,
7139
recipient: Pubkey,
7240
) -> Result<()> {
73-
let light_cpi_accounts = TransferAccountInfos::new(
74-
ctx.accounts.signer.as_ref(),
75-
ctx.accounts.signer.as_ref(),
76-
ctx.remaining_accounts,
77-
);
78-
let sender_account = CTokenAccount::new(
79-
mint,
80-
ctx.accounts.signer.key(),
81-
token_metas,
82-
// We pack the accounts offchain.
83-
output_tree_index,
84-
);
85-
let transfer_inputs = TransferInputs {
86-
fee_payer: ctx.accounts.signer.key(),
87-
// This way we can use CTokenAccount as anchor account type
88-
sender_account,
89-
validity_proof,
90-
recipient,
91-
// This is necessary for on and offchain compatibility.
92-
// This is not an optimal solution because we collect pubkeys into a vector.
93-
tree_pubkeys: light_cpi_accounts.tree_pubkeys().unwrap(),
94-
config: None,
95-
amount: 10,
96-
};
97-
let instruction = transfer(transfer_inputs).unwrap();
98-
99-
let account_infos = light_cpi_accounts.to_account_infos();
100-
101-
invoke(&instruction, account_infos.as_slice())?;
102-
103-
Ok(())
41+
process_transfer_tokens(ctx, validity_proof, token_metas, output_tree_index, mint, recipient)
10442
}
10543

10644
pub fn decompress_tokens<'info>(
@@ -110,38 +48,7 @@ pub mod sdk_token_test {
11048
output_tree_index: u8,
11149
mint: Pubkey,
11250
) -> Result<()> {
113-
let sender_account = light_compressed_token_sdk::account::CTokenAccount::new(
114-
mint,
115-
ctx.accounts.signer.key(),
116-
token_data,
117-
output_tree_index,
118-
);
119-
120-
let light_cpi_accounts = TransferAccountInfos::new_decompress(
121-
ctx.accounts.signer.as_ref(),
122-
ctx.accounts.signer.as_ref(),
123-
ctx.remaining_accounts,
124-
);
125-
126-
let inputs = DecompressInputs {
127-
fee_payer: *ctx.accounts.signer.key,
128-
validity_proof,
129-
sender_account,
130-
amount: 10,
131-
tree_pubkeys: light_cpi_accounts.tree_pubkeys().unwrap(),
132-
token_pool_pda: *light_cpi_accounts.token_pool_pda().unwrap().key,
133-
recipient_token_account: *light_cpi_accounts.decompression_recipient().unwrap().key,
134-
// TODO: consider replacing with token program id
135-
spl_token_program: *light_cpi_accounts.spl_token_program().unwrap().key,
136-
config: None,
137-
};
138-
139-
let instruction = decompress(inputs).unwrap();
140-
let account_infos = light_cpi_accounts.to_account_infos();
141-
142-
invoke(&instruction, account_infos.as_slice())?;
143-
144-
Ok(())
51+
process_decompress_tokens(ctx, validity_proof, token_data, output_tree_index, mint)
14552
}
14653

14754
pub fn batch_compress_tokens<'info>(
@@ -150,47 +57,7 @@ pub mod sdk_token_test {
15057
token_pool_index: u8,
15158
token_pool_bump: u8,
15259
) -> Result<()> {
153-
let light_cpi_accounts = BatchCompressAccountInfos::new(
154-
ctx.accounts.signer.as_ref(),
155-
ctx.accounts.signer.as_ref(),
156-
ctx.remaining_accounts,
157-
);
158-
159-
// Convert local Recipient to SDK Recipient
160-
let sdk_recipients: Vec<
161-
light_compressed_token_sdk::instructions::batch_compress::Recipient,
162-
> = recipients
163-
.into_iter()
164-
.map(
165-
|r| light_compressed_token_sdk::instructions::batch_compress::Recipient {
166-
pubkey: r.pubkey,
167-
amount: r.amount,
168-
},
169-
)
170-
.collect();
171-
172-
let batch_compress_inputs = BatchCompressInputs {
173-
fee_payer: *ctx.accounts.signer.key,
174-
authority: *ctx.accounts.signer.key,
175-
token_pool_pda: *light_cpi_accounts.token_pool_pda().unwrap().key,
176-
sender_token_account: *light_cpi_accounts.sender_token_account().unwrap().key,
177-
token_program: *light_cpi_accounts.token_program().unwrap().key,
178-
merkle_tree: *light_cpi_accounts.merkle_tree().unwrap().key,
179-
recipients: sdk_recipients,
180-
lamports: None,
181-
token_pool_index,
182-
token_pool_bump,
183-
sol_pool_pda: None,
184-
};
185-
186-
let instruction =
187-
create_batch_compress_instruction(batch_compress_inputs).map_err(ProgramError::from)?;
188-
msg!("batch compress instruction {:?}", instruction);
189-
let account_infos = light_cpi_accounts.to_account_infos();
190-
191-
invoke(&instruction, account_infos.as_slice())?;
192-
193-
Ok(())
60+
process_batch_compress_tokens(ctx, recipients, token_pool_index, token_pool_bump)
19461
}
19562
}
19663

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
use anchor_lang::{prelude::*, solana_program::program::invoke};
2+
use light_compressed_token_sdk::{
3+
account_infos::BatchCompressAccountInfos,
4+
instructions::{
5+
batch_compress::{create_batch_compress_instruction, BatchCompressInputs},
6+
Recipient,
7+
},
8+
};
9+
10+
use crate::Generic;
11+
12+
pub fn process_batch_compress_tokens<'info>(
13+
ctx: Context<'_, '_, '_, 'info, Generic<'info>>,
14+
recipients: Vec<Recipient>,
15+
token_pool_index: u8,
16+
token_pool_bump: u8,
17+
) -> Result<()> {
18+
let light_cpi_accounts = BatchCompressAccountInfos::new(
19+
ctx.accounts.signer.as_ref(),
20+
ctx.accounts.signer.as_ref(),
21+
ctx.remaining_accounts,
22+
);
23+
24+
let sdk_recipients: Vec<
25+
light_compressed_token_sdk::instructions::batch_compress::Recipient,
26+
> = recipients
27+
.into_iter()
28+
.map(
29+
|r| light_compressed_token_sdk::instructions::batch_compress::Recipient {
30+
pubkey: r.pubkey,
31+
amount: r.amount,
32+
},
33+
)
34+
.collect();
35+
36+
let batch_compress_inputs = BatchCompressInputs {
37+
fee_payer: *ctx.accounts.signer.key,
38+
authority: *ctx.accounts.signer.key,
39+
token_pool_pda: *light_cpi_accounts.token_pool_pda().unwrap().key,
40+
sender_token_account: *light_cpi_accounts.sender_token_account().unwrap().key,
41+
token_program: *light_cpi_accounts.token_program().unwrap().key,
42+
merkle_tree: *light_cpi_accounts.merkle_tree().unwrap().key,
43+
recipients: sdk_recipients,
44+
lamports: None,
45+
token_pool_index,
46+
token_pool_bump,
47+
sol_pool_pda: None,
48+
};
49+
50+
let instruction =
51+
create_batch_compress_instruction(batch_compress_inputs).map_err(ProgramError::from)?;
52+
msg!("batch compress instruction {:?}", instruction);
53+
let account_infos = light_cpi_accounts.to_account_infos();
54+
55+
invoke(&instruction, account_infos.as_slice())?;
56+
57+
Ok(())
58+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
use anchor_lang::{prelude::*, solana_program::program::invoke};
2+
use light_compressed_token_sdk::instructions::transfer::{
3+
instruction::{compress, CompressInputs},
4+
TransferAccountInfos,
5+
};
6+
7+
use crate::Generic;
8+
9+
pub fn process_compress_tokens<'info>(
10+
ctx: Context<'_, '_, '_, 'info, Generic<'info>>,
11+
output_tree_index: u8,
12+
recipient: Pubkey,
13+
mint: Pubkey,
14+
amount: u64,
15+
) -> Result<()> {
16+
let light_cpi_accounts = TransferAccountInfos::new_compress(
17+
ctx.accounts.signer.as_ref(),
18+
ctx.accounts.signer.as_ref(),
19+
ctx.remaining_accounts,
20+
);
21+
22+
let compress_inputs = CompressInputs {
23+
fee_payer: *ctx.accounts.signer.key,
24+
authority: *ctx.accounts.signer.key,
25+
mint,
26+
recipient,
27+
sender_token_account: *light_cpi_accounts.sender_token_account().unwrap().key,
28+
amount,
29+
output_tree_index,
30+
output_queue_pubkey: *light_cpi_accounts.tree_accounts().unwrap()[0].key,
31+
token_pool_pda: *light_cpi_accounts.token_pool_pda().unwrap().key,
32+
transfer_config: None,
33+
spl_token_program: *light_cpi_accounts.spl_token_program().unwrap().key,
34+
};
35+
36+
let instruction = compress(compress_inputs).map_err(ProgramError::from)?;
37+
msg!("instruction {:?}", instruction);
38+
let account_infos = light_cpi_accounts.to_account_infos();
39+
40+
invoke(&instruction, account_infos.as_slice())?;
41+
42+
Ok(())
43+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
use anchor_lang::{prelude::*, solana_program::program::invoke};
2+
use light_compressed_token_sdk::{
3+
instructions::transfer::{
4+
instruction::{decompress, DecompressInputs},
5+
TransferAccountInfos,
6+
},
7+
TokenAccountMeta, ValidityProof,
8+
};
9+
10+
use crate::Generic;
11+
12+
pub fn process_decompress_tokens<'info>(
13+
ctx: Context<'_, '_, '_, 'info, Generic<'info>>,
14+
validity_proof: ValidityProof,
15+
token_data: Vec<TokenAccountMeta>,
16+
output_tree_index: u8,
17+
mint: Pubkey,
18+
) -> Result<()> {
19+
let sender_account = light_compressed_token_sdk::account::CTokenAccount::new(
20+
mint,
21+
ctx.accounts.signer.key(),
22+
token_data,
23+
output_tree_index,
24+
);
25+
26+
let light_cpi_accounts = TransferAccountInfos::new_decompress(
27+
ctx.accounts.signer.as_ref(),
28+
ctx.accounts.signer.as_ref(),
29+
ctx.remaining_accounts,
30+
);
31+
32+
let inputs = DecompressInputs {
33+
fee_payer: *ctx.accounts.signer.key,
34+
validity_proof,
35+
sender_account,
36+
amount: 10,
37+
tree_pubkeys: light_cpi_accounts.tree_pubkeys().unwrap(),
38+
token_pool_pda: *light_cpi_accounts.token_pool_pda().unwrap().key,
39+
recipient_token_account: *light_cpi_accounts.decompression_recipient().unwrap().key,
40+
spl_token_program: *light_cpi_accounts.spl_token_program().unwrap().key,
41+
config: None,
42+
};
43+
44+
let instruction = decompress(inputs).unwrap();
45+
let account_infos = light_cpi_accounts.to_account_infos();
46+
47+
invoke(&instruction, account_infos.as_slice())?;
48+
49+
Ok(())
50+
}

0 commit comments

Comments
 (0)