node/daemon_json/
json_genesis.rs1use serde::{Deserialize, Serialize};
2use time::{format_description::well_known::Rfc3339, OffsetDateTime};
3
4use mina_p2p_messages::v2::{
5 BlockTimeTimeStableV1, MinaBaseProtocolConstantsCheckedValueStableV1,
6 UnsignedExtendedUInt32StableV1,
7};
8use openmina_core::constants::PROTOCOL_CONSTANTS;
9
10#[serde_with::serde_as]
11#[derive(Debug, Clone, Serialize, Deserialize)]
12pub struct Genesis {
13 k: Option<u32>,
14 slots_per_epoch: Option<u32>,
15 slots_per_sub_window: Option<u32>,
16 grace_period_slots: Option<u32>,
17 delta: Option<u32>,
18 #[serde_as(as = "Option<Rfc3339>")]
19 genesis_state_timestamp: Option<OffsetDateTime>,
20}
21
22macro_rules! value_or_protocol_default {
23 ($name:ident, $ty:ty) => {
24 pub fn $name(&self) -> $ty {
25 self.$name.map_or(PROTOCOL_CONSTANTS.$name, Into::into)
26 }
27 };
28}
29
30impl Genesis {
31 value_or_protocol_default!(k, UnsignedExtendedUInt32StableV1);
32 value_or_protocol_default!(slots_per_epoch, UnsignedExtendedUInt32StableV1);
33 value_or_protocol_default!(slots_per_sub_window, UnsignedExtendedUInt32StableV1);
34 value_or_protocol_default!(grace_period_slots, UnsignedExtendedUInt32StableV1);
35 value_or_protocol_default!(delta, UnsignedExtendedUInt32StableV1);
36 value_or_protocol_default!(genesis_state_timestamp, BlockTimeTimeStableV1);
37
38 pub fn protocol_constants(&self) -> MinaBaseProtocolConstantsCheckedValueStableV1 {
39 MinaBaseProtocolConstantsCheckedValueStableV1 {
40 k: self.k(),
41 slots_per_epoch: self.slots_per_epoch(),
42 slots_per_sub_window: self.slots_per_sub_window(),
43 grace_period_slots: self.grace_period_slots(),
44 delta: self.delta(),
45 genesis_state_timestamp: self.genesis_state_timestamp(),
46 }
47 }
48}