Skip to content

Commit 538e2e2

Browse files
authored
Merge pull request #886 from input-output-hk/greg/852/immutable_signable
immutable signable service
2 parents aec981c + fc0d003 commit 538e2e2

File tree

8 files changed

+90
-6
lines changed

8 files changed

+90
-6
lines changed

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.3.6"
3+
version = "0.3.7"
44
description = "A Mithril Aggregator server"
55
authors = { workspace = true }
66
edition = { workspace = true }

mithril-aggregator/src/dependency_injection/builder.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,9 @@ use crate::{
4242
},
4343
event_store::{EventMessage, EventStore, TransmitterService},
4444
http_server::routes::router,
45-
signable_builder::{MithrilStakeDistributionSignableBuilder, SignableBuilderService},
45+
signable_builder::{
46+
ImmutableSignableBuilder, MithrilStakeDistributionSignableBuilder, SignableBuilderService,
47+
},
4648
signer_registerer::SignerRecorder,
4749
stake_distribution_service::{MithrilStakeDistributionService, StakeDistributionService},
4850
ticker_service::{MithrilTickerService, TickerService},
@@ -875,8 +877,11 @@ impl DependenciesBuilder {
875877
let multi_signer = self.get_multi_signer().await?;
876878
let mithril_stake_distribution_builder =
877879
MithrilStakeDistributionSignableBuilder::new(multi_signer);
880+
let immutable_signable_builder =
881+
ImmutableSignableBuilder::new(self.get_immutable_digester().await?);
878882
let signable_builder_service = Arc::new(SignableBuilderService::new(
879883
mithril_stake_distribution_builder,
884+
immutable_signable_builder,
880885
));
881886

882887
Ok(signable_builder_service)
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
use std::sync::Arc;
2+
3+
use async_trait::async_trait;
4+
use mithril_common::{
5+
digesters::ImmutableDigester,
6+
entities::{Beacon, ProtocolMessage, ProtocolMessagePartKey},
7+
signable_builder::SignableBuilder,
8+
StdResult,
9+
};
10+
11+
pub struct ImmutableSignableBuilder {
12+
immutable_digester: Arc<dyn ImmutableDigester>,
13+
}
14+
15+
impl ImmutableSignableBuilder {
16+
/// Constructor
17+
pub fn new(immutable_digester: Arc<dyn ImmutableDigester>) -> Self {
18+
Self { immutable_digester }
19+
}
20+
}
21+
22+
#[async_trait]
23+
impl SignableBuilder<Beacon, ProtocolMessage> for ImmutableSignableBuilder {
24+
async fn compute_signable(&self, beacon: Beacon) -> StdResult<ProtocolMessage> {
25+
let digest = self.immutable_digester.compute_digest(&beacon).await?;
26+
let mut protocol_message = ProtocolMessage::new();
27+
protocol_message.set_message_part(ProtocolMessagePartKey::SnapshotDigest, digest);
28+
29+
Ok(protocol_message)
30+
}
31+
}
32+
33+
#[cfg(test)]
34+
mod tests {
35+
use super::*;
36+
37+
use async_trait::async_trait;
38+
use mithril_common::digesters::{ImmutableDigester, ImmutableDigesterError};
39+
use mithril_common::entities::Beacon;
40+
41+
#[derive(Default)]
42+
pub struct ImmutableDigesterImpl;
43+
44+
#[async_trait]
45+
impl ImmutableDigester for ImmutableDigesterImpl {
46+
async fn compute_digest(&self, beacon: &Beacon) -> Result<String, ImmutableDigesterError> {
47+
Ok(format!("immutable {}", beacon.immutable_file_number))
48+
}
49+
}
50+
#[tokio::test]
51+
async fn compute_signable() {
52+
let digester = ImmutableDigesterImpl::default();
53+
let signable_builder = ImmutableSignableBuilder::new(Arc::new(digester));
54+
let protocol_message = signable_builder
55+
.compute_signable(Beacon::default())
56+
.await
57+
.unwrap();
58+
59+
assert_eq!(
60+
&"immutable 0".to_string(),
61+
protocol_message
62+
.get_message_part(&ProtocolMessagePartKey::SnapshotDigest)
63+
.unwrap()
64+
);
65+
}
66+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
//! The module used for building signables
22
3+
mod immutable_signable_builder;
34
mod mithril_stake_distribution;
45
mod signable_builder_service;
56

7+
pub use immutable_signable_builder::*;
68
pub use mithril_stake_distribution::*;
79
pub use signable_builder_service::*;

mithril-aggregator/src/signable_builder/signable_builder_service.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,23 @@ use mithril_common::{
66
StdResult,
77
};
88

9-
use super::MithrilStakeDistributionSignableBuilder;
9+
use super::{ImmutableSignableBuilder, MithrilStakeDistributionSignableBuilder};
1010

1111
/// SignableBuilder Service
1212
pub struct SignableBuilderService {
1313
mithril_stake_distribution_builder: MithrilStakeDistributionSignableBuilder,
14+
immutable_signable_builder: ImmutableSignableBuilder,
1415
}
1516

1617
impl SignableBuilderService {
1718
/// SignableBuilderService factory
1819
pub fn new(
1920
mithril_stake_distribution_builder: MithrilStakeDistributionSignableBuilder,
21+
immutable_signable_builder: ImmutableSignableBuilder,
2022
) -> Self {
2123
Self {
2224
mithril_stake_distribution_builder,
25+
immutable_signable_builder,
2326
}
2427
}
2528
}
@@ -36,6 +39,11 @@ impl SignableBuilderService {
3639
.compute_signable(e)
3740
.await?,
3841
),
42+
SignedEntityType::CardanoImmutableFilesFull(beacon) => Arc::new(
43+
self.immutable_signable_builder
44+
.compute_signable(beacon)
45+
.await?,
46+
),
3947
_ => todo!(),
4048
};
4149

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.2.43"
3+
version = "0.2.44"
44
authors = { workspace = true }
55
edition = { workspace = true }
66
documentation = { workspace = true }

mithril-common/src/entities/beacon.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use crate::entities::{Epoch, ImmutableFileNumber};
2+
use crate::signable_builder::Beacon as Beaconable;
23
use serde::{Deserialize, Serialize};
34
use sha2::{Digest, Sha256};
45
use std::cmp::Ordering;
@@ -18,6 +19,8 @@ pub struct Beacon {
1819
pub immutable_file_number: ImmutableFileNumber,
1920
}
2021

22+
impl Beaconable for Beacon {}
23+
2124
/// A BeaconComparison is the result of the comparison between a beacon and an oldest beacon.
2225
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
2326
pub enum BeaconComparison {

0 commit comments

Comments
 (0)