kona_genesis/chain/
hardfork.rs1#[derive(Debug, Copy, Clone, Default, Hash, Eq, PartialEq)]
7#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
8#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
9#[cfg_attr(feature = "serde", serde(deny_unknown_fields))]
10pub struct HardForkConfig {
11 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
17 pub regolith_time: Option<u64>,
18 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
22 pub canyon_time: Option<u64>,
23 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
27 pub delta_time: Option<u64>,
28 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
32 pub ecotone_time: Option<u64>,
33 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
37 pub fjord_time: Option<u64>,
38 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
42 pub granite_time: Option<u64>,
43 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
47 pub holocene_time: Option<u64>,
48 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
56 pub pectra_blob_schedule_time: Option<u64>,
57 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
61 pub isthmus_time: Option<u64>,
62 #[cfg_attr(feature = "serde", serde(skip_serializing_if = "Option::is_none"))]
66 pub interop_time: Option<u64>,
67}
68
69#[cfg(test)]
70#[cfg(feature = "serde")]
71mod tests {
72 use super::*;
73
74 #[test]
75 fn test_hardforks_deserialize_json() {
76 let raw: &str = r#"
77 {
78 "canyon_time": 1699981200,
79 "delta_time": 1703203200,
80 "ecotone_time": 1708534800,
81 "fjord_time": 1716998400,
82 "granite_time": 1723478400,
83 "holocene_time":1732633200
84 }
85 "#;
86
87 let hardforks = HardForkConfig {
88 regolith_time: None,
89 canyon_time: Some(1699981200),
90 delta_time: Some(1703203200),
91 ecotone_time: Some(1708534800),
92 fjord_time: Some(1716998400),
93 granite_time: Some(1723478400),
94 holocene_time: Some(1732633200),
95 pectra_blob_schedule_time: None,
96 isthmus_time: None,
97 interop_time: None,
98 };
99
100 let deserialized: HardForkConfig = serde_json::from_str(raw).unwrap();
101 assert_eq!(hardforks, deserialized);
102 }
103
104 #[test]
105 fn test_hardforks_deserialize_new_field_fail_json() {
106 let raw: &str = r#"
107 {
108 "canyon_time": 1704992401,
109 "delta_time": 1708560000,
110 "ecotone_time": 1710374401,
111 "fjord_time": 1720627201,
112 "granite_time": 1726070401,
113 "holocene_time": 1736445601,
114 "new_field": 0
115 }
116 "#;
117
118 let err = serde_json::from_str::<HardForkConfig>(raw).unwrap_err();
119 assert_eq!(err.classify(), serde_json::error::Category::Data);
120 }
121
122 #[test]
123 fn test_hardforks_deserialize_toml() {
124 let raw: &str = r#"
125 canyon_time = 1699981200 # Tue 14 Nov 2023 17:00:00 UTC
126 delta_time = 1703203200 # Fri 22 Dec 2023 00:00:00 UTC
127 ecotone_time = 1708534800 # Wed 21 Feb 2024 17:00:00 UTC
128 fjord_time = 1716998400 # Wed 29 May 2024 16:00:00 UTC
129 granite_time = 1723478400 # Mon Aug 12 16:00:00 UTC 2024
130 holocene_time = 1732633200 # Tue Nov 26 15:00:00 UTC 2024
131 "#;
132
133 let hardforks = HardForkConfig {
134 regolith_time: None,
135 canyon_time: Some(1699981200),
136 delta_time: Some(1703203200),
137 ecotone_time: Some(1708534800),
138 fjord_time: Some(1716998400),
139 granite_time: Some(1723478400),
140 holocene_time: Some(1732633200),
141 pectra_blob_schedule_time: None,
142 isthmus_time: None,
143 interop_time: None,
144 };
145
146 let deserialized: HardForkConfig = toml::from_str(raw).unwrap();
147 assert_eq!(hardforks, deserialized);
148 }
149
150 #[test]
151 fn test_hardforks_deserialize_new_field_fail_toml() {
152 let raw: &str = r#"
153 canyon_time = 1699981200 # Tue 14 Nov 2023 17:00:00 UTC
154 delta_time = 1703203200 # Fri 22 Dec 2023 00:00:00 UTC
155 ecotone_time = 1708534800 # Wed 21 Feb 2024 17:00:00 UTC
156 fjord_time = 1716998400 # Wed 29 May 2024 16:00:00 UTC
157 granite_time = 1723478400 # Mon Aug 12 16:00:00 UTC 2024
158 holocene_time = 1732633200 # Tue Nov 26 15:00:00 UTC 2024
159 new_field_time = 1732633200 # Tue Nov 26 15:00:00 UTC 2024
160 "#;
161 toml::from_str::<HardForkConfig>(raw).unwrap_err();
162 }
163}