soroban_env_host/
ledger_info.rs1use crate::xdr::{ContractDataDurability, LedgerKey};
2
3#[derive(Debug, Clone, Default, PartialEq, Eq)]
4pub struct LedgerInfo {
5 pub protocol_version: u32,
6 pub sequence_number: u32,
7 pub timestamp: u64,
8 pub network_id: [u8; 32],
9 pub base_reserve: u32,
10 pub min_temp_entry_ttl: u32,
11 pub min_persistent_entry_ttl: u32,
12 pub max_entry_ttl: u32,
13}
14
15impl LedgerInfo {
16 pub fn min_live_until_ledger_checked(&self, durability: ContractDataDurability) -> Option<u32> {
17 let min_live_until = match durability {
18 ContractDataDurability::Temporary => self.min_temp_entry_ttl,
19 ContractDataDurability::Persistent => self.min_persistent_entry_ttl,
20 };
21 self.sequence_number
22 .checked_add(min_live_until.saturating_sub(1))
23 }
24
25 pub fn max_live_until_ledger_checked(&self) -> Option<u32> {
26 self.sequence_number
27 .checked_add(self.max_entry_ttl.saturating_sub(1))
30 }
31}
32
33pub fn get_key_durability(key: &LedgerKey) -> Option<ContractDataDurability> {
34 match &key {
35 LedgerKey::ContractData(d) => Some(d.durability),
36 LedgerKey::ContractCode(_) => Some(ContractDataDurability::Persistent),
37 _ => None,
38 }
39}