Skip to content

Commit d7fc4e9

Browse files
authored
Improve iterate validators dist. invariant (#3818)
1 parent 006496f commit d7fc4e9

File tree

1 file changed

+13
-7
lines changed

1 file changed

+13
-7
lines changed

x/distribution/simulation/invariants.go

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -59,24 +59,30 @@ func CanWithdrawInvariant(k distr.Keeper, sk types.StakingKeeper) sdk.Invariant
5959

6060
var remaining sdk.DecCoins
6161

62+
valDelegationAddrs := make(map[string][]sdk.AccAddress)
63+
for _, del := range sk.GetAllSDKDelegations(ctx) {
64+
valAddr := del.GetValidatorAddr().String()
65+
valDelegationAddrs[valAddr] = append(valDelegationAddrs[valAddr], del.GetDelegatorAddr())
66+
}
67+
6268
// iterate over all validators
6369
sk.IterateValidators(ctx, func(_ int64, val sdk.Validator) (stop bool) {
6470
_ = k.WithdrawValidatorCommission(ctx, val.GetOperator())
65-
// TODO fetch delegations just for the validator, requires sdk.ValidatorSet change
66-
// iterate over all current delegations, withdraw rewards
67-
dels := sk.GetAllSDKDelegations(ctx)
68-
for _, delegation := range dels {
69-
if delegation.GetValidatorAddr().String() == val.GetOperator().String() {
70-
err := k.WithdrawDelegationRewards(ctx, delegation.GetDelegatorAddr(), delegation.GetValidatorAddr())
71-
if err != nil {
71+
72+
delegationAddrs, ok := valDelegationAddrs[val.GetOperator().String()]
73+
if ok {
74+
for _, delAddr := range delegationAddrs {
75+
if err := k.WithdrawDelegationRewards(ctx, delAddr, val.GetOperator()); err != nil {
7276
panic(err)
7377
}
7478
}
7579
}
80+
7681
remaining = k.GetValidatorOutstandingRewards(ctx, val.GetOperator())
7782
if len(remaining) > 0 && remaining[0].Amount.LT(sdk.ZeroDec()) {
7883
return true
7984
}
85+
8086
return false
8187
})
8288

0 commit comments

Comments
 (0)