mithril_common/messages/
epoch_settings.rs

1use crate::entities::{CardanoTransactionsSigningConfig, Epoch, ProtocolParameters};
2use crate::messages::SignerMessagePart;
3use serde::{Deserialize, Serialize};
4
5/// EpochSettings represents the settings of an epoch
6#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
7pub struct EpochSettingsMessage {
8    /// Current Epoch
9    pub epoch: Epoch,
10
11    /// Signer Registration Protocol parameters
12    #[serde(rename = "signer_registration_protocol")]
13    pub signer_registration_protocol_parameters: ProtocolParameters,
14
15    /// Current Signers
16    pub current_signers: Vec<SignerMessagePart>,
17
18    /// Signers that will be able to sign on the next epoch
19    pub next_signers: Vec<SignerMessagePart>,
20
21    /// Cardano transactions signing configuration for the current epoch
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub cardano_transactions_signing_config: Option<CardanoTransactionsSigningConfig>,
24
25    /// Cardano transactions signing configuration for the next epoch
26    #[serde(skip_serializing_if = "Option::is_none")]
27    pub next_cardano_transactions_signing_config: Option<CardanoTransactionsSigningConfig>,
28}
29
30#[cfg(test)]
31mod tests {
32
33    use crate::entities::BlockNumber;
34
35    use super::*;
36
37    const CURRENT_JSON: &str = r#"{
38        "epoch": 10,
39        "signer_registration_protocol":  { "k": 500, "m": 10000, "phi_f": 0.65 },
40        "current_signers":[{
41            "party_id":"123",
42            "verification_key":"key_123",
43            "verification_key_signature":"signature_123",
44            "operational_certificate":"certificate_123",
45            "kes_period":12
46        }],
47        "next_signers": [{
48            "party_id":"456",
49            "verification_key":"key_456",
50            "verification_key_signature":"signature_456",
51            "operational_certificate":"certificate_456",
52            "kes_period":45
53        }],
54        "cardano_transactions_signing_config": {
55            "security_parameter": 70,
56            "step": 20
57        },
58        "next_cardano_transactions_signing_config": {
59            "security_parameter": 50,
60            "step": 10
61        }
62    }"#;
63
64    fn golden_current_message() -> EpochSettingsMessage {
65        EpochSettingsMessage {
66            epoch: Epoch(10),
67            signer_registration_protocol_parameters: ProtocolParameters {
68                k: 500,
69                m: 10000,
70                phi_f: 0.65,
71            },
72            current_signers: vec![SignerMessagePart {
73                party_id: "123".to_string(),
74                verification_key: "key_123".to_string(),
75                verification_key_signature: Some("signature_123".to_string()),
76                operational_certificate: Some("certificate_123".to_string()),
77                kes_period: Some(12),
78            }],
79            next_signers: vec![SignerMessagePart {
80                party_id: "456".to_string(),
81                verification_key: "key_456".to_string(),
82                verification_key_signature: Some("signature_456".to_string()),
83                operational_certificate: Some("certificate_456".to_string()),
84                kes_period: Some(45),
85            }],
86            cardano_transactions_signing_config: Some(CardanoTransactionsSigningConfig {
87                security_parameter: BlockNumber(70),
88                step: BlockNumber(20),
89            }),
90            next_cardano_transactions_signing_config: Some(CardanoTransactionsSigningConfig {
91                security_parameter: BlockNumber(50),
92                step: BlockNumber(10),
93            }),
94        }
95    }
96
97    #[test]
98    fn test_current_json_deserialized_into_current_message() {
99        let json = CURRENT_JSON;
100        let message: EpochSettingsMessage = serde_json::from_str(json).expect(
101            "This JSON is expected to be successfully parsed into a EpochSettingsMessage instance.",
102        );
103
104        assert_eq!(golden_current_message(), message);
105    }
106}