Skip to content

Commit 640ee4d

Browse files
authored
Merge pull request #1808 from input-output-hk/ensemble/1804/remove_call_to_chain_observer_on_pending_certificate_route
Remove call to chain observer on pending certificate route
2 parents 380a4bf + e9dbe66 commit 640ee4d

File tree

9 files changed

+210
-63
lines changed

9 files changed

+210
-63
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ As a minor extension, we have adopted a slightly different versioning convention
2525

2626
- Add prettier configuration to standardize the code formatting in the repository.
2727

28+
- Field `beacon` becomes optional in `CertificatePendingMessage` response of `/certificate-pending` route.
29+
2830
- **UNSTABLE** Cardano transactions certification:
2931

3032
- Optimize the performances of the computation of the proof with a Merkle map.

Cargo.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mithril-aggregator/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "mithril-aggregator"
3-
version = "0.5.38"
3+
version = "0.5.39"
44
description = "A Mithril Aggregator server"
55
authors = { workspace = true }
66
edition = { workspace = true }

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

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ fn certificate_pending(
1717
) -> impl Filter<Extract = (impl warp::Reply,), Error = warp::Rejection> + Clone {
1818
warp::path!("certificate-pending")
1919
.and(warp::get())
20-
.and(middlewares::with_config(dependency_manager.clone()))
21-
.and(middlewares::with_ticker_service(dependency_manager.clone()))
2220
.and(middlewares::with_certificate_pending_store(
2321
dependency_manager,
2422
))
@@ -47,11 +45,10 @@ fn certificate_certificate_hash(
4745

4846
mod handlers {
4947
use crate::{
50-
http_server::routes::reply, services::MessageService, unwrap_to_internal_server_error,
51-
CertificatePendingStore, Configuration, ToCertificatePendingMessageAdapter,
48+
http_server::routes::reply, services::MessageService, CertificatePendingStore,
49+
ToCertificatePendingMessageAdapter,
5250
};
5351

54-
use mithril_common::TickerService;
5552
use slog_scope::{debug, warn};
5653
use std::convert::Infallible;
5754
use std::sync::Arc;
@@ -61,26 +58,13 @@ mod handlers {
6158

6259
/// Certificate Pending
6360
pub async fn certificate_pending(
64-
config: Configuration,
65-
ticker_service: Arc<dyn TickerService>,
6661
certificate_pending_store: Arc<CertificatePendingStore>,
6762
) -> Result<impl warp::Reply, Infallible> {
6863
debug!("⇄ HTTP SERVER: certificate_pending");
6964

70-
let network =
71-
unwrap_to_internal_server_error!(config.get_network(), "certificate_pending::error");
72-
let time_point = unwrap_to_internal_server_error!(
73-
ticker_service.get_current_time_point().await,
74-
"certificate_pending::error"
75-
);
76-
7765
match certificate_pending_store.get().await {
7866
Ok(Some(certificate_pending)) => Ok(reply::json(
79-
&ToCertificatePendingMessageAdapter::adapt(
80-
certificate_pending,
81-
network,
82-
time_point.immutable_file_number,
83-
),
67+
&ToCertificatePendingMessageAdapter::adapt(certificate_pending),
8468
StatusCode::OK,
8569
)),
8670
Ok(None) => Ok(reply::empty(StatusCode::NO_CONTENT)),

mithril-aggregator/src/message_adapters/to_certificate_pending_message.rs

Lines changed: 44 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,25 @@
1-
use mithril_common::entities::{CardanoDbBeacon, ImmutableFileNumber};
1+
use mithril_common::entities::CardanoDbBeacon;
22
use mithril_common::{
3-
entities::{CertificatePending, Signer},
3+
entities::{CertificatePending, SignedEntityType, Signer},
44
messages::{CertificatePendingMessage, SignerMessagePart},
5-
CardanoNetwork,
65
};
76

87
/// Adapter to turn [CertificatePending] instances into [CertificatePendingMessage].
98
pub struct ToCertificatePendingMessageAdapter;
109

1110
impl ToCertificatePendingMessageAdapter {
1211
/// Method to trigger the conversion
13-
pub fn adapt(
14-
certificate_pending: CertificatePending,
15-
network: CardanoNetwork,
16-
immutable_file_number: ImmutableFileNumber,
17-
) -> CertificatePendingMessage {
18-
let beacon = CardanoDbBeacon::new(
19-
network.to_string(),
20-
*certificate_pending.epoch,
21-
immutable_file_number,
22-
);
12+
pub fn adapt(certificate_pending: CertificatePending) -> CertificatePendingMessage {
13+
#[allow(deprecated)]
14+
let beacon = match &certificate_pending.signed_entity_type {
15+
SignedEntityType::CardanoImmutableFilesFull(beacon) => beacon.clone(),
16+
_ => CardanoDbBeacon::empty(),
17+
};
2318

2419
#[allow(deprecated)]
2520
CertificatePendingMessage {
26-
epoch: beacon.epoch,
27-
beacon,
21+
epoch: certificate_pending.epoch,
22+
beacon: Some(beacon),
2823
signed_entity_type: certificate_pending.signed_entity_type,
2924
protocol_parameters: certificate_pending.protocol_parameters,
3025
next_protocol_parameters: certificate_pending.next_protocol_parameters,
@@ -55,23 +50,50 @@ impl ToCertificatePendingMessageAdapter {
5550

5651
#[cfg(test)]
5752
mod tests {
58-
use mithril_common::test_utils::fake_data;
53+
use mithril_common::{
54+
entities::{Epoch, SignedEntityType},
55+
test_utils::fake_data,
56+
};
5957

6058
use super::*;
6159

6260
#[test]
6361
fn adapt_ok() {
6462
let certificate_pending = fake_data::certificate_pending();
6563
let epoch = certificate_pending.epoch;
66-
let message = ToCertificatePendingMessageAdapter::adapt(
67-
certificate_pending,
68-
fake_data::network(),
69-
10,
70-
);
64+
let message = ToCertificatePendingMessageAdapter::adapt(certificate_pending);
7165

7266
assert_eq!(epoch, message.epoch);
7367
}
7468

69+
#[test]
70+
fn adapt_on_cardano_immutable_files_full_signed_entity_type_ok() {
71+
let mut certificate_pending = fake_data::certificate_pending();
72+
let beacon = fake_data::beacon();
73+
certificate_pending.signed_entity_type =
74+
SignedEntityType::CardanoImmutableFilesFull(beacon.clone());
75+
76+
let message = ToCertificatePendingMessageAdapter::adapt(certificate_pending);
77+
78+
#[allow(deprecated)]
79+
let beacon_from_message = message.beacon.unwrap();
80+
assert_eq!(beacon, beacon_from_message);
81+
}
82+
83+
#[test]
84+
fn adapt_on_other_than_cardano_immutable_files_full_signed_entity_type_ok() {
85+
let mut certificate_pending = fake_data::certificate_pending();
86+
let beacon = CardanoDbBeacon::new("", 0, 0);
87+
certificate_pending.signed_entity_type =
88+
SignedEntityType::MithrilStakeDistribution(Epoch(15));
89+
90+
let message = ToCertificatePendingMessageAdapter::adapt(certificate_pending);
91+
92+
#[allow(deprecated)]
93+
let beacon_from_message = message.beacon.unwrap();
94+
assert_eq!(beacon, beacon_from_message);
95+
}
96+
7597
#[test]
7698
fn adapt_signers() {
7799
let fake_signers = fake_data::signers(5);
@@ -82,11 +104,7 @@ mod tests {
82104
next_signers,
83105
..fake_data::certificate_pending()
84106
};
85-
let message = ToCertificatePendingMessageAdapter::adapt(
86-
certificate_pending,
87-
fake_data::network(),
88-
10,
89-
);
107+
let message = ToCertificatePendingMessageAdapter::adapt(certificate_pending);
90108

91109
assert_eq!(2, message.signers.len());
92110
assert_eq!(3, message.next_signers.len());

mithril-common/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "mithril-common"
3-
version = "0.4.27"
3+
version = "0.4.28"
44
description = "Common types, interfaces, and utilities for Mithril nodes."
55
authors = { workspace = true }
66
edition = { workspace = true }

mithril-common/src/entities/cardano_db_beacon.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,12 @@ impl CardanoDbBeacon {
6161
}
6262
}
6363

64+
/// Value used as a placeholder where a beacon is necessary
65+
#[deprecated]
66+
pub fn empty() -> Self {
67+
Self::new("", 0, 0)
68+
}
69+
6470
/// Computes the hash of a CardanoDbBeacon
6571
pub fn compute_hash(&self) -> String {
6672
let mut hasher = Sha256::new();

0 commit comments

Comments
 (0)