11use clap:: Parser ;
2- use mithril_common:: digesters:: ImmutableDigester ;
32use slog:: { o, Drain , Level , Logger } ;
43use slog_scope:: debug;
54use std:: env;
5+ use std:: error:: Error ;
66use std:: sync:: Arc ;
7+ use tokio:: sync:: RwLock ;
78
9+ use mithril_common:: crypto_helper:: ProtocolStakeDistribution ;
10+ use mithril_common:: digesters:: ImmutableDigester ;
11+ use mithril_common:: fake_data;
12+ use mithril_common:: store:: adapter:: JsonFileStoreAdapter ;
13+ use mithril_common:: store:: stake_store:: { StakeStore , StakeStorer } ;
814use mithril_signer:: { CertificateHandlerHTTPClient , Config , MithrilSingleSigner , Runtime } ;
915
1016/// CLI args
@@ -44,7 +50,7 @@ fn build_logger(min_level: Level) -> Logger {
4450}
4551
4652#[ tokio:: main]
47- async fn main ( ) -> Result < ( ) , String > {
53+ async fn main ( ) -> Result < ( ) , Box < dyn Error > > {
4854 // Load args
4955 let args = Args :: parse ( ) ;
5056 let _guard = slog_scope:: set_global_logger ( build_logger ( args. log_level ( ) ) ) ;
@@ -65,14 +71,38 @@ async fn main() -> Result<(), String> {
6571 let single_signer = MithrilSingleSigner :: new ( config. party_id , protocol_initializer_encoded) ;
6672 let certificate_handler = CertificateHandlerHTTPClient :: new ( config. aggregator_endpoint . clone ( ) ) ;
6773 let digester = ImmutableDigester :: new ( config. db_directory , slog_scope:: logger ( ) ) ;
74+ let stake_store = Arc :: new ( RwLock :: new ( StakeStore :: new ( Box :: new (
75+ JsonFileStoreAdapter :: new ( config. stake_store_directory . clone ( ) ) ?,
76+ ) ) ) ) ;
77+ setup_dependencies_fake_data ( stake_store. clone ( ) ) . await ;
6878
6979 // Should the runtime loop returns an error ? If yes should we abort the loop at the first error or is their some tolerance ?
7080 let mut runtime = Runtime :: new (
7181 Box :: new ( certificate_handler) ,
7282 Box :: new ( single_signer) ,
7383 Box :: new ( digester) ,
84+ stake_store. clone ( ) ,
7485 ) ;
7586 runtime. infinite_loop ( config. run_interval ) . await ;
7687
7788 Ok ( ( ) )
7889}
90+
91+ /// Setup dependencies with fake data
92+ // TODO: remove this function when new runtime is implemented
93+ async fn setup_dependencies_fake_data ( stake_store : Arc < RwLock < dyn StakeStorer > > ) {
94+ // Update stake distribution
95+ let mut stake_store = stake_store. write ( ) . await ;
96+ let total_signers = 5 ;
97+ let epoch = 0 ; // TODO: to remove once the runtime feeds the stake distribution
98+ let stakes: ProtocolStakeDistribution = fake_data:: signers_with_stakes ( total_signers)
99+ . into_iter ( )
100+ . map ( |signer| signer. into ( ) )
101+ . collect :: < _ > ( ) ;
102+ for stake in stakes {
103+ stake_store
104+ . save_stake ( epoch, stake. into ( ) )
105+ . await
106+ . expect ( "fake stake distribution update failed" ) ;
107+ }
108+ }
0 commit comments