Skip to content

Commit adf498b

Browse files
committed
Add Multi Signer dependency injection #146
1 parent 0a086c7 commit adf498b

File tree

3 files changed

+68
-2
lines changed

3 files changed

+68
-2
lines changed

mithril-network/mithril-aggregator/src/dependency.rs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,20 @@ use std::sync::Arc;
22
use tokio::sync::RwLock;
33

44
use crate::entities::*;
5+
use crate::multi_signer::MultiSigner;
56
use crate::snapshot_store::SnapshotStorer;
67

7-
/// SnapshotStorerWrapper represents a wrapper of a SnapshotStorer
8+
/// SnapshotStorerWrapper wraps a SnapshotStorer
89
pub type SnapshotStorerWrapper = Arc<RwLock<dyn SnapshotStorer>>;
910

11+
/// MultiSignerWrapper wraps a MultiSigner
12+
pub type MultiSignerWrapper = Arc<RwLock<dyn MultiSigner>>;
13+
1014
/// DependencyManager handles the dependencies
1115
pub struct DependencyManager {
1216
pub config: Config,
1317
pub snapshot_storer: Option<SnapshotStorerWrapper>,
18+
pub multi_signer: Option<MultiSignerWrapper>,
1419
}
1520

1621
impl DependencyManager {
@@ -19,6 +24,7 @@ impl DependencyManager {
1924
Self {
2025
config,
2126
snapshot_storer: None,
27+
multi_signer: None,
2228
}
2329
}
2430

@@ -27,4 +33,10 @@ impl DependencyManager {
2733
self.snapshot_storer = Some(snapshot_storer);
2834
self
2935
}
36+
37+
/// With MultiSigner
38+
pub fn with_multi_signer(&mut self, multi_signer: MultiSignerWrapper) -> &mut Self {
39+
self.multi_signer = Some(multi_signer);
40+
self
41+
}
3042
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
pub mod apispec;
22
pub mod entities;
33
pub mod fake_data;
4+
pub mod multi_signer;
45
pub mod snapshotter;

mithril-network/mithril-aggregator/src/main.rs

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ mod dependency;
55
mod entities;
66
mod fake_data;
77
mod http_server;
8+
mod multi_signer;
89
mod snapshot_store;
910
mod snapshotter;
1011

@@ -17,6 +18,10 @@ use tokio::sync::RwLock;
1718

1819
use crate::entities::Config;
1920
use crate::http_server::Server;
21+
use crate::multi_signer::{
22+
key_decode_hex, MultiSigner, MultiSignerImpl, ProtocolParameters, ProtocolPartyId,
23+
ProtocolSignerVerificationKey, ProtocolStake,
24+
};
2025
use crate::snapshot_store::SnapshotStoreHTTPClient;
2126
use crate::snapshotter::Snapshotter;
2227

@@ -77,9 +82,13 @@ async fn main() {
7782
config.url_snapshot_manifest.clone(),
7883
)));
7984

85+
let multi_signer = Arc::new(RwLock::new(init_multi_signer()));
86+
8087
// Init dependecy manager
8188
let mut dependency_manager = dependency::DependencyManager::new(config);
82-
dependency_manager.with_snapshot_storer(snapshot_storer.clone());
89+
dependency_manager
90+
.with_snapshot_storer(snapshot_storer.clone())
91+
.with_multi_signer(multi_signer.clone());
8392
let dependency_manager = Arc::new(dependency_manager);
8493

8594
// Start snapshot uploader
@@ -104,3 +113,47 @@ async fn main() {
104113

105114
println!("Exiting...");
106115
}
116+
117+
/// Init multi signer dependency
118+
fn init_multi_signer() -> impl MultiSigner {
119+
let mut multi_signer = MultiSignerImpl::new();
120+
121+
// Update protocol parameters
122+
let protocol_parameters = fake_data::protocol_parameters();
123+
let protocol_parameters = ProtocolParameters {
124+
m: protocol_parameters.m,
125+
k: protocol_parameters.k,
126+
phi_f: protocol_parameters.phi_f as f64,
127+
};
128+
multi_signer
129+
.update_protocol_parameters(&protocol_parameters)
130+
.expect("update protocol parameters failed");
131+
132+
// Update stake distribution
133+
let total_signers = 5;
134+
let stakes = fake_data::signers_with_stakes(total_signers)
135+
.iter()
136+
.map(|signer| {
137+
(
138+
signer.party_id as ProtocolPartyId,
139+
signer.stake as ProtocolStake,
140+
)
141+
})
142+
.collect::<_>();
143+
multi_signer
144+
.update_stake_distribution(&stakes)
145+
.expect("stake distribution update failed");
146+
147+
// Register signers
148+
fake_data::signers(total_signers).iter().for_each(|signer| {
149+
multi_signer
150+
.register_signer(
151+
signer.party_id as ProtocolPartyId,
152+
&key_decode_hex::<ProtocolSignerVerificationKey>(signer.verification_key.clone())
153+
.unwrap(),
154+
)
155+
.expect("register signer failed");
156+
});
157+
158+
multi_signer
159+
}

0 commit comments

Comments
 (0)