Skip to content

Commit b322df8

Browse files
committed
refactor: make signable seed builder compute protocol message part values
And let the responsibility of using it in the signable builder service.
1 parent 1f430a7 commit b322df8

File tree

4 files changed

+79
-65
lines changed

4 files changed

+79
-65
lines changed

mithril-aggregator/src/services/signable_seed_builder.rs

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,7 @@ use std::sync::Arc;
99
use tokio::sync::RwLock;
1010

1111
use mithril_common::{
12-
entities::{ProtocolMessage, ProtocolMessagePartKey},
13-
signable_builder::SignableSeedBuilder,
14-
StdResult,
12+
entities::ProtocolMessagePartValue, signable_builder::SignableSeedBuilder, StdResult,
1513
};
1614

1715
use crate::services::EpochService;
@@ -30,22 +28,17 @@ impl SignableSeedBuilderService {
3028

3129
#[async_trait]
3230
impl SignableSeedBuilder for SignableSeedBuilderService {
33-
async fn compute_seeded_protocol_message(
31+
async fn compute_next_aggregate_verification_key_protocol_message_part_value(
3432
&self,
35-
protocol_message: ProtocolMessage,
36-
) -> StdResult<ProtocolMessage> {
33+
) -> StdResult<ProtocolMessagePartValue> {
3734
let epoch_service = self.epoch_service.read().await;
38-
let mut protocol_message = protocol_message;
39-
protocol_message.set_message_part(
40-
ProtocolMessagePartKey::NextAggregateVerificationKey,
41-
(*epoch_service)
42-
.next_aggregate_verification_key()?
43-
.to_json_hex()
44-
.with_context(|| "convert next avk to json hex failure")?
45-
.to_string(),
46-
);
35+
let next_aggregate_verification_key = (*epoch_service)
36+
.next_aggregate_verification_key()?
37+
.to_json_hex()
38+
.with_context(|| "convert next avk to json hex failure")?
39+
.to_string();
4740

48-
Ok(protocol_message)
41+
Ok(next_aggregate_verification_key)
4942
}
5043
}
5144

@@ -58,7 +51,7 @@ mod tests {
5851
use super::*;
5952

6053
#[tokio::test]
61-
async fn test_compute_seeded_protocol_message() {
54+
async fn test_compute_next_aggregate_verification_key_protocol_message_value() {
6255
let epoch = Epoch(5);
6356
let fixture = MithrilFixtureBuilder::default().with_signers(5).build();
6457
let next_fixture = MithrilFixtureBuilder::default().with_signers(4).build();
@@ -73,15 +66,14 @@ mod tests {
7366
)));
7467
let signable_seed_builder_service = SignableSeedBuilderService::new(epoch_service);
7568

76-
let protocol_message = signable_seed_builder_service
77-
.compute_seeded_protocol_message(ProtocolMessage::new())
69+
let next_aggregate_verification_key = signable_seed_builder_service
70+
.compute_next_aggregate_verification_key_protocol_message_part_value()
7871
.await
7972
.unwrap();
8073

8174
assert_eq!(
82-
protocol_message
83-
.get_message_part(&ProtocolMessagePartKey::NextAggregateVerificationKey),
84-
Some(&expected_next_aggregate_verification_key)
75+
next_aggregate_verification_key,
76+
expected_next_aggregate_verification_key
8577
);
8678
}
8779
}

mithril-common/src/signable_builder/interface.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
use async_trait::async_trait;
22
use std::fmt::Debug;
33

4-
use crate::{entities::ProtocolMessage, StdResult};
4+
use crate::{
5+
entities::{ProtocolMessage, ProtocolMessagePartValue},
6+
StdResult,
7+
};
58

69
#[cfg(test)]
710
use mockall::automock;
@@ -27,13 +30,12 @@ where
2730
async fn compute_protocol_message(&self, beacon: U) -> StdResult<ProtocolMessage>;
2831
}
2932

30-
/// SignableSeedBuilder is a trait for building a seed protocol message
33+
/// SignableSeedBuilder is a trait for building seed protocol message part values
3134
#[cfg_attr(test, automock)]
3235
#[async_trait]
3336
pub trait SignableSeedBuilder: Send + Sync {
34-
/// Compute seeded protocol message
35-
async fn compute_seeded_protocol_message(
37+
/// Compute next aggregate verification key protocol message part value
38+
async fn compute_next_aggregate_verification_key_protocol_message_part_value(
3639
&self,
37-
protocol_message: ProtocolMessage,
38-
) -> StdResult<ProtocolMessage>;
40+
) -> StdResult<ProtocolMessagePartValue>;
3941
}

mithril-common/src/signable_builder/signable_builder_service.rs

