light_token_interface/instructions/transfer2/
instruction_data.rs

1use 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    /// Placeholder currently unimplemented.
17    pub with_lamports_change_account_merkle_tree_index: bool,
18    /// Placeholder currently unimplemented.
19    pub lamports_change_account_merkle_tree_index: u8,
20    /// Placeholder currently unimplemented.
21    pub lamports_change_account_owner_index: u8,
22    pub output_queue: u8,
23    /// Maximum lamports for rent and top-up combined. Transaction fails if exceeded. (0 = no limit)
24    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    /// Placeholder currently unimplemented.
31    pub in_lamports: Option<Vec<u64>>,
32    /// Placeholder currently unimplemented.
33    pub out_lamports: Option<Vec<u64>>,
34    /// Extensions for input compressed token accounts (one Vec per input account)
35    pub in_tlv: Option<Vec<Vec<ExtensionInstructionData>>>,
36    /// Extensions for output compressed token accounts (one Vec per output account)
37    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, // Optional delegate is set
56    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, // Optional delegate is set
80    pub delegate: u8,
81    pub mint: u8,
82    pub version: u8,
83}