solders_primitives/
clock.rs1use derive_more::{From, Into};
2use pyo3::prelude::*;
3use serde::{Deserialize, Serialize};
4use solana_program::clock::{
5 Clock as ClockOriginal, Epoch, Slot, UnixTimestamp, DEFAULT_DEV_SLOTS_PER_EPOCH,
6 DEFAULT_HASHES_PER_SECOND, DEFAULT_HASHES_PER_TICK, DEFAULT_MS_PER_SLOT,
7 DEFAULT_SLOTS_PER_EPOCH, DEFAULT_S_PER_SLOT, DEFAULT_TICKS_PER_SECOND, DEFAULT_TICKS_PER_SLOT,
8 FORWARD_TRANSACTIONS_TO_LEADER_AT_SLOT_OFFSET, GENESIS_EPOCH, HOLD_TRANSACTIONS_SLOT_OFFSET,
9 INITIAL_RENT_EPOCH, MAX_HASH_AGE_IN_SECONDS, MAX_PROCESSING_AGE, MAX_RECENT_BLOCKHASHES,
10 MAX_TRANSACTION_FORWARDING_DELAY, MAX_TRANSACTION_FORWARDING_DELAY_GPU, MS_PER_TICK,
11 NUM_CONSECUTIVE_LEADER_SLOTS, SECONDS_PER_DAY, TICKS_PER_DAY,
12};
13use solders_traits_core::transaction_status_boilerplate;
14
15#[pyclass(module = "solders.account", subclass)]
19#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, Default, From, Into)]
20pub struct Clock(pub ClockOriginal);
21
22transaction_status_boilerplate!(Clock);
23
24#[solders_macros::richcmp_eq_only]
25#[solders_macros::common_methods]
26#[pymethods]
27impl Clock {
28 #[new]
29 fn new(
30 slot: Slot,
31 epoch_start_timestamp: UnixTimestamp,
32 epoch: Epoch,
33 leader_schedule_epoch: Epoch,
34 unix_timestamp: UnixTimestamp,
35 ) -> Self {
36 ClockOriginal {
37 slot,
38 epoch_start_timestamp,
39 epoch,
40 leader_schedule_epoch,
41 unix_timestamp,
42 }
43 .into()
44 }
45
46 #[getter]
48 pub fn slot(&self) -> Slot {
49 self.0.slot
50 }
51
52 #[getter]
54 pub fn epoch_start_timestamp(&self) -> UnixTimestamp {
55 self.0.epoch_start_timestamp
56 }
57
58 #[getter]
60 pub fn epoch(&self) -> Epoch {
61 self.0.epoch
62 }
63
64 #[getter]
66 pub fn leader_schedule_epoch(&self) -> Epoch {
67 self.0.leader_schedule_epoch
68 }
69
70 #[getter]
72 pub fn unix_timestamp(&self) -> UnixTimestamp {
73 self.0.unix_timestamp
74 }
75}
76
77pub fn create_clock_mod(py: Python<'_>) -> PyResult<&PyModule> {
78 let m = PyModule::new(py, "clock")?;
79 m.add_class::<Clock>()?;
80 m.add("DEFAULT_DEV_SLOTS_PER_EPOCH", DEFAULT_DEV_SLOTS_PER_EPOCH)?;
81 m.add("DEFAULT_HASHES_PER_SECOND", DEFAULT_HASHES_PER_SECOND)?;
82 m.add("DEFAULT_HASHES_PER_TICK", DEFAULT_HASHES_PER_TICK)?;
83 m.add("DEFAULT_MS_PER_SLOT", DEFAULT_MS_PER_SLOT)?;
84 m.add("DEFAULT_SLOTS_PER_EPOCH", DEFAULT_SLOTS_PER_EPOCH)?;
85 m.add("DEFAULT_S_PER_SLOT", DEFAULT_S_PER_SLOT)?;
86 m.add("DEFAULT_TICKS_PER_SECOND", DEFAULT_TICKS_PER_SECOND)?;
87 m.add("DEFAULT_TICKS_PER_SLOT", DEFAULT_TICKS_PER_SLOT)?;
88 m.add(
89 "FORWARD_TRANSACTIONS_TO_LEADER_AT_SLOT_OFFSET",
90 FORWARD_TRANSACTIONS_TO_LEADER_AT_SLOT_OFFSET,
91 )?;
92 m.add("GENESIS_EPOCH", GENESIS_EPOCH)?;
93 m.add(
94 "HOLD_TRANSACTIONS_SLOT_OFFSET",
95 HOLD_TRANSACTIONS_SLOT_OFFSET,
96 )?;
97 m.add("INITIAL_RENT_EPOCH", INITIAL_RENT_EPOCH)?;
98 m.add("MAX_HASH_AGE_IN_SECONDS", MAX_HASH_AGE_IN_SECONDS)?;
99 m.add("MAX_PROCESSING_AGE", MAX_PROCESSING_AGE)?;
100 m.add("MAX_RECENT_BLOCKHASHES", MAX_RECENT_BLOCKHASHES)?;
101 m.add(
102 "MAX_TRANSACTION_FORWARDING_DELAY",
103 MAX_TRANSACTION_FORWARDING_DELAY,
104 )?;
105 m.add(
106 "MAX_TRANSACTION_FORWARDING_DELAY_GPU",
107 MAX_TRANSACTION_FORWARDING_DELAY_GPU,
108 )?;
109 m.add("MS_PER_TICK", MS_PER_TICK)?;
110 m.add("NUM_CONSECUTIVE_LEADER_SLOTS", NUM_CONSECUTIVE_LEADER_SLOTS)?;
111 m.add("SECONDS_PER_DAY", SECONDS_PER_DAY)?;
112 m.add("TICKS_PER_DAY", TICKS_PER_DAY)?;
113 Ok(m)
114}