Lines changed: 47 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,16 @@ use async_trait::async_trait;
33
use std::sync::Arc;
44

55
use crate::{
6-
entities::{BlockNumber, CardanoDbBeacon, Epoch, ProtocolMessage, SignedEntityType},
6+
entities::{
7+
BlockNumber, CardanoDbBeacon, Epoch, ProtocolMessage, ProtocolMessagePartKey,
8+
SignedEntityType,
9+
},
710
signable_builder::{SignableBuilder, SignableSeedBuilder},
811
StdResult,
912
};
1013

11-
#[cfg(test)]
12-
use mockall::automock;
13-
1414
/// ArtifactBuilder Service trait
15-
#[cfg_attr(test, automock)]
15+
#[cfg_attr(test, mockall::automock)]
1616
#[async_trait]
1717
pub trait SignableBuilderService: Send + Sync {
1818
/// Compute signable from signed entity type
@@ -48,11 +48,8 @@ impl MithrilSignableBuilderService {
4848
cardano_stake_distribution_builder,
4949
}
5050
}
51-
}
5251

53-
#[async_trait]
54-
impl SignableBuilderService for MithrilSignableBuilderService {
55-
async fn compute_protocol_message(
52+
async fn compute_signed_entity_protocol_message(
5653
&self,
5754
signed_entity_type: SignedEntityType,
5855
) -> StdResult<ProtocolMessage> {
@@ -84,8 +81,38 @@ impl SignableBuilderService for MithrilSignableBuilderService {
8481
"Signable builder service can not compute protocol message with block_number: '{block_number}'"
8582
))?,
8683
};
87-
let protocol_message = self
84+
85+
Ok(protocol_message)
86+
}
87+
88+
async fn compute_seeded_protocol_message(
89+
&self,
90+
protocol_message: ProtocolMessage,
91+
) -> StdResult<ProtocolMessage> {
92+
let next_aggregate_verification_key = self
8893
.seed_signable_builder
94+
.compute_next_aggregate_verification_key_protocol_message_part_value()
95+
.await?;
96+
let mut protocol_message = protocol_message;
97+
protocol_message.set_message_part(
98+
ProtocolMessagePartKey::NextAggregateVerificationKey,
99+
next_aggregate_verification_key,
100+
);
101+
102+
Ok(protocol_message)
103+
}
104+
}
105+
106+
#[async_trait]
107+
impl SignableBuilderService for MithrilSignableBuilderService {
108+
async fn compute_protocol_message(
109+
&self,
110+
signed_entity_type: SignedEntityType,
111+
) -> StdResult<ProtocolMessage> {
112+
let protocol_message = self
113+
.compute_signed_entity_protocol_message(signed_entity_type)
114+
.await?;
115+
let protocol_message = self
89116
.compute_seeded_protocol_message(protocol_message)
90117
.await?;
91118

@@ -98,7 +125,7 @@ mod tests {
98125
use super::*;
99126

100127
use crate::{
101-
entities::{BlockNumber, Epoch, ProtocolMessage},
128+
entities::{BlockNumber, Epoch, ProtocolMessage, ProtocolMessagePartValue},
102129
signable_builder::{Beacon as Beaconnable, SignableBuilder},
103130
StdResult,
104131
};
@@ -121,7 +148,7 @@ mod tests {
121148

122149
#[async_trait]
123150
impl SignableSeedBuilder for SignableSeedBuilderImpl {
124-
async fn compute_seeded_protocol_message(&self, protocol_message: ProtocolMessage) -> StdResult<ProtocolMessage>;
151+
async fn compute_next_aggregate_verification_key_protocol_message_part_value(&self) -> StdResult<ProtocolMessagePartValue>;
125152
}
126153
}
127154

@@ -164,9 +191,9 @@ mod tests {
164191
let mut mock_container = MockDependencyInjector::new();
165192
mock_container
166193
.mock_signable_seed_builder
167-
.expect_compute_seeded_protocol_message()
194+
.expect_compute_next_aggregate_verification_key_protocol_message_value()
168195
.once()
169-
.return_once(move |_| Ok(ProtocolMessage::new()));
196+
.return_once(move || Ok("next-avk-123".to_string()));
170197
mock_container
171198
.mock_mithril_stake_distribution_signable_builder
172199
.expect_compute_protocol_message()
@@ -188,9 +215,9 @@ mod tests {
188215
let mut mock_container = MockDependencyInjector::new();
189216
mock_container
190217
.mock_signable_seed_builder
191-
.expect_compute_seeded_protocol_message()
218+
.expect_compute_next_aggregate_verification_key_protocol_message_value()
192219
.once()
193-
.return_once(move |_| Ok(ProtocolMessage::new()));
220+
.return_once(move || Ok("next-avk-123".to_string()));
194221
mock_container
195222
.mock_cardano_immutable_files_full_signable_builder
196223
.expect_compute_protocol_message()
@@ -213,9 +240,9 @@ mod tests {
213240
let mut mock_container = MockDependencyInjector::new();
214241
mock_container
215242
.mock_signable_seed_builder
216-
.expect_compute_seeded_protocol_message()
243+
.expect_compute_next_aggregate_verification_key_protocol_message_value()
217244
.once()
218-
.return_once(move |_| Ok(ProtocolMessage::new()));
245+
.return_once(move || Ok("next-avk-123".to_string()));
219246
mock_container
220247
.mock_cardano_transactions_signable_builder
221248
.expect_compute_protocol_message()
@@ -238,9 +265,9 @@ mod tests {
238265
let mut mock_container = MockDependencyInjector::new();
239266
mock_container
240267
.mock_signable_seed_builder
241-
.expect_compute_seeded_protocol_message()
268+
.expect_compute_next_aggregate_verification_key_protocol_message_value()
242269
.once()
243-
.return_once(move |_| Ok(ProtocolMessage::new()));
270+
.return_once(move || Ok("next-avk-123".to_string()));
244271
mock_container
245272
.mock_cardano_stake_distribution_signable_builder
246273
.expect_compute_protocol_message()

mithril-signer/src/services/signable_seed_builder.rs

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,7 @@ use std::sync::Arc;
99
use tokio::sync::RwLock;
1010

1111
use mithril_common::{
12-
entities::{ProtocolMessage, ProtocolMessagePartKey},
13-
signable_builder::SignableSeedBuilder,
14-
StdResult,
12+
entities::ProtocolMessagePartValue, signable_builder::SignableSeedBuilder, StdResult,
1513
};
1614

1715
use crate::{
@@ -43,11 +41,9 @@ impl SignableSeedBuilderService {
4341

4442
#[async_trait]
4543
impl SignableSeedBuilder for SignableSeedBuilderService {
46-
async fn compute_seeded_protocol_message(
44+
async fn compute_next_aggregate_verification_key_protocol_message_part_value(
4745
&self,
48-
protocol_message: ProtocolMessage,
49-
) -> StdResult<ProtocolMessage> {
50-
let mut protocol_message = protocol_message;
46+
) -> StdResult<ProtocolMessagePartValue> {
5147
let epoch_service = self.epoch_service.read().await;
5248
let epoch = (*epoch_service).epoch_of_current_data()?;
5349
let next_signer_retrieval_epoch = epoch.offset_to_next_signer_retrieval_epoch();
@@ -60,17 +56,15 @@ impl SignableSeedBuilder for SignableSeedBuilderService {
6056
})?;
6157

6258
let next_signers_with_stake = epoch_service.next_signers_with_stake().await?;
63-
let avk = self
59+
let next_aggregate_verification_key = self
6460
.single_signer
6561
.compute_aggregate_verification_key(
6662
&next_signers_with_stake,
6763
&next_protocol_initializer,
6864
)?
6965
.ok_or_else(|| anyhow!("next_signers avk".to_string()))?;
70-
protocol_message
71-
.set_message_part(ProtocolMessagePartKey::NextAggregateVerificationKey, avk);
7266

73-
Ok(protocol_message)
67+
Ok(next_aggregate_verification_key)
7468
}
7569
}
7670

@@ -87,7 +81,7 @@ mod tests {
8781
use super::*;
8882

8983
#[tokio::test]
90-
async fn test_compute_seeded_protocol_message() {
84+
async fn test_compute_next_aggregate_verification_key_protocol_message_value() {
9185
let epoch = Epoch(5);
9286
let fixture = MithrilFixtureBuilder::default().with_signers(5).build();
9387
let next_fixture = MithrilFixtureBuilder::default().with_signers(4).build();
@@ -124,15 +118,14 @@ mod tests {
124118
protocol_initializer_store,
125119
);
126120

127-
let protocol_message = signable_seed_builder_service
128-
.compute_seeded_protocol_message(ProtocolMessage::new())
121+
let next_aggregate_verification_key = signable_seed_builder_service
122+
.compute_next_aggregate_verification_key_protocol_message_part_value()
129123
.await
130124
.unwrap();
131125

132126
assert_eq!(
133-
protocol_message
134-
.get_message_part(&ProtocolMessagePartKey::NextAggregateVerificationKey),
135-
Some(&expected_next_aggregate_verification_key)
127+
next_aggregate_verification_key,
128+
expected_next_aggregate_verification_key
136129
);
137130
}
138131
}

0 commit comments

Comments
 (0)