Skip to main content

stellar_xdr/generated/
ledger_header.rs

1#[allow(unused_imports, clippy::wildcard_imports)]
2use super::*;
3
4/// LedgerHeader is an XDR Struct defined as:
5///
6/// ```text
7/// struct LedgerHeader
8/// {
9///     uint32 ledgerVersion;    // the protocol version of the ledger
10///     Hash previousLedgerHash; // hash of the previous ledger header
11///     StellarValue scpValue;   // what consensus agreed to
12///     Hash txSetResultHash;    // the TransactionResultSet that led to this ledger
13///     Hash bucketListHash;     // hash of the ledger state
14///
15///     uint32 ledgerSeq; // sequence number of this ledger
16///
17///     int64 totalCoins; // total number of stroops in existence.
18///                       // 10,000,000 stroops in 1 XLM
19///
20///     int64 feePool;       // fees burned since last inflation run
21///     uint32 inflationSeq; // inflation sequence number
22///
23///     uint64 idPool; // last used global ID, used for generating objects
24///
25///     uint32 baseFee;     // base fee per operation in stroops
26///     uint32 baseReserve; // account base reserve in stroops
27///
28///     uint32 maxTxSetSize; // maximum size a transaction set can be
29///
30///     Hash skipList[4]; // hashes of ledgers in the past. allows you to jump back
31///                       // in time without walking the chain back ledger by ledger
32///                       // each slot contains the oldest ledger that is mod of
33///                       // either 50  5000  50000 or 500000 depending on index
34///                       // skipList[0] mod(50), skipList[1] mod(5000), etc
35///
36///     // reserved for future use
37///     union switch (int v)
38///     {
39///     case 0:
40///         void;
41///     case 1:
42///         LedgerHeaderExtensionV1 v1;
43///     }
44///     ext;
45/// };
46/// ```
47///
48#[cfg_attr(feature = "alloc", derive(Default))]
49#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
50#[cfg_attr(feature = "serde", cfg_eval::cfg_eval)]
51#[cfg_attr(feature = "arbitrary", derive(Arbitrary))]
52#[cfg_attr(
53    all(feature = "serde", feature = "alloc"),
54    serde_with::serde_as,
55    derive(serde::Serialize, serde::Deserialize),
56    serde(rename_all = "snake_case")
57)]
58#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
59pub struct LedgerHeader {
60    pub ledger_version: u32,
61    pub previous_ledger_hash: Hash,
62    pub scp_value: StellarValue,
63    pub tx_set_result_hash: Hash,
64    pub bucket_list_hash: Hash,
65    pub ledger_seq: u32,
66    #[cfg_attr(
67        all(feature = "serde", feature = "alloc"),
68        serde_as(as = "NumberOrString")
69    )]
70    pub total_coins: i64,
71    #[cfg_attr(
72        all(feature = "serde", feature = "alloc"),
73        serde_as(as = "NumberOrString")
74    )]
75    pub fee_pool: i64,
76    pub inflation_seq: u32,
77    #[cfg_attr(
78        all(feature = "serde", feature = "alloc"),
79        serde_as(as = "NumberOrString")
80    )]
81    pub id_pool: u64,
82    pub base_fee: u32,
83    pub base_reserve: u32,
84    pub max_tx_set_size: u32,
85    pub skip_list: [Hash; 4],
86    pub ext: LedgerHeaderExt,
87}
88
89impl ReadXdr for LedgerHeader {
90    #[cfg(feature = "std")]
91    fn read_xdr<R: Read>(r: &mut Limited<R>) -> Result<Self, Error> {
92        r.with_limited_depth(|r| {
93            Ok(Self {
94                ledger_version: u32::read_xdr(r)?,
95                previous_ledger_hash: Hash::read_xdr(r)?,
96                scp_value: StellarValue::read_xdr(r)?,
97                tx_set_result_hash: Hash::read_xdr(r)?,
98                bucket_list_hash: Hash::read_xdr(r)?,
99                ledger_seq: u32::read_xdr(r)?,
100                total_coins: i64::read_xdr(r)?,
101                fee_pool: i64::read_xdr(r)?,
102                inflation_seq: u32::read_xdr(r)?,
103                id_pool: u64::read_xdr(r)?,
104                base_fee: u32::read_xdr(r)?,
105                base_reserve: u32::read_xdr(r)?,
106                max_tx_set_size: u32::read_xdr(r)?,
107                skip_list: <[Hash; 4]>::read_xdr(r)?,
108                ext: LedgerHeaderExt::read_xdr(r)?,
109            })
110        })
111    }
112}
113
114impl WriteXdr for LedgerHeader {
115    #[cfg(feature = "std")]
116    fn write_xdr<W: Write>(&self, w: &mut Limited<W>) -> Result<(), Error> {
117        w.with_limited_depth(|w| {
118            self.ledger_version.write_xdr(w)?;
119            self.previous_ledger_hash.write_xdr(w)?;
120            self.scp_value.write_xdr(w)?;
121            self.tx_set_result_hash.write_xdr(w)?;
122            self.bucket_list_hash.write_xdr(w)?;
123            self.ledger_seq.write_xdr(w)?;
124            self.total_coins.write_xdr(w)?;
125            self.fee_pool.write_xdr(w)?;
126            self.inflation_seq.write_xdr(w)?;
127            self.id_pool.write_xdr(w)?;
128            self.base_fee.write_xdr(w)?;
129            self.base_reserve.write_xdr(w)?;
130            self.max_tx_set_size.write_xdr(w)?;
131            self.skip_list.write_xdr(w)?;
132            self.ext.write_xdr(w)?;
133            Ok(())
134        })
135    }
136}