@@ -141,7 +141,7 @@ struct AbstractPosState {
141141 /// Validator slashes post-processing
142142 validator_slashes : BTreeMap < Address , Vec < Slash > > ,
143143 /// Enqueued slashes pre-processing
144- enqueued_slashes : BTreeMap < Epoch , BTreeMap < Address , Vec < Slash > > > ,
144+ enqueued_slashes : BTreeMap < Epoch , BTreeMap < Address , BTreeMap < u64 , Slash > > > ,
145145 /// The last epoch in which a validator committed an infraction
146146 validator_last_slash_epochs : BTreeMap < Address , Epoch > ,
147147 /// Validator's total unbonded required for slashing.
@@ -1413,8 +1413,10 @@ impl ConcretePosState {
14131413 ) {
14141414 // Check the enqueued slashes
14151415 let abs_enqueued = ref_state. enqueued_slashes . clone ( ) ;
1416- let mut conc_enqueued: BTreeMap < Epoch , BTreeMap < Address , Vec < Slash > > > =
1417- BTreeMap :: new ( ) ;
1416+ let mut conc_enqueued: BTreeMap <
1417+ Epoch ,
1418+ BTreeMap < Address , BTreeMap < u64 , Slash > > ,
1419+ > = BTreeMap :: new ( ) ;
14181420 enqueued_slashes_handle ( )
14191421 . get_data_handler ( )
14201422 . iter ( & self . s )
@@ -1426,7 +1428,7 @@ impl ConcretePosState {
14261428 nested_sub_key :
14271429 NestedSubKey :: Data {
14281430 key : address,
1429- nested_sub_key : _ ,
1431+ nested_sub_key : SubKey :: Data ( height ) ,
14301432 } ,
14311433 } ,
14321434 slash,
@@ -1436,7 +1438,7 @@ impl ConcretePosState {
14361438 . or_default ( )
14371439 . entry ( address)
14381440 . or_default ( ) ;
1439- slashes. push ( slash) ;
1441+ slashes. insert ( height , slash) ;
14401442 } ) ;
14411443 assert_eq ! ( abs_enqueued, conc_enqueued) ;
14421444 }
@@ -2503,7 +2505,7 @@ impl ReferenceStateMachine for AbstractPosState {
25032505 . or_default ( )
25042506 . entry ( address. clone ( ) )
25052507 . or_default ( )
2506- . push ( slash) ;
2508+ . insert ( * height , slash) ;
25072509
25082510 // Remove the validator from either the consensus or
25092511 // below-capacity set and place it into the jailed validator set
@@ -3844,7 +3846,7 @@ impl AbstractPosState {
38443846 |mut acc, ( validator, slashes) | {
38453847 let mut tot_rate =
38463848 acc. get ( validator) . cloned ( ) . unwrap_or_default ( ) ;
3847- for slash in slashes {
3849+ for slash in slashes. values ( ) {
38483850 debug_assert_eq ! ( slash. epoch, infraction_epoch) ;
38493851 let rate = cmp:: max (
38503852 slash. r#type . get_slash_rate ( & self . params ) ,
@@ -3918,7 +3920,7 @@ impl AbstractPosState {
39183920 let cur_slashes =
39193921 self . validator_slashes . entry ( validator. clone ( ) ) . or_default ( ) ;
39203922
3921- for slash in slashes {
3923+ for ( _ , slash) in slashes {
39223924 let rate = cmp:: max (
39233925 slash. r#type . get_slash_rate ( & self . params ) ,
39243926 cubic_rate,
0 commit comments