mithril_common/messages/
epoch_settings.rs1use crate::entities::{CardanoTransactionsSigningConfig, Epoch, ProtocolParameters};
2use crate::messages::SignerMessagePart;
3use serde::{Deserialize, Serialize};
4
5#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
7pub struct EpochSettingsMessage {
8 pub epoch: Epoch,
10
11 #[serde(rename = "signer_registration_protocol")]
13 pub signer_registration_protocol_parameters: ProtocolParameters,
14
15 pub current_signers: Vec<SignerMessagePart>,
17
18 pub next_signers: Vec<SignerMessagePart>,
20
21 #[serde(skip_serializing_if = "Option::is_none")]
23 pub cardano_transactions_signing_config: Option<CardanoTransactionsSigningConfig>,
24
25 #[serde(skip_serializing_if = "Option::is_none")]
27 pub next_cardano_transactions_signing_config: Option<CardanoTransactionsSigningConfig>,
28}
29
30impl EpochSettingsMessage {
31 cfg_test_tools! {
32 pub fn dummy() -> Self {
34 Self {
35 epoch: Epoch(10),
36 signer_registration_protocol_parameters: ProtocolParameters {
37 k: 5,
38 m: 100,
39 phi_f: 0.65,
40 },
41 current_signers: [SignerMessagePart::dummy()].to_vec(),
42 next_signers: [SignerMessagePart::dummy()].to_vec(),
43 cardano_transactions_signing_config: Some(CardanoTransactionsSigningConfig::dummy()),
44 next_cardano_transactions_signing_config: Some(CardanoTransactionsSigningConfig::dummy()),
45 }
46 }
47 }
48}
49
50#[cfg(test)]
51mod tests {
52
53 use crate::entities::BlockNumber;
54
55 use super::*;
56
57 const CURRENT_JSON: &str = r#"{
58 "epoch": 10,
59 "signer_registration_protocol": { "k": 500, "m": 10000, "phi_f": 0.65 },
60 "current_signers":[{
61 "party_id":"123",
62 "verification_key":"key_123",
63 "verification_key_signature":"signature_123",
64 "operational_certificate":"certificate_123",
65 "kes_period":12
66 }],
67 "next_signers": [{
68 "party_id":"456",
69 "verification_key":"key_456",
70 "verification_key_signature":"signature_456",
71 "operational_certificate":"certificate_456",
72 "kes_period":45
73 }],
74 "cardano_transactions_signing_config": {
75 "security_parameter": 70,
76 "step": 20
77 },
78 "next_cardano_transactions_signing_config": {
79 "security_parameter": 50,
80 "step": 10
81 }
82 }"#;
83
84 fn golden_current_message() -> EpochSettingsMessage {
85 EpochSettingsMessage {
86 epoch: Epoch(10),
87 signer_registration_protocol_parameters: ProtocolParameters {
88 k: 500,
89 m: 10000,
90 phi_f: 0.65,
91 },
92 current_signers: vec![SignerMessagePart {
93 party_id: "123".to_string(),
94 verification_key: "key_123".to_string(),
95 verification_key_signature: Some("signature_123".to_string()),
96 operational_certificate: Some("certificate_123".to_string()),
97 kes_period: Some(12),
98 }],
99 next_signers: vec![SignerMessagePart {
100 party_id: "456".to_string(),
101 verification_key: "key_456".to_string(),
102 verification_key_signature: Some("signature_456".to_string()),
103 operational_certificate: Some("certificate_456".to_string()),
104 kes_period: Some(45),
105 }],
106 cardano_transactions_signing_config: Some(CardanoTransactionsSigningConfig {
107 security_parameter: BlockNumber(70),
108 step: BlockNumber(20),
109 }),
110 next_cardano_transactions_signing_config: Some(CardanoTransactionsSigningConfig {
111 security_parameter: BlockNumber(50),
112 step: BlockNumber(10),
113 }),
114 }
115 }
116
117 #[test]
118 fn test_current_json_deserialized_into_current_message() {
119 let json = CURRENT_JSON;
120 let message: EpochSettingsMessage = serde_json::from_str(json).expect(
121 "This JSON is expected to be successfully parsed into a EpochSettingsMessage instance.",
122 );
123
124 assert_eq!(golden_current_message(), message);
125 }
126}