#[repr(C)]pub struct CompressionInfo {
pub last_claimed_slot: u64,
pub lamports_per_write: u32,
pub config_version: u16,
pub state: CompressionState,
pub _padding: u8,
pub rent_config: RentConfig,
}Expand description
SDK CompressionInfo - a compact 24-byte struct for custom zero-copy PDAs.
This is the lightweight version of compression info used in the SDK.
CToken has its own compression handling via light_compressible::CompressionInfo.
§Memory Layout (24 bytes with #[repr(C)])
last_claimed_slot: u64 @ offset 0 (8 bytes, 8-byte aligned)lamports_per_write: u32 @ offset 8 (4 bytes)config_version: u16 @ offset 12 (2 bytes)state: CompressionState @ offset 14 (1 byte)_padding: u8 @ offset 15 (1 byte)rent_config: RentConfig @ offset 16 (8 bytes, 2-byte aligned)
Fields are ordered for optimal alignment to achieve exactly 24 bytes.
Fields§
§last_claimed_slot: u64Slot when rent was last claimed (epoch boundary accounting).
lamports_per_write: u32Lamports to top up on each write (from config, stored per-account to avoid passing config on every write)
config_version: u16Version of the compressible config used to initialize this account.
state: CompressionStateAccount compression state.
_padding: u8§rent_config: RentConfigRent function parameters for determining compressibility/claims.
Implementations§
Source§impl CompressionInfo
impl CompressionInfo
pub fn compressed() -> CompressionInfo
Sourcepub fn new_from_config(cfg: &LightConfig, current_slot: u64) -> CompressionInfo
pub fn new_from_config(cfg: &LightConfig, current_slot: u64) -> CompressionInfo
Create a new CompressionInfo initialized from a compressible config.
Rent sponsor is always the config’s rent_sponsor (not stored per-account). This means rent always flows to the protocol’s rent pool upon compression, regardless of who paid for account creation.
Sourcepub fn new_decompressed(current_slot: u64) -> CompressionInfo
pub fn new_decompressed(current_slot: u64) -> CompressionInfo
Backward-compat constructor; initializes minimal fields. Rent will flow to config’s rent_sponsor upon compression.
Sourcepub fn bump_last_claimed_slot(&mut self, current_slot: u64)
pub fn bump_last_claimed_slot(&mut self, current_slot: u64)
Update last_claimed_slot to the given slot.
Sourcepub fn set_last_claimed_slot(&mut self, slot: u64)
pub fn set_last_claimed_slot(&mut self, slot: u64)
Explicitly set last_claimed_slot.
Sourcepub fn last_claimed_slot(&self) -> u64
pub fn last_claimed_slot(&self) -> u64
Get last_claimed_slot.
pub fn set_compressed(&mut self)
pub fn is_compressed(&self) -> bool
Source§impl CompressionInfo
impl CompressionInfo
Sourcepub fn calculate_top_up_lamports(
&self,
num_bytes: u64,
current_slot: u64,
current_lamports: u64,
rent_exemption_lamports: u64,
) -> u64
pub fn calculate_top_up_lamports( &self, num_bytes: u64, current_slot: u64, current_lamports: u64, rent_exemption_lamports: u64, ) -> u64
Calculate top-up lamports required for a write.
Logic (same as CTokens):
- If account is compressible (can’t pay current + next epoch): return lamports_per_write + deficit
- If account has >= max_funded_epochs: return 0 (no top-up needed)
- Otherwise: return lamports_per_write (maintenance mode)
Sourcepub fn top_up_rent<AI>(
&self,
account_info: &AI,
payer_info: &AI,
) -> Result<(), LightSdkTypesError>where
AI: AccountInfoTrait,
pub fn top_up_rent<AI>(
&self,
account_info: &AI,
payer_info: &AI,
) -> Result<(), LightSdkTypesError>where
AI: AccountInfoTrait,
Top up rent on write if needed and transfer lamports from payer to account. This is the standard pattern for all write operations on compressible PDAs. Generic over AccountInfoTrait to work with both solana and pinocchio.
§Arguments
account_info- The PDA account to top uppayer_info- The payer account (will be debited)
Trait Implementations§
Source§impl BorshDeserialize for CompressionInfo
impl BorshDeserialize for CompressionInfo
fn deserialize_reader<R>(reader: &mut R) -> Result<CompressionInfo, Error>where
R: Read,
Source§fn deserialize(buf: &mut &[u8]) -> Result<Self, Error>
fn deserialize(buf: &mut &[u8]) -> Result<Self, Error>
Source§fn try_from_slice(v: &[u8]) -> Result<Self, Error>
fn try_from_slice(v: &[u8]) -> Result<Self, Error>
fn try_from_reader<R>(reader: &mut R) -> Result<Self, Error>where
R: Read,
Source§impl BorshSerialize for CompressionInfo
impl BorshSerialize for CompressionInfo
Source§impl Clone for CompressionInfo
impl Clone for CompressionInfo
Source§fn clone(&self) -> CompressionInfo
fn clone(&self) -> CompressionInfo
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for CompressionInfo
impl Debug for CompressionInfo
Source§impl Default for CompressionInfo
impl Default for CompressionInfo
Source§fn default() -> CompressionInfo
fn default() -> CompressionInfo
Source§impl PartialEq for CompressionInfo
impl PartialEq for CompressionInfo
Source§impl Space for CompressionInfo
impl Space for CompressionInfo
const INIT_SPACE: usize
impl Copy for CompressionInfo
impl Pod for CompressionInfo
impl StructuralPartialEq for CompressionInfo
Auto Trait Implementations§
impl Freeze for CompressionInfo
impl RefUnwindSafe for CompressionInfo
impl Send for CompressionInfo
impl Sync for CompressionInfo
impl Unpin for CompressionInfo
impl UnwindSafe for CompressionInfo
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CheckedBitPattern for Twhere
T: AnyBitPattern,
impl<T> CheckedBitPattern for Twhere
T: AnyBitPattern,
Source§type Bits = T
type Bits = T
Self must have the same layout as the specified Bits except for
the possible invalid bit patterns being checked during
is_valid_bit_pattern.Source§fn is_valid_bit_pattern(_bits: &T) -> bool
fn is_valid_bit_pattern(_bits: &T) -> bool
bits
as &Self.