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
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}