perf: modify DelegatorSharesInvariant for better performance (#12170) (#12179)

This commit is contained in:
mergify[bot] 2022-06-07 14:49:30 -04:00 committed by GitHub
parent d721a760d8
commit bec98b55e3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 18 additions and 8 deletions

View File

@ -166,20 +166,30 @@ func DelegatorSharesInvariant(k Keeper) sdk.Invariant {
) )
validators := k.GetAllValidators(ctx) validators := k.GetAllValidators(ctx)
validatorsDelegationShares := map[string]sdk.Dec{}
// initialize a map: validator -> its delegation shares
for _, validator := range validators { for _, validator := range validators {
valTotalDelShares := validator.GetDelegatorShares() validatorsDelegationShares[validator.GetOperator().String()] = sdk.ZeroDec()
totalDelShares := sdk.ZeroDec() }
delegations := k.GetValidatorDelegations(ctx, validator.GetOperator()) // iterate through all the delegations to calculate the total delegation shares for each validator
for _, delegation := range delegations { delegations := k.GetAllDelegations(ctx)
totalDelShares = totalDelShares.Add(delegation.Shares) for _, delegation := range delegations {
} delegationValidatorAddr := delegation.GetValidatorAddr().String()
validatorDelegationShares := validatorsDelegationShares[delegationValidatorAddr]
validatorsDelegationShares[delegationValidatorAddr] = validatorDelegationShares.Add(delegation.Shares)
}
if !valTotalDelShares.Equal(totalDelShares) { // for each validator, check if its total delegation shares calculated from the step above equals to its expected delegation shares
for _, validator := range validators {
expValTotalDelShares := validator.GetDelegatorShares()
calculatedValTotalDelShares := validatorsDelegationShares[validator.GetOperator().String()]
if !calculatedValTotalDelShares.Equal(expValTotalDelShares) {
broken = true broken = true
msg += fmt.Sprintf("broken delegator shares invariance:\n"+ msg += fmt.Sprintf("broken delegator shares invariance:\n"+
"\tvalidator.DelegatorShares: %v\n"+ "\tvalidator.DelegatorShares: %v\n"+
"\tsum of Delegator.Shares: %v\n", valTotalDelShares, totalDelShares) "\tsum of Delegator.Shares: %v\n", expValTotalDelShares, calculatedValTotalDelShares)
} }
} }