Skip to content

Commit 48c5115

Browse files
committed
feat: add next_cardano_transactions_signing_config to EpochSettingsMessage and rename current_cardano_transactions_signing_config to cardano_transactions_signing_config
- refactor backward compatibility tests with the latest OpenAPI version supported by each structure - update OpenAPI specifications with `next_cardano_transactions_signing_config` and refactor by extracting to a dedicated 'CardanoTransactionsSigningConfig' component - make the '/epoch-settings' HTTP route return the correct data
1 parent 44f93b3 commit 48c5115

File tree

3 files changed

+69
-43
lines changed

3 files changed

+69
-43
lines changed

mithril-aggregator/src/http_server/routes/epoch_routes.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ mod handlers {
4646
debug!("⇄ HTTP SERVER: epoch_settings");
4747
let epoch_service = epoch_service.read().await;
4848

49-
let current_cardano_transactions_signing_config = signed_entity_config
49+
let cardano_transactions_signing_config = signed_entity_config
5050
.list_allowed_signed_entity_types_discriminants()
5151
.contains(&SignedEntityTypeDiscriminants::CardanoTransactions)
5252
.then_some(configuration.cardano_transactions_signing_config);
@@ -71,7 +71,9 @@ mod handlers {
7171
next_protocol_parameters: next_protocol_parameters.clone(),
7272
current_signers: SignerMessagePart::from_signers(current_signers.to_vec()),
7373
next_signers: SignerMessagePart::from_signers(next_signers.to_vec()),
74-
current_cardano_transactions_signing_config,
74+
cardano_transactions_signing_config: cardano_transactions_signing_config
75+
.clone(),
76+
next_cardano_transactions_signing_config: cardano_transactions_signing_config,
7577
};
7678
Ok(reply::json(&epoch_settings_message, StatusCode::OK))
7779
}

mithril-common/src/messages/epoch_settings.rs

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,11 @@ pub struct EpochSettingsMessage {
2424

2525
/// Cardano transactions signing configuration for the current epoch
2626
#[serde(skip_serializing_if = "Option::is_none")]
27-
pub current_cardano_transactions_signing_config: Option<CardanoTransactionsSigningConfig>,
27+
pub cardano_transactions_signing_config: Option<CardanoTransactionsSigningConfig>,
28+
29+
/// Cardano transactions signing configuration for the next epoch
30+
#[serde(skip_serializing_if = "Option::is_none")]
31+
pub next_cardano_transactions_signing_config: Option<CardanoTransactionsSigningConfig>,
2832
}
2933

3034
impl EpochSettingsMessage {
@@ -45,7 +49,8 @@ impl EpochSettingsMessage {
4549
},
4650
current_signers: [SignerMessagePart::dummy()].to_vec(),
4751
next_signers: [SignerMessagePart::dummy()].to_vec(),
48-
current_cardano_transactions_signing_config: Some(CardanoTransactionsSigningConfig::dummy()),
52+
cardano_transactions_signing_config: Some(CardanoTransactionsSigningConfig::dummy()),
53+
next_cardano_transactions_signing_config: Some(CardanoTransactionsSigningConfig::dummy()),
4954
}
5055
}
5156
}
@@ -76,15 +81,20 @@ mod tests {
7681
"operational_certificate":"certificate_456",
7782
"kes_period":45
7883
}],
79-
"current_cardano_transactions_signing_config": {
84+
"cardano_transactions_signing_config": {
8085
"security_parameter": 70,
8186
"step": 20
87+
},
88+
"next_cardano_transactions_signing_config": {
89+
"security_parameter": 50,
90+
"step": 10
8291
}
8392
8493
}"#;
8594

