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}