pub struct CompressionInfo {
pub config_version: u16,
pub lamports_per_write: u32,
pub last_claimed_slot: u64,
pub rent_config: RentConfig,
pub state: CompressionState,
}Fields§
§config_version: u16Version of the compressible config used to initialize this account.
lamports_per_write: u32Lamports to top up on each write (from config, stored per-account to avoid passing config on every write)
last_claimed_slot: u64Slot when rent was last claimed (epoch boundary accounting).
rent_config: RentConfigRent function parameters for determining compressibility/claims.
state: CompressionStateAccount compression state.
Implementations§
Source§impl CompressionInfo
impl CompressionInfo
Sourcepub fn new_from_config(cfg: &CompressibleConfig, current_slot: u64) -> Self
pub fn new_from_config(cfg: &CompressibleConfig, current_slot: u64) -> Self
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() -> Result<Self, ProgramError>
pub fn new_decompressed() -> Result<Self, ProgramError>
Backward-compat constructor used by older call sites; initializes minimal fields. Rent will flow to config’s rent_sponsor upon compression.
Sourcepub fn bump_last_claimed_slot(&mut self) -> Result<(), ProgramError>
pub fn bump_last_claimed_slot(&mut self) -> Result<(), ProgramError>
Update last_claimed_slot to the current 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<'a>(
&self,
account_info: &AccountInfo<'a>,
payer_info: &AccountInfo<'a>,
system_program_info: &AccountInfo<'a>,
) -> Result<(), ProgramError>
pub fn top_up_rent<'a>( &self, account_info: &AccountInfo<'a>, payer_info: &AccountInfo<'a>, system_program_info: &AccountInfo<'a>, ) -> Result<(), ProgramError>
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.
§Arguments
account_info- The PDA account to top uppayer_info- The payer account (will be debited)system_program_info- The System Program account for CPI
§Returns
Ok(())if top-up succeeded or was not neededErr(ProgramError)if transfer failed
Trait Implementations§
Source§impl BorshDeserialize for CompressionInfo
impl BorshDeserialize for CompressionInfo
fn deserialize_reader<R: Read>(reader: &mut R) -> Result<Self, Error>
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 more