Skip to content

Commit aec981c

Browse files
authored
Merge pull request #867 from input-output-hk/jpraynaud/851-signable-artifact-builder-mithril-stake-distribution
Mithril Stake Distribution Signable builder in aggregator
2 parents a696efd + 9546da4 commit aec981c

File tree

7 files changed

+89
-15
lines changed

7 files changed

+89
-15
lines changed

Cargo.lock

Lines changed: 1 addition & 1 deletion
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.5"
3+
version = "0.3.6"
44
description = "A Mithril Aggregator server"
55
authors = { workspace = true }
66
edition = { workspace = true }

mithril-aggregator/src/dependency_injection/builder.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ use mithril_common::{
1616
adapters::{EraReaderAdapterBuilder, EraReaderDummyAdapter},
1717
EraChecker, EraMarker, EraReader, EraReaderAdapter, SupportedEra,
1818
},
19-
signable_builder::DummySignableBuilder,
2019
store::adapter::{MemoryAdapter, SQLiteAdapter, StoreAdapter},
2120
BeaconProvider, BeaconProviderImpl,
2221
};
@@ -43,7 +42,7 @@ use crate::{
4342
},
4443
event_store::{EventMessage, EventStore, TransmitterService},
4544
http_server::routes::router,
46-
signable_builder::SignableBuilderService,
45+
signable_builder::{MithrilStakeDistributionSignableBuilder, SignableBuilderService},
4746
signer_registerer::SignerRecorder,
4847
stake_distribution_service::{MithrilStakeDistributionService, StakeDistributionService},
4948
ticker_service::{MithrilTickerService, TickerService},
@@ -873,9 +872,12 @@ impl DependenciesBuilder {
873872
}
874873

875874
async fn build_signable_builder_service(&mut self) -> Result<Arc<SignableBuilderService>> {
876-
let dummy_signable_builder = DummySignableBuilder::new();
877-
let signable_builder_service =
878-
Arc::new(SignableBuilderService::new(dummy_signable_builder));
875+
let multi_signer = self.get_multi_signer().await?;
876+
let mithril_stake_distribution_builder =
877+
MithrilStakeDistributionSignableBuilder::new(multi_signer);
878+
let signable_builder_service = Arc::new(SignableBuilderService::new(
879+
mithril_stake_distribution_builder,
880+
));
879881

880882
Ok(signable_builder_service)
881883
}

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ mod handlers {
5555
protocol_parameters,
5656
next_protocol_parameters,
5757
};
58-
println!("EpochSettings={epoch_settings:?}");
5958
let epoch_settings_message =
6059
ToEpochSettingsMessageAdapter::adapt(epoch_settings);
6160
Ok(reply::json(&epoch_settings_message, StatusCode::OK))
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
use std::sync::Arc;
2+
3+
use async_trait::async_trait;
4+
use tokio::sync::RwLock;
5+
6+
use mithril_common::{
7+
entities::{Epoch, ProtocolMessage, ProtocolMessagePartKey},
8+
signable_builder::SignableBuilder,
9+
StdResult,
10+
};
11+
12+
use crate::MultiSigner;
13+
14+
/// A [MithrilStakeDistributionSignable] builder
15+
pub struct MithrilStakeDistributionSignableBuilder {
16+
multi_signer: Arc<RwLock<dyn MultiSigner>>,
17+
}
18+
19+
impl MithrilStakeDistributionSignableBuilder {
20+
/// MithrilStakeDistribution signable builder factory
21+
pub fn new(multi_signer: Arc<RwLock<dyn MultiSigner>>) -> Self {
22+
Self { multi_signer }
23+
}
24+
}
25+
26+
#[async_trait]
27+
impl SignableBuilder<Epoch, ProtocolMessage> for MithrilStakeDistributionSignableBuilder {
28+
async fn compute_signable(&self, _beacon: Epoch) -> StdResult<ProtocolMessage> {
29+
let mut protocol_message = ProtocolMessage::new();
30+
let multi_signer = self.multi_signer.read().await;
31+
protocol_message.set_message_part(
32+
ProtocolMessagePartKey::NextAggregateVerificationKey,
33+
multi_signer
34+
.compute_next_stake_distribution_aggregate_verification_key()
35+
.await?
36+
.unwrap_or_default(),
37+
);
38+
39+
Ok(protocol_message)
40+
}
41+
}
42+
43+
#[cfg(test)]
44+
mod tests {
45+
use super::*;
46+
47+
use crate::multi_signer::MockMultiSigner;
48+
49+
#[tokio::test]
50+
async fn test_compute_signable() {
51+
let mut mock_multi_signer = MockMultiSigner::new();
52+
mock_multi_signer
53+
.expect_compute_next_stake_distribution_aggregate_verification_key()
54+
.return_once(|| Ok(Some("avk-123".to_string())));
55+
let mithril_stake_distribution_signable_builder =
56+
MithrilStakeDistributionSignableBuilder::new(Arc::new(RwLock::new(mock_multi_signer)));
57+
let signable = mithril_stake_distribution_signable_builder
58+
.compute_signable(Epoch(1))
59+
.await
60+
.unwrap();
61+
let mut signable_expected = ProtocolMessage::new();
62+
signable_expected.set_message_part(
63+
ProtocolMessagePartKey::NextAggregateVerificationKey,
64+
"avk-123".to_string(),
65+
);
66+
assert_eq!(signable_expected, signable);
67+
}
68+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
//! The module used for building signables
22
3+
mod mithril_stake_distribution;
34
mod signable_builder_service;
45

6+
pub use mithril_stake_distribution::*;
57
pub use signable_builder_service::*;

mithril-aggregator/src/signable_builder/signable_builder_service.rs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,24 @@ use std::sync::Arc;
22

33
use mithril_common::{
44
entities::SignedEntityType,
5-
signable_builder::{DummyBeacon, DummySignableBuilder, Signable, SignableBuilder},
5+
signable_builder::{Signable, SignableBuilder},
66
StdResult,
77
};
88

9+
use super::MithrilStakeDistributionSignableBuilder;
10+
911
/// SignableBuilder Service
10-
// TODO: temporary implementation
1112
pub struct SignableBuilderService {
12-
dummy_signable_builder: DummySignableBuilder,
13+
mithril_stake_distribution_builder: MithrilStakeDistributionSignableBuilder,
1314
}
1415

1516
impl SignableBuilderService {
1617
/// SignableBuilderService factory
17-
pub fn new(dummy_signable_builder: DummySignableBuilder) -> Self {
18+
pub fn new(
19+
mithril_stake_distribution_builder: MithrilStakeDistributionSignableBuilder,
20+
) -> Self {
1821
Self {
19-
dummy_signable_builder,
22+
mithril_stake_distribution_builder,
2023
}
2124
}
2225
}
@@ -29,8 +32,8 @@ impl SignableBuilderService {
2932
) -> StdResult<Arc<dyn Signable>> {
3033
let signable: Arc<dyn Signable> = match signed_entity_type {
3134
SignedEntityType::MithrilStakeDistribution(e) => Arc::new(
32-
self.dummy_signable_builder
33-
.compute_signable(DummyBeacon { epoch: e })
35+
self.mithril_stake_distribution_builder
36+
.compute_signable(e)
3437
.await?,
3538
),
3639
_ => todo!(),

0 commit comments

Comments
 (0)