Skip to content

Commit 10cacbf

Browse files
committed
Use SignerRecorder in SignerRegisterer
1 parent e31e824 commit 10cacbf

File tree

1 file changed

+59
-7
lines changed

1 file changed

+59
-7
lines changed

mithril-aggregator/src/signer_registerer.rs

Lines changed: 59 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use mithril_common::{
1111
},
1212
entities::{Epoch, Signer, SignerWithStake, StakeDistribution},
1313
store::StoreError,
14+
StdError,
1415
};
1516

1617
#[cfg(test)]
@@ -42,6 +43,10 @@ pub enum SignerRegistrationError {
4243
/// Signer registration failed.
4344
#[error("signer registration failed")]
4445
FailedSignerRegistration(#[from] ProtocolRegistrationError),
46+
47+
/// Signer recorder failed.
48+
#[error("signer recorder failed: '{0}'")]
49+
FailedSignerRecorder(String),
4550
}
4651

4752
/// Represents the information needed to handle a signer registration round
@@ -87,6 +92,21 @@ pub trait SignerRegistrationRoundOpener: Sync + Send {
8792
async fn close_registration_round(&self) -> Result<(), SignerRegistrationError>;
8893
}
8994

95+
/// Signer recorder trait
96+
#[cfg_attr(test, automock)]
97+
#[async_trait]
98+
pub trait SignerRecorder: Sync + Send {
99+
/// Record signer_id
100+
async fn record_signer_id(&self, signer_id: String) -> Result<(), StdError>;
101+
102+
/// Record pool ticker by id
103+
async fn record_signer_pool_ticker(
104+
&self,
105+
signer_id: String,
106+
pool_ticker: Option<String>,
107+
) -> Result<(), StdError>;
108+
}
109+
90110
/// Implementation of a [SignerRegisterer]
91111
pub struct MithrilSignerRegisterer {
92112
/// Current signer registration round
@@ -97,18 +117,23 @@ pub struct MithrilSignerRegisterer {
97117

98118
/// Verification key store
99119
verification_key_store: Arc<VerificationKeyStore>,
120+
121+
/// Signer recorder
122+
signer_recorder: Arc<dyn SignerRecorder>,
100123
}
101124

102125
impl MithrilSignerRegisterer {
103126
/// MithrilSignerRegisterer factory
104127
pub fn new(
105128
chain_observer: Arc<dyn ChainObserver>,
106129
verification_key_store: Arc<VerificationKeyStore>,
130+
signer_recorder: Arc<dyn SignerRecorder>,
107131
) -> Self {
108132
Self {
109133
current_round: RwLock::new(None),
110134
chain_observer,
111135
verification_key_store,
136+
signer_recorder,
112137
}
113138
}
114139

@@ -204,7 +229,12 @@ impl SignerRegisterer for MithrilSignerRegisterer {
204229
.get(&party_id_save)
205230
.unwrap(),
206231
);
207-
signer_save.party_id = party_id_save;
232+
signer_save.party_id = party_id_save.clone();
233+
234+
self.signer_recorder
235+
.record_signer_id(party_id_save)
236+
.await
237+
.map_err(|e| SignerRegistrationError::FailedSignerRecorder(e.to_string()))?;
208238

209239
match self
210240
.verification_key_store
@@ -233,15 +263,25 @@ mod tests {
233263
VerificationKeyStore, VerificationKeyStorer,
234264
};
235265

266+
use super::MockSignerRecorder;
267+
236268
#[tokio::test]
237269
async fn can_register_signer_if_registration_round_is_opened_with_operational_certificate() {
238270
let chain_observer = FakeObserver::default();
239271
let verification_key_store = Arc::new(VerificationKeyStore::new(
240272
Box::new(MemoryAdapter::<Epoch, HashMap<PartyId, SignerWithStake>>::new(None).unwrap()),
241273
None,
242274
));
243-
let signer_registerer =
244-
MithrilSignerRegisterer::new(Arc::new(chain_observer), verification_key_store.clone());
275+
let mut signer_recorder = MockSignerRecorder::new();
276+
signer_recorder
277+
.expect_record_signer_id()
278+
.returning(|_| Ok(()))
279+
.once();
280+
let signer_registerer = MithrilSignerRegisterer::new(
281+
Arc::new(chain_observer),
282+
verification_key_store.clone(),
283+
Arc::new(signer_recorder),
284+
);
245285
let registration_epoch = Epoch(1);
246286
let fixture = MithrilFixtureBuilder::default().with_signers(5).build();
247287
let signer_to_register: Signer = fixture.signers()[0].to_owned();
@@ -278,8 +318,16 @@ mod tests {
278318
Box::new(MemoryAdapter::<Epoch, HashMap<PartyId, SignerWithStake>>::new(None).unwrap()),
279319
None,
280320
));
281-
let signer_registerer =
282-
MithrilSignerRegisterer::new(Arc::new(chain_observer), verification_key_store.clone());
321+
let mut signer_recorder = MockSignerRecorder::new();
322+
signer_recorder
323+
.expect_record_signer_id()
324+
.returning(|_| Ok(()))
325+
.once();
326+
let signer_registerer = MithrilSignerRegisterer::new(
327+
Arc::new(chain_observer),
328+
verification_key_store.clone(),
329+
Arc::new(signer_recorder),
330+
);
283331
let registration_epoch = Epoch(1);
284332
let fixture = MithrilFixtureBuilder::default()
285333
.with_signers(5)
@@ -319,8 +367,12 @@ mod tests {
319367
Box::new(MemoryAdapter::<Epoch, HashMap<PartyId, SignerWithStake>>::new(None).unwrap()),
320368
None,
321369
));
322-
let signer_registerer =
323-
MithrilSignerRegisterer::new(Arc::new(chain_observer), verification_key_store.clone());
370+
let signer_recorder = MockSignerRecorder::new();
371+
let signer_registerer = MithrilSignerRegisterer::new(
372+
Arc::new(chain_observer),
373+
verification_key_store.clone(),
374+
Arc::new(signer_recorder),
375+
);
324376
let fixture = MithrilFixtureBuilder::default().with_signers(5).build();
325377
let signer_to_register: Signer = fixture.signers()[0].to_owned();
326378

0 commit comments

Comments
 (0)