light_token_interface/instructions/transfer2/
instruction_data.rs1use light_compressed_account::{
2 compressed_account::PackedMerkleContext, instruction_data::compressed_proof::CompressedProof,
3};
4use light_zero_copy::{ZeroCopy, ZeroCopyMut};
5
6use super::compression::Compression;
7use crate::{
8 instructions::{extensions::ExtensionInstructionData, transfer2::CompressedCpiContext},
9 AnchorDeserialize, AnchorSerialize,
10};
11
12#[repr(C)]
13#[derive(Debug, Clone, AnchorSerialize, AnchorDeserialize, ZeroCopy)]
14pub struct CompressedTokenInstructionDataTransfer2 {
15 pub with_transaction_hash: bool,
16 pub with_lamports_change_account_merkle_tree_index: bool,
18 pub lamports_change_account_merkle_tree_index: u8,
20 pub lamports_change_account_owner_index: u8,
22 pub output_queue: u8,
23 pub max_top_up: u16,
25 pub cpi_context: Option<CompressedCpiContext>,
26 pub compressions: Option<Vec<Compression>>,
27 pub proof: Option<CompressedProof>,
28 pub in_token_data: Vec<MultiInputTokenDataWithContext>,
29 pub out_token_data: Vec<MultiTokenTransferOutputData>,
30 pub in_lamports: Option<Vec<u64>>,
32 pub out_lamports: Option<Vec<u64>>,
34 pub in_tlv: Option<Vec<Vec<ExtensionInstructionData>>>,
36 pub out_tlv: Option<Vec<Vec<ExtensionInstructionData>>>,
38}
39
40#[repr(C)]
41#[derive(
42 Debug,
43 Copy,
44 Clone,
45 Default,
46 PartialEq,
47 AnchorSerialize,
48 AnchorDeserialize,
49 ZeroCopy,
50 ZeroCopyMut,
51)]
52pub struct MultiInputTokenDataWithContext {
53 pub owner: u8,
54 pub amount: u64,
55 pub has_delegate: bool, pub delegate: u8,
57 pub mint: u8,
58 pub version: u8,
59 pub merkle_context: PackedMerkleContext,
60 pub root_index: u16,
61}
62
63#[repr(C)]
64#[derive(
65 Clone,
66 Copy,
67 Debug,
68 Default,
69 PartialEq,
70 Eq,
71 AnchorSerialize,
72 AnchorDeserialize,
73 ZeroCopy,
74 ZeroCopyMut,
75)]
76pub struct MultiTokenTransferOutputData {
77 pub owner: u8,
78 pub amount: u64,
79 pub has_delegate: bool, pub delegate: u8,
81 pub mint: u8,
82 pub version: u8,
83}