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
26#[cfg(test)]
27mod tests {
28
29 use crate::entities::BlockNumber;
30
31 use super::*;
32
33 const CURRENT_JSON: &str = r#"{
34 "epoch": 10,
35 "signer_registration_protocol": { "k": 500, "m": 10000, "phi_f": 0.65 },
36 "current_signers":[{
37 "party_id":"123",
38 "verification_key":"key_123",
39 "verification_key_signature":"signature_123",
40 "operational_certificate":"certificate_123",
41 "kes_period":12
42 }],
43 "next_signers": [{
44 "party_id":"456",
45 "verification_key":"key_456",
46 "verification_key_signature":"signature_456",
47 "operational_certificate":"certificate_456",
48 "kes_period":45
49 }],
50 "cardano_transactions_signing_config": {
51 "security_parameter": 70,
52 "step": 20
53 }
54 }"#;
55
56 #[derive(Debug, Serialize, Deserialize, PartialEq)]
57 struct EpochSettingsMessageUntilV0_1_51 {
58 pub epoch: Epoch,
59
60 #[serde(rename = "signer_registration_protocol")]
61 pub signer_registration_protocol_parameters: ProtocolParameters,
62
63 pub current_signers: Vec<SignerMessagePart>,
64
65 pub next_signers: Vec<SignerMessagePart>,
66
67 #[serde(skip_serializing_if = "Option::is_none")]
68 pub cardano_transactions_signing_config: Option<CardanoTransactionsSigningConfig>,
69
70 #[serde(skip_serializing_if = "Option::is_none")]
71 pub next_cardano_transactions_signing_config: Option<CardanoTransactionsSigningConfig>,
72 }
73
74 fn golden_message_until_open_api_0_1_51() -> EpochSettingsMessageUntilV0_1_51 {
75 EpochSettingsMessageUntilV0_1_51 {
76 epoch: Epoch(10),
77 signer_registration_protocol_parameters: ProtocolParameters {
78 k: 500,
79 m: 10000,
80 phi_f: 0.65,
81 },
82 current_signers: vec![SignerMessagePart {
83 party_id: "123".to_string(),
84 verification_key: "key_123".to_string(),
85 verification_key_signature: Some("signature_123".to_string()),
86 operational_certificate: Some("certificate_123".to_string()),
87 kes_period: Some(12),
88 }],
89 next_signers: vec![SignerMessagePart {
90 party_id: "456".to_string(),
91 verification_key: "key_456".to_string(),
92 verification_key_signature: Some("signature_456".to_string()),
93 operational_certificate: Some("certificate_456".to_string()),
94 kes_period: Some(45),
95 }],
96 cardano_transactions_signing_config: Some(CardanoTransactionsSigningConfig {
97 security_parameter: BlockNumber(70),
98 step: BlockNumber(20),
99 }),
100 next_cardano_transactions_signing_config: None,
101 }
102 }
103
104 fn golden_current_message() -> EpochSettingsMessage {
105 EpochSettingsMessage {
106 epoch: Epoch(10),
107 signer_registration_protocol_parameters: ProtocolParameters {
108 k: 500,
109 m: 10000,
110 phi_f: 0.65,
111 },
112 current_signers: vec![SignerMessagePart {
113 party_id: "123".to_string(),
114 verification_key: "key_123".to_string(),
115 verification_key_signature: Some("signature_123".to_string()),
116 operational_certificate: Some("certificate_123".to_string()),
117 kes_period: Some(12),
118 }],
119 next_signers: vec![SignerMessagePart {
120 party_id: "456".to_string(),
121 verification_key: "key_456".to_string(),
122 verification_key_signature: Some("signature_456".to_string()),
123 operational_certificate: Some("certificate_456".to_string()),
124 kes_period: Some(45),
125 }],
126 cardano_transactions_signing_config: Some(CardanoTransactionsSigningConfig {
127 security_parameter: BlockNumber(70),
128 step: BlockNumber(20),
129 }),
130 }
131 }
132
133 #[test]
134 fn test_current_json_deserialized_into_message_supported_until_open_api_0_1_51() {
135 let json = CURRENT_JSON;
136 let message: EpochSettingsMessageUntilV0_1_51 = serde_json::from_str(json).unwrap();
137
138 assert_eq!(golden_message_until_open_api_0_1_51(), message);
139 }
140
141 #[test]
142 fn test_current_json_deserialized_into_current_message() {
143 let json = CURRENT_JSON;
144 let message: EpochSettingsMessage = serde_json::from_str(json).expect(
145 "This JSON is expected to be successfully parsed into a EpochSettingsMessage instance.",
146 );
147
148 assert_eq!(golden_current_message(), message);
149 }
150}