95+
// Supported structure until OpenAPI version 0.1.28.
8696
#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)]
87-
pub struct EpochSettingsMessageLegacyVersion {
97+
pub struct EpochSettingsMessageUntilV0_1_28 {
8898
/// Current Epoch
8999
pub epoch: Epoch,
90100

@@ -97,8 +107,9 @@ mod tests {
97107
pub next_protocol_parameters: ProtocolParameters,
98108
}
99109

110+
// Supported structure until OpenAPI version 0.1.29.
100111
#[derive(Clone, Debug, PartialEq, Default, Serialize, Deserialize)]
101-
pub struct EpochSettingsMessagePreviousVersion {
112+
pub struct EpochSettingsMessageUntilV0_1_29 {
102113
/// Current Epoch
103114
pub epoch: Epoch,
104115

@@ -117,8 +128,8 @@ mod tests {
117128
pub next_signers: Vec<SignerMessagePart>,
118129
}
119130

120-
fn golden_legacy_message() -> EpochSettingsMessageLegacyVersion {
121-
EpochSettingsMessageLegacyVersion {
131+
fn golden_message_until_open_api_0_1_28() -> EpochSettingsMessageUntilV0_1_28 {
132+
EpochSettingsMessageUntilV0_1_28 {
122133
epoch: Epoch(10),
123134
protocol_parameters: ProtocolParameters {
124135
k: 5,
@@ -133,8 +144,8 @@ mod tests {
133144
}
134145
}
135146

136-
fn golden_previous_message() -> EpochSettingsMessagePreviousVersion {
137-
EpochSettingsMessagePreviousVersion {
147+
fn golden_message_until_open_api_0_1_29() -> EpochSettingsMessageUntilV0_1_29 {
148+
EpochSettingsMessageUntilV0_1_29 {
138149
epoch: Epoch(10),
139150
protocol_parameters: ProtocolParameters {
140151
k: 5,
@@ -190,33 +201,37 @@ mod tests {
190201
operational_certificate: Some("certificate_456".to_string()),
191202
kes_period: Some(45),
192203
}],
193-
current_cardano_transactions_signing_config: Some(CardanoTransactionsSigningConfig {
204+
cardano_transactions_signing_config: Some(CardanoTransactionsSigningConfig {
194205
security_parameter: BlockNumber(70),
195206
step: BlockNumber(20),
196207
}),
208+
next_cardano_transactions_signing_config: Some(CardanoTransactionsSigningConfig {
209+
security_parameter: BlockNumber(50),
210+
step: BlockNumber(10),
211+
}),
197212
}
198213
}
199214

200-
// Test the backward compatibility with legacy structure.
215+
// Test the backward compatibility with the structure supported until OpenAPI version 0.1.28.
201216
#[test]
202-
fn test_actual_json_deserialized_into_legacy_message() {
217+
fn test_actual_json_deserialized_into_message_supported_until_open_api_0_1_28() {
203218
let json = ACTUAL_JSON;
204-
let message: EpochSettingsMessageLegacyVersion = serde_json::from_str(json).expect(
205-
"This JSON is expected to be successfully parsed into a EpochSettingsMessageLegacyVersion instance.",
219+
let message: EpochSettingsMessageUntilV0_1_28 = serde_json::from_str(json).expect(
220+
"This JSON is expected to be successfully parsed into a EpochSettingsMessageUntilVersion0_1_28 instance.",
206221
);
207222

208-
assert_eq!(golden_legacy_message(), message);
223+
assert_eq!(golden_message_until_open_api_0_1_28(), message);
209224
}
210225

211-
// Test the backward compatibility with previous structure.
226+
// Test the backward compatibility with the structure supported until OpenAPI version 0.1.29.
212227
#[test]
213-
fn test_actual_json_deserialized_into_previous_message() {
228+
fn test_actual_json_deserialized_into_message_supported_until_open_api_0_1_29() {
214229
let json = ACTUAL_JSON;
215-
let message: EpochSettingsMessagePreviousVersion = serde_json::from_str(json).expect(
216-
"This JSON is expected to be successfully parsed into a EpochSettingsMessagePreviousVersion instance.",
230+
let message: EpochSettingsMessageUntilV0_1_29 = serde_json::from_str(json).expect(
231+
"This JSON is expected to be successfully parsed into a EpochSettingsMessageUntilVersion0_1_29 instance.",
217232
);
218233

219-
assert_eq!(golden_previous_message(), message);
234+
assert_eq!(golden_message_until_open_api_0_1_29(), message);
220235
}
221236

222237
// Test the compatibility with current structure.

openapi.yaml

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ paths:
5555
Returns the information related to the current epoch:
5656
* protocol parameters for current epoch
5757
* protocol parameters for next epoch (to setup cryptography, allowing signers to register)
58+
* signers for current epoch
59+
* signers for next epoch
60+
* cardano transactions signing configuration for current epoch
61+
* cardano transactions signing configuration for next epoch
5862
responses:
5963
"200":
6064
description: epoch settings found
@@ -733,25 +737,10 @@ components:
733737
type: array
734738
items:
735739
$ref: "#/components/schemas/Signer"
736-
current_cardano_transactions_signing_config:
737-
description: |
738-
Cardano transactions signing configuration for the current epoch
739-
740-
Mandatory if `signed_entity_types` from the Aggregator configuration contains `CardanoTransactions`.
741-
type: object
742-
additionalProperties: false
743-
required:
744-
- security_parameter
745-
- step
746-
properties:
747-
security_parameter:
748-
description: Number of blocks to discard from the tip of the chain when importing Cardano transactions
749-
type: integer
750-
format: int64
751-
step:
752-
description: Number of blocks between signature of Cardano transactions
753-
type: integer
754-
format: int64
740+
cardano_transactions_signing_config:
741+
$ref: "#/components/schemas/CardanoTransactionsSigningConfig"
742+
next_cardano_transactions_signing_config:
743+
$ref: "#/components/schemas/CardanoTransactionsSigningConfig"
755744
example:
756745
{
757746
"epoch": 329,
@@ -791,8 +780,10 @@ components:
791780
"kes_period": 876
792781
}
793782
],
794-
"current_cardano_transactions_signing_config":
795-
{ "security_parameter": 100, "step": 10 }
783+
"cardano_transactions_signing_config":
784+
{ "security_parameter": 100, "step": 10 },
785+
"next_cardano_transactions_signing_config":
786+
{ "security_parameter": 50, "step": 5 }
796787
}
797788

798789
ProtocolParameters:
@@ -818,6 +809,24 @@ components:
818809
format: double
819810
example: { "k": 857, "m": 6172, "phi_f": 0.2 }
820811

812+
CardanoTransactionsSigningConfig:
813+
description: Cardano transactions signing configuration
814+
type: object
815+
additionalProperties: false
816+
required:
817+
- security_parameter
818+
- step
819+
properties:
820+
security_parameter:
821+
description: Number of blocks to discard from the tip of the chain when importing Cardano transactions
822+
type: integer
823+
format: int64
824+
step:
825+
description: Number of blocks between signature of Cardano transactions
826+
type: integer
827+
format: int64
828+
example: { "security_parameter": 100, "step": 10 }
829+
821830
CardanoDbBeacon:
822831
description: A point in the Cardano chain at which a Mithril certificate of the Cardano Database should be produced
823832
type: object

0 commit comments

Comments
 (0)