Skip to content

Commit 67f1903

Browse files
committed
Update 'VerificationKeyStore' record type
And use 'SignerWithStake' instead of 'Signer' for new adapter to save stake as well.
1 parent 2e440d2 commit 67f1903

File tree

4 files changed

+43
-39
lines changed

4 files changed

+43
-39
lines changed

mithril-aggregator/src/dependency_injection/builder.rs

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ use mithril_common::{
1212
ImmutableFileObserver, ImmutableFileSystemObserver,
1313
},
1414
entities::{
15-
Beacon, Certificate, CertificatePending, Epoch, PartyId, ProtocolParameters, Signer,
16-
SingleSignatures,
15+
Beacon, Certificate, CertificatePending, Epoch, PartyId, ProtocolParameters,
16+
SignerWithStake, SingleSignatures,
1717
},
1818
era::{
1919
adapters::{EraReaderAdapterBuilder, EraReaderDummyAdapter},
@@ -419,30 +419,31 @@ impl DependenciesBuilder {
419419
}
420420

421421
async fn build_verification_key_store(&mut self) -> Result<Arc<VerificationKeyStore>> {
422-
let adapter: Box<dyn StoreAdapter<Key = Epoch, Record = HashMap<PartyId, Signer>>> =
423-
match self.configuration.environment {
424-
ExecutionEnvironment::Production => {
425-
let adapter =
426-
SQLiteAdapter::new("verification_key", self.get_sqlite_connection().await?)
427-
.map_err(|e| DependenciesBuilderError::Initialization {
428-
message: "Cannot create SQLite adapter for VerificationKeyStore."
429-
.to_string(),
430-
error: Some(e.into()),
431-
})?;
432-
433-
Box::new(adapter)
434-
}
435-
_ => {
436-
let adapter = MemoryAdapter::new(None).map_err(|e| {
437-
DependenciesBuilderError::Initialization {
438-
message: "Cannot create Memory adapter for VerificationKeyStore."
422+
let adapter: Box<
423+
dyn StoreAdapter<Key = Epoch, Record = HashMap<PartyId, SignerWithStake>>,
424+
> = match self.configuration.environment {
425+
ExecutionEnvironment::Production => {
426+
let adapter =
427+
SQLiteAdapter::new("verification_key", self.get_sqlite_connection().await?)
428+
.map_err(|e| DependenciesBuilderError::Initialization {
429+
message: "Cannot create SQLite adapter for VerificationKeyStore."
439430
.to_string(),
440431
error: Some(e.into()),
441-
}
442-
})?;
443-
Box::new(adapter)
444-
}
445-
};
432+
})?;
433+
434+
Box::new(adapter)
435+
}
436+
_ => {
437+
let adapter = MemoryAdapter::new(None).map_err(|e| {
438+
DependenciesBuilderError::Initialization {
439+
message: "Cannot create Memory adapter for VerificationKeyStore."
440+
.to_string(),
441+
error: Some(e.into()),
442+
}
443+
})?;
444+
Box::new(adapter)
445+
}
446+
};
446447

447448
Ok(Arc::new(VerificationKeyStore::new(
448449
adapter,

mithril-aggregator/src/multi_signer.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -652,8 +652,10 @@ mod tests {
652652
let beacon = fake_data::beacon();
653653
let verification_key_store = VerificationKeyStore::new(
654654
Box::new(
655-
MemoryAdapter::<Epoch, HashMap<entities::PartyId, entities::Signer>>::new(None)
656-
.unwrap(),
655+
MemoryAdapter::<Epoch, HashMap<entities::PartyId, entities::SignerWithStake>>::new(
656+
None,
657+
)
658+
.unwrap(),
657659
),
658660
None,
659661
);

mithril-aggregator/src/signer_registerer.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ mod tests {
223223

224224
use mithril_common::{
225225
chain_observer::FakeObserver,
226-
entities::{Epoch, PartyId, Signer},
226+
entities::{Epoch, PartyId, Signer, SignerWithStake},
227227
store::adapter::MemoryAdapter,
228228
test_utils::MithrilFixtureBuilder,
229229
};
@@ -237,7 +237,7 @@ mod tests {
237237
async fn can_register_signer_if_registration_round_is_opened_with_operational_certificate() {
238238
let chain_observer = FakeObserver::default();
239239
let verification_key_store = Arc::new(VerificationKeyStore::new(
240-
Box::new(MemoryAdapter::<Epoch, HashMap<PartyId, Signer>>::new(None).unwrap()),
240+
Box::new(MemoryAdapter::<Epoch, HashMap<PartyId, SignerWithStake>>::new(None).unwrap()),
241241
None,
242242
));
243243
let signer_registerer =
@@ -275,7 +275,7 @@ mod tests {
275275
async fn can_register_signer_if_registration_round_is_opened_without_operational_certificate() {
276276
let chain_observer = FakeObserver::default();
277277
let verification_key_store = Arc::new(VerificationKeyStore::new(
278-
Box::new(MemoryAdapter::<Epoch, HashMap<PartyId, Signer>>::new(None).unwrap()),
278+
Box::new(MemoryAdapter::<Epoch, HashMap<PartyId, SignerWithStake>>::new(None).unwrap()),
279279
None,
280280
));
281281
let signer_registerer =
@@ -316,7 +316,7 @@ mod tests {
316316
async fn cant_register_signer_if_registration_round_is_not_opened() {
317317
let chain_observer = FakeObserver::default();
318318
let verification_key_store = Arc::new(VerificationKeyStore::new(
319-
Box::new(MemoryAdapter::<Epoch, HashMap<PartyId, Signer>>::new(None).unwrap()),
319+
Box::new(MemoryAdapter::<Epoch, HashMap<PartyId, SignerWithStake>>::new(None).unwrap()),
320320
None,
321321
));
322322
let signer_registerer =

mithril-aggregator/src/store/verification_key_store.rs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use tokio::sync::RwLock;
66
use mithril_common::entities::{Epoch, PartyId, Signer, SignerWithStake};
77
use mithril_common::store::{adapter::StoreAdapter, StoreError};
88

9-
type Adapter = Box<dyn StoreAdapter<Key = Epoch, Record = HashMap<PartyId, Signer>>>;
9+
type Adapter = Box<dyn StoreAdapter<Key = Epoch, Record = HashMap<PartyId, SignerWithStake>>>;
1010

1111
/// Mocking trait for `VerificationKeyStore`.
1212
#[async_trait]
@@ -43,7 +43,7 @@ impl VerificationKeyStore {
4343
#[async_trait]
4444
impl StorePruner for VerificationKeyStore {
4545
type Key = Epoch;
46-
type Record = HashMap<PartyId, Signer>;
46+
type Record = HashMap<PartyId, SignerWithStake>;
4747

4848
fn get_adapter(
4949
&self,
@@ -67,23 +67,23 @@ impl VerificationKeyStorer for VerificationKeyStore {
6767
Some(s) => s,
6868
None => HashMap::new(),
6969
};
70-
let prev_signer = signers.insert(signer.party_id.to_owned(), signer.clone().into());
70+
let prev_signer = signers.insert(signer.party_id.to_owned(), signer.clone());
7171
self.adapter
7272
.write()
7373
.await
7474
.store_record(&epoch, &signers)
7575
.await?;
7676
self.prune().await?;
7777

78-
Ok(prev_signer.map(|prev_signer| SignerWithStake::from_signer(prev_signer, signer.stake)))
78+
Ok(prev_signer)
7979
}
8080

8181
async fn get_verification_keys(
8282
&self,
8383
epoch: Epoch,
8484
) -> Result<Option<HashMap<PartyId, Signer>>, StoreError> {
8585
let record = self.adapter.read().await.get_record(&epoch).await?;
86-
Ok(record)
86+
Ok(record.map(|h| h.into_iter().map(|(k, v)| (k, v.into())).collect()))
8787
}
8888
}
8989

@@ -98,21 +98,22 @@ mod tests {
9898
signers_per_epoch: u64,
9999
retention_limit: Option<usize>,
100100
) -> VerificationKeyStore {
101-
let mut values: Vec<(Epoch, HashMap<PartyId, Signer>)> = Vec::new();
101+
let mut values: Vec<(Epoch, HashMap<PartyId, SignerWithStake>)> = Vec::new();
102102

103103
for epoch in 1..=nb_epoch {
104-
let mut signers: HashMap<PartyId, Signer> = HashMap::new();
104+
let mut signers: HashMap<PartyId, SignerWithStake> = HashMap::new();
105105

106106
for party_idx in 1..=signers_per_epoch {
107107
let party_id = format!("{party_idx}");
108108
signers.insert(
109109
party_id.clone(),
110-
Signer {
110+
SignerWithStake {
111111
party_id: party_id.clone(),
112112
verification_key: format!("vkey {party_id}"),
113113
verification_key_signature: None,
114114
operational_certificate: None,
115115
kes_period: None,
116+
stake: 10,
116117
},
117118
);
118119
}
@@ -124,7 +125,7 @@ mod tests {
124125
} else {
125126
None
126127
};
127-
let adapter: MemoryAdapter<Epoch, HashMap<PartyId, Signer>> =
128+
let adapter: MemoryAdapter<Epoch, HashMap<PartyId, SignerWithStake>> =
128129
MemoryAdapter::new(values).unwrap();
129130
VerificationKeyStore::new(Box::new(adapter), retention_limit)
130131
}

0 commit comments

Comments
 (0)