light_ctoken_types/instruction/
transfer.rs1pub use light_compressed_account::instruction_data::{
2 compressed_proof::CompressedProof, cpi_context::CompressedCpiContext,
3};
4use light_sdk_types::instruction::PackedStateTreeInfo;
5
6use crate::{AnchorDeserialize, AnchorSerialize};
7
8#[derive(Debug, Clone, AnchorSerialize, AnchorDeserialize, PartialEq)]
9pub struct PackedMerkleContext {
10 pub merkle_tree_pubkey_index: u8,
11 pub nullifier_queue_pubkey_index: u8,
12 pub leaf_index: u32,
13 pub proof_by_index: bool,
14}
15
16#[derive(Debug, Clone, AnchorSerialize, AnchorDeserialize, PartialEq)]
17pub struct TokenAccountMeta {
18 pub amount: u64,
19 pub delegate_index: Option<u8>,
20 pub packed_tree_info: PackedStateTreeInfo,
21 pub lamports: Option<u64>,
22 pub tlv: Option<Vec<u8>>,
24}
25
26#[derive(Debug, Clone, AnchorSerialize, AnchorDeserialize, PartialEq)]
27pub struct InputTokenDataWithContextOnchain {
28 pub amount: u64,
29 pub delegate_index: Option<u8>,
30 pub merkle_context: PackedMerkleContext,
31 pub root_index: u16,
32 pub lamports: Option<u64>,
33 pub tlv: Option<Vec<u8>>,
35}
36
37impl From<TokenAccountMeta> for InputTokenDataWithContextOnchain {
38 fn from(input: TokenAccountMeta) -> Self {
39 Self {
40 amount: input.amount,
41 delegate_index: input.delegate_index,
42 merkle_context: PackedMerkleContext {
43 merkle_tree_pubkey_index: input.packed_tree_info.merkle_tree_pubkey_index,
44 nullifier_queue_pubkey_index: input.packed_tree_info.queue_pubkey_index,
45 leaf_index: input.packed_tree_info.leaf_index,
46 proof_by_index: input.packed_tree_info.prove_by_index,
47 },
48 root_index: input.packed_tree_info.root_index,
49 lamports: input.lamports,
50 tlv: input.tlv,
51 }
52 }
53}
54
55#[derive(Debug, Clone, AnchorSerialize, AnchorDeserialize)]
57pub struct DelegatedTransfer {
58 pub owner: [u8; 32],
59 pub delegate_change_account_index: Option<u8>,
64}
65
66#[derive(Debug, Clone, AnchorSerialize, AnchorDeserialize)]
67pub struct CompressedTokenInstructionDataTransfer {
68 pub proof: Option<CompressedProof>,
69 pub mint: [u8; 32],
70 pub delegated_transfer: Option<DelegatedTransfer>,
74 pub input_token_data_with_context: Vec<InputTokenDataWithContextOnchain>,
75 pub output_compressed_accounts: Vec<PackedTokenTransferOutputData>,
76 pub is_compress: bool,
77 pub compress_or_decompress_amount: Option<u64>,
78 pub cpi_context: Option<CompressedCpiContext>,
79 pub lamports_change_account_merkle_tree_index: Option<u8>,
80 pub with_transaction_hash: bool,
81}
82
83#[derive(Clone, Debug, PartialEq, Eq, AnchorSerialize, AnchorDeserialize)]
84pub struct PackedTokenTransferOutputData {
85 pub owner: [u8; 32],
86 pub amount: u64,
87 pub lamports: Option<u64>,
88 pub merkle_tree_index: u8,
89 pub tlv: Option<Vec<u8>>,
91}
92
93#[derive(Clone, Copy, Debug, PartialEq, Eq, AnchorSerialize, AnchorDeserialize)]
94pub struct TokenTransferOutputData {
95 pub owner: [u8; 32],
96 pub amount: u64,
97 pub lamports: Option<u64>,
98 pub merkle_tree: [u8; 32],
99}