mithril_common/messages/
aggregator_status.rs1use serde::{Deserialize, Serialize};
2
3use crate::entities::{CardanoEra, Epoch, ProtocolParameters, Stake, SupportedEra, TotalSPOs};
4
5#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
7pub struct AggregatorStatusMessage {
8 pub epoch: Epoch,
10
11 pub cardano_era: CardanoEra,
13
14 pub cardano_network: String,
16
17 pub mithril_era: SupportedEra,
19
20 pub cardano_node_version: String,
22
23 pub aggregator_node_version: String,
25
26 #[serde(rename = "protocol")]
28 pub protocol_parameters: ProtocolParameters,
29
30 #[serde(rename = "next_protocol")]
32 pub next_protocol_parameters: ProtocolParameters,
33
34 pub total_signers: usize,
36
37 pub total_next_signers: usize,
39
40 pub total_stakes_signers: Stake,
42
43 pub total_next_stakes_signers: Stake,
45
46 pub total_cardano_spo: TotalSPOs,
48
49 pub total_cardano_stake: Stake,
51}
52
53#[cfg(test)]
54mod tests {
55 use super::*;
56
57 const CURRENT_JSON: &str = r#"{
58 "epoch": 48,
59 "cardano_era": "conway",
60 "cardano_network": "mainnet",
61 "mithril_era": "pythagoras",
62 "cardano_node_version": "1.2.3",
63 "aggregator_node_version": "4.5.6",
64 "protocol": { "k": 5, "m": 100, "phi_f": 0.65 },
65 "next_protocol": { "k": 50, "m": 1000, "phi_f": 0.65 },
66 "total_signers": 1234,
67 "total_next_signers": 56789,
68 "total_stakes_signers": 123456789,
69 "total_next_stakes_signers": 987654321,
70 "total_cardano_spo": 7777,
71 "total_cardano_stake": 888888888
72 }"#;
73
74 fn golden_current_message() -> AggregatorStatusMessage {
75 AggregatorStatusMessage {
76 epoch: Epoch(48),
77 cardano_era: "conway".to_string(),
78 cardano_network: "mainnet".to_string(),
79 mithril_era: SupportedEra::Pythagoras,
80 cardano_node_version: "1.2.3".to_string(),
81 aggregator_node_version: "4.5.6".to_string(),
82 protocol_parameters: ProtocolParameters {
83 k: 5,
84 m: 100,
85 phi_f: 0.65,
86 },
87 next_protocol_parameters: ProtocolParameters {
88 k: 50,
89 m: 1000,
90 phi_f: 0.65,
91 },
92 total_signers: 1234,
93 total_next_signers: 56789,
94 total_stakes_signers: 123456789,
95 total_next_stakes_signers: 987654321,
96 total_cardano_spo: 7777,
97 total_cardano_stake: 888888888,
98 }
99 }
100
101 #[test]
102 fn test_current_json_deserialized_into_current_message() {
103 let json = CURRENT_JSON;
104 let message: AggregatorStatusMessage = serde_json::from_str(json).expect(
105 "This JSON is expected to be successfully parsed into a AggregatorStatusMessage instance.",
106 );
107
108 assert_eq!(golden_current_message(), message);
109 }
110}