1- use std:: collections:: BTreeMap ;
1+ use std:: collections:: { BTreeMap } ;
22use std:: sync:: Arc ;
33
44use pallet_staking:: ValidatorPrefs ;
@@ -12,7 +12,7 @@ use sp_runtime::Perbill;
1212use tracing:: info;
1313use frame_support:: BoundedVec ;
1414use mockall:: automock;
15- use crate :: { miner_config, multi_block_state_client:: { MultiBlockClientTrait , StorageTrait , VoterData , VoterSnapshotPage } , primitives:: Storage , snapshot:: SnapshotService } ;
15+ use crate :: { miner_config, models :: StakingStats , multi_block_state_client:: { MultiBlockClientTrait , StorageTrait , VoterData , VoterSnapshotPage } , primitives:: Storage , snapshot:: SnapshotService } ;
1616
1717use crate :: { models:: { Validator , ValidatorNomination , SimulationResult , RunParameters } , multi_block_state_client:: ChainClientTrait , primitives:: AccountId } ;
1818
@@ -323,9 +323,18 @@ where
323323 . collect :: < Result < Vec < _ > , _ > > ( )
324324 . map_err ( |e| e. to_string ( ) ) ?;
325325
326+ let total_staked = active_validators. iter ( ) . map ( |v| v. total_stake ) . sum ( ) ;
327+ let lowest_staked = active_validators. iter ( ) . map ( |v| v. total_stake ) . min ( ) . unwrap_or ( 0 ) ;
328+ let avg_staked = total_staked / active_validators. len ( ) as u128 ;
329+
326330 let simulation_result = crate :: models:: SimulationResult {
327331 run_parameters : run_parameters. clone ( ) ,
328- active_validators
332+ active_validators,
333+ staking_stats : StakingStats {
334+ total_staked : total_staked,
335+ lowest_staked : lowest_staked,
336+ avg_staked : avg_staked,
337+ } ,
329338 } ;
330339
331340 Ok ( simulation_result)
@@ -358,14 +367,14 @@ mod tests {
358367 async fn fetch<Addr >(
359368 & self ,
360369 address: & Addr ,
361- ) -> Result <Option <<Addr as Address >:: Target >, Box <dyn std:: error:: Error >>
370+ ) -> Result <Option <<Addr as Address >:: Target >, Box <dyn std:: error:: Error + Send + Sync >>
362371 where
363372 Addr : Address <IsFetchable = Yes > + Sync + ' static ;
364373
365374 async fn fetch_or_default<Addr >(
366375 & self ,
367376 address: & Addr ,
368- ) -> Result <<Addr as Address >:: Target , Box <dyn std:: error:: Error >>
377+ ) -> Result <<Addr as Address >:: Target , Box <dyn std:: error:: Error + Send + Sync >>
369378 where
370379 Addr : Address <IsFetchable = Yes , IsDefaultable = Yes > + Sync + ' static ;
371380 }
@@ -402,6 +411,9 @@ mod tests {
402411 storage : MockDummyStorage :: new ( ) ,
403412 _block_number : 100 ,
404413 } ;
414+
415+ mock_client. expect_get_phase ( )
416+ . returning ( |_storage : & MockDummyStorage | Ok ( Phase :: Snapshot ( 0 ) ) ) ;
405417
406418 let block_details_clone = block_details. clone ( ) ;
407419 mock_client. expect_get_block_details ( )
@@ -465,6 +477,9 @@ mod tests {
465477 storage : MockDummyStorage :: new ( ) ,
466478 _block_number : 100 ,
467479 } ;
480+
481+ mock_client. expect_get_phase ( )
482+ . returning ( |_storage : & MockDummyStorage | Ok ( Phase :: Snapshot ( 0 ) ) ) ;
468483
469484 let block_details_clone = block_details. clone ( ) ;
470485 mock_client. expect_get_block_details ( )
@@ -552,6 +567,9 @@ mod tests {
552567 storage : MockDummyStorage :: new ( ) ,
553568 _block_number : 100 ,
554569 } ;
570+
571+ mock_client. expect_get_phase ( )
572+ . returning ( |_storage : & MockDummyStorage | Ok ( Phase :: Snapshot ( 0 ) ) ) ;
555573
556574 let block_details_clone = block_details. clone ( ) ;
557575 mock_client. expect_get_block_details ( )
0 commit comments