tempo_commonware_node/epoch/
scheme_provider.rs

1//! Epoch aware schemes and peers.
2
3use std::{
4    collections::HashMap,
5    sync::{Arc, Mutex},
6};
7
8use commonware_consensus::{
9    marshal, simplex::signing_scheme::bls12381_threshold::Scheme, types::Epoch,
10};
11use commonware_cryptography::{bls12381::primitives::variant::MinSig, ed25519::PublicKey};
12
13#[derive(Clone)]
14#[expect(clippy::type_complexity)]
15pub(crate) struct SchemeProvider {
16    inner: Arc<Mutex<HashMap<Epoch, Arc<Scheme<PublicKey, MinSig>>>>>,
17}
18
19impl SchemeProvider {
20    pub(crate) fn new() -> Self {
21        Self {
22            inner: Default::default(),
23        }
24    }
25
26    pub(crate) fn register(&self, epoch: Epoch, scheme: Scheme<PublicKey, MinSig>) -> bool {
27        self.inner
28            .lock()
29            .unwrap()
30            .insert(epoch, Arc::new(scheme))
31            .is_none()
32    }
33
34    pub(crate) fn delete(&self, epoch: &Epoch) -> bool {
35        self.inner.lock().unwrap().remove(epoch).is_some()
36    }
37}
38
39impl marshal::SchemeProvider for SchemeProvider {
40    type Scheme = Scheme<PublicKey, MinSig>;
41
42    fn scheme(&self, epoch: Epoch) -> Option<Arc<Self::Scheme>> {
43        self.inner.lock().unwrap().get(&epoch).cloned()
44    }
45}