Skip to content

Commit d0fa081

Browse files
committed
OpenMessage domain type last adjustments:
* use it in the multisigner * include the `created_at` field since it's used for the certificate creation * cleanups
1 parent 8127ef0 commit d0fa081

File tree

4 files changed

+34
-28
lines changed

4 files changed

+34
-28
lines changed

mithril-aggregator/src/certifier_service.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -260,13 +260,14 @@ impl CertifierService for MithrilCertifierService {
260260
signed_entity_type: &SignedEntityType,
261261
) -> StdResult<Option<Certificate>> {
262262
debug!("CertifierService::create_certificate(signed_entity_type: {signed_entity_type:?})");
263-
let open_message = self
263+
let open_message_record = self
264264
.get_open_message_record(signed_entity_type)
265265
.await?
266266
.ok_or_else(|| {
267267
warn!("CertifierService::create_certificate: OpenMessage not found for type {signed_entity_type:?}.");
268268
CertifierServiceError::NotFound(signed_entity_type.clone())
269269
})?;
270+
let open_message: OpenMessage = open_message_record.clone().into();
270271

271272
if open_message.is_certified {
272273
warn!("CertifierService::create_certificate: open message {signed_entity_type:?} is already certified, cannot create certificate.");
@@ -343,7 +344,7 @@ impl CertifierService for MithrilCertifierService {
343344
.create_certificate(certificate)
344345
.await?;
345346

346-
let mut open_message_certified: OpenMessageRecord = open_message.into();
347+
let mut open_message_certified: OpenMessageRecord = open_message_record.into();
347348
open_message_certified.is_certified = true;
348349
self.open_message_repository
349350
.update_open_message(&open_message_certified)

mithril-aggregator/src/database/provider/open_message.rs

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use mithril_common::StdError;
22

3-
use mithril_common::entities::{PartyId, ProtocolMessage, SingleSignatures};
3+
use mithril_common::entities::{ProtocolMessage, SingleSignatures};
44
use mithril_common::{
55
entities::{Epoch, SignedEntityType},
66
sqlite::{HydrationError, Projection, SqLiteEntity, WhereCondition},
@@ -355,16 +355,6 @@ pub struct OpenMessageWithSingleSignaturesRecord {
355355
pub created_at: NaiveDateTime,
356356
}
357357

358-
impl OpenMessageWithSingleSignaturesRecord {
359-
/// Gather all signers party_id for this open message
360-
pub fn get_signers_id(&self) -> Vec<PartyId> {
361-
self.single_signatures
362-
.iter()
363-
.map(|sig| sig.party_id.to_owned())
364-
.collect()
365-
}
366-
}
367-
368358
impl SqLiteEntity for OpenMessageWithSingleSignaturesRecord {
369359
fn hydrate(row: Row) -> Result<Self, HydrationError>
370360
where

mithril-aggregator/src/entities/open_message.rs

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
use mithril_common::entities::{Epoch, ProtocolMessage, SignedEntityType, SingleSignatures};
1+
use chrono::NaiveDateTime;
2+
use mithril_common::entities::{
3+
Epoch, PartyId, ProtocolMessage, SignedEntityType, SingleSignatures,
4+
};
25

36
use crate::database::provider::{OpenMessageRecord, OpenMessageWithSingleSignaturesRecord};
47

@@ -9,9 +12,6 @@ use crate::database::provider::{OpenMessageRecord, OpenMessageWithSingleSignatur
912
/// generated if possible.
1013
#[derive(Debug, Clone, PartialEq)]
1114
pub struct OpenMessage {
12-
/// OpenMessage unique identifier
13-
// pub open_message_id: Uuid, // do we need it in the entity ?
14-
1515
/// Epoch
1616
pub epoch: Epoch,
1717

@@ -26,9 +26,20 @@ pub struct OpenMessage {
2626

2727
/// associated single signatures
2828
pub single_signatures: Vec<SingleSignatures>,
29+
30+
/// Message creation datetime
31+
pub created_at: NaiveDateTime,
2932
}
3033

3134
impl OpenMessage {
35+
/// Gather all signers party_id for this open message
36+
pub fn get_signers_id(&self) -> Vec<PartyId> {
37+
self.single_signatures
38+
.iter()
39+
.map(|sig| sig.party_id.to_owned())
40+
.collect()
41+
}
42+
3243
#[cfg(test)]
3344
/// Create a dumb OpenMessage instance mainly for test purposes
3445
pub fn dummy() -> Self {
@@ -47,6 +58,7 @@ impl OpenMessage {
4758
fake_data::single_signatures(vec![1, 4, 5]),
4859
fake_data::single_signatures(vec![2, 3, 8]),
4960
],
61+
created_at: chrono::Local::now().naive_local(),
5062
}
5163
}
5264
}
@@ -59,6 +71,7 @@ impl From<OpenMessageRecord> for OpenMessage {
5971
protocol_message: record.protocol_message,
6072
is_certified: record.is_certified,
6173
single_signatures: vec![],
74+
created_at: record.created_at,
6275
}
6376
}
6477
}
@@ -71,6 +84,7 @@ impl From<OpenMessageWithSingleSignaturesRecord> for OpenMessage {
7184
protocol_message: record.protocol_message,
7285
is_certified: record.is_certified,
7386
single_signatures: record.single_signatures,
87+
created_at: record.created_at,
7488
}
7589
}
7690
}
@@ -89,20 +103,22 @@ mod test {
89103

90104
#[test]
91105
fn test_from_record() {
106+
let created_at = chrono::Local::now().naive_local();
92107
let record = OpenMessageRecord {
93108
open_message_id: Uuid::new_v4(),
94109
epoch: Epoch(1),
95110
signed_entity_type: SignedEntityType::dummy(),
96111
protocol_message: ProtocolMessage::default(),
97112
is_certified: false,
98-
created_at: chrono::Local::now().naive_local(),
113+
created_at,
99114
};
100115
let expected = OpenMessage {
101116
epoch: Epoch(1),
102117
signed_entity_type: SignedEntityType::dummy(),
103118
protocol_message: ProtocolMessage::default(),
104119
is_certified: false,
105120
single_signatures: vec![],
121+
created_at,
106122
};
107123
let result: OpenMessage = record.into();
108124

@@ -111,13 +127,14 @@ mod test {
111127

112128
#[test]
113129
fn test_from_record_with_single_signatures() {
130+
let created_at = chrono::Local::now().naive_local();
114131
let record = OpenMessageWithSingleSignaturesRecord {
115132
open_message_id: Uuid::new_v4(),
116133
epoch: Epoch(1),
117134
signed_entity_type: SignedEntityType::dummy(),
118135
protocol_message: ProtocolMessage::default(),
119136
is_certified: false,
120-
created_at: chrono::Local::now().naive_local(),
137+
created_at,
121138
single_signatures: vec![fake_data::single_signatures(vec![1, 4, 5])],
122139
};
123140
let expected = OpenMessage {
@@ -126,6 +143,7 @@ mod test {
126143
protocol_message: ProtocolMessage::default(),
127144
is_certified: false,
128145
single_signatures: vec![fake_data::single_signatures(vec![1, 4, 5])],
146+
created_at,
129147
};
130148
let result: OpenMessage = record.into();
131149

mithril-aggregator/src/multi_signer.rs

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ use mithril_common::{
1414
};
1515

1616
use crate::{
17-
database::provider::OpenMessageWithSingleSignaturesRecord, store::VerificationKeyStorer,
18-
ProtocolParametersStore, ProtocolParametersStorer, VerificationKeyStore,
17+
entities::OpenMessage, store::VerificationKeyStorer, ProtocolParametersStore,
18+
ProtocolParametersStorer, VerificationKeyStore,
1919
};
2020

2121
#[cfg(test)]
@@ -184,7 +184,7 @@ pub trait MultiSigner: Sync + Send {
184184
/// Creates a multi signature from single signatures
185185
async fn create_multi_signature(
186186
&self,
187-
open_message: &OpenMessageWithSingleSignaturesRecord,
187+
open_message: &OpenMessage,
188188
) -> Result<Option<ProtocolMultiSignature>, ProtocolError>;
189189
}
190190

@@ -539,7 +539,7 @@ impl MultiSigner for MultiSignerImpl {
539539
/// Creates a multi signature from single signatures
540540
async fn create_multi_signature(
541541
&self,
542-
open_message: &OpenMessageWithSingleSignaturesRecord,
542+
open_message: &OpenMessage,
543543
) -> Result<Option<ProtocolMultiSignature>, ProtocolError> {
544544
debug!("MultiSigner:create_multi_signature({open_message:?})");
545545
let protocol_parameters = self
@@ -582,15 +582,13 @@ impl MultiSigner for MultiSignerImpl {
582582
mod tests {
583583
use super::*;
584584
use crate::{store::VerificationKeyStore, ProtocolParametersStore};
585-
use chrono::Local;
586585
use mithril_common::{
587586
crypto_helper::tests_setup::*,
588587
entities::SignedEntityType,
589588
store::{adapter::MemoryAdapter, StakeStore},
590589
test_utils::{fake_data, MithrilFixtureBuilder},
591590
};
592591
use std::{collections::HashMap, sync::Arc};
593-
use uuid::Uuid;
594592

595593
async fn setup_multi_signer() -> MultiSignerImpl {
596594
let beacon = fake_data::beacon();
@@ -805,16 +803,15 @@ mod tests {
805803
"they should be at least one signature that can be registered without reaching the quorum"
806804
);
807805

808-
let mut open_message = OpenMessageWithSingleSignaturesRecord {
809-
open_message_id: Uuid::parse_str("193d1442-e89b-43cf-9519-04d8db9a12ff").unwrap(),
806+
let mut open_message = OpenMessage {
810807
epoch: start_epoch,
811808
signed_entity_type: SignedEntityType::CardanoImmutableFilesFull(
812809
multi_signer.current_beacon.clone().unwrap(),
813810
),
814811
protocol_message: message.clone(),
815812
is_certified: false,
816813
single_signatures: Vec::new(),
817-
created_at: Local::now().naive_local(),
814+
..OpenMessage::dummy()
818815
};
819816

820817
// No signatures registered: multi-signer can't create the multi-signature

0 commit comments

Comments
 (0)