eest_types/
config.rs

1use super::{deserializer::deserialize_str_as_u64, SpecName};
2use serde::Deserialize;
3use std::collections::HashMap;
4
5#[derive(Clone, Debug, PartialEq, Eq, Deserialize)]
6#[serde(rename_all = "camelCase", deny_unknown_fields)]
7pub struct BlobConfig {
8    #[serde(deserialize_with = "deserialize_str_as_u64")]
9    pub target: u64,
10    #[serde(deserialize_with = "deserialize_str_as_u64")]
11    pub max: u64,
12    #[serde(deserialize_with = "deserialize_str_as_u64")]
13    pub base_fee_update_fraction: u64,
14}
15
16#[derive(Clone, Debug, PartialEq, Eq, Deserialize)]
17#[serde(rename_all = "camelCase", deny_unknown_fields)]
18pub struct Config {
19    pub blob_schedule: Option<HashMap<SpecName, BlobConfig>>,
20    #[serde(deserialize_with = "deserialize_str_as_u64")]
21    pub chainid: u64,
22    pub network: Option<SpecName>,
23}
24
25#[cfg(test)]
26mod tests {
27    use super::*;
28
29    #[test]
30    fn deserialize() {
31        let json = r#"
32        {
33            "blobSchedule": {
34                "Cancun": {
35                    "target": "0x03",
36                    "max": "0x06",
37                    "baseFeeUpdateFraction": "0x32f0ed"
38                }
39            },
40            "chainid": "0x01"
41        }
42        "#;
43
44        let config: Config = serde_json::from_str(json).unwrap();
45        assert_eq!(config.chainid, 1);
46        assert!(config.blob_schedule.is_some());
47
48        let json = r#"
49        {
50            "chainid": "0x01"
51        }
52        "#;
53
54        let config: Config = serde_json::from_str(json).unwrap();
55        assert!(!config.blob_schedule.is_some());
56    }
57}