light_token_interface/state/extensions/compressed_only.rs
1use light_zero_copy::{ZeroCopy, ZeroCopyMut};
2
3use crate::{AnchorDeserialize, AnchorSerialize};
4
5/// CompressedOnly extension for compressed token accounts.
6/// This extension marks a compressed account as decompress-only (cannot be transferred).
7/// It stores the delegated amount from the source Token account when it was compressed-and-closed.
8#[derive(
9 Debug,
10 Clone,
11 Hash,
12 Copy,
13 PartialEq,
14 Eq,
15 AnchorSerialize,
16 AnchorDeserialize,
17 ZeroCopy,
18 ZeroCopyMut,
19)]
20#[repr(C)]
21pub struct CompressedOnlyExtension {
22 /// The delegated amount from the source Token account's delegate field.
23 /// When decompressing, the decompression amount must match this value.
24 pub delegated_amount: u64,
25 /// Withheld transfer fee amount from the source Token account.
26 pub withheld_transfer_fee: u64,
27 /// Whether the source was an ATA (1) or regular token account (0).
28 /// When is_ata=1, decompress must verify ATA derivation matches.
29 pub is_ata: u8,
30}
31
32impl CompressedOnlyExtension {
33 pub const LEN: usize = 17;
34}