fix: fix Group-TotalWeight invariant (#13116)
This commit is contained in:
parent
d874acee4c
commit
0eacc88096
@ -127,10 +127,9 @@ Ref: https://keepachangelog.com/en/1.0.0/
|
||||
|
||||
### CLI Breaking Changes
|
||||
|
||||
* /
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* [#13116](https://github.com/cosmos/cosmos-sdk/pull/13116) Fix a dead-lock in the `Group-TotalWeight` `x/group` invariant.
|
||||
* [#13046](https://github.com/cosmos/cosmos-sdk/pull/13046) Fix missing return statement in BaseApp.Query.
|
||||
* [#12548](https://github.com/cosmos/cosmos-sdk/pull/12548) Prevent signing from wrong key while using multisig.
|
||||
* (genutil) [#12140](https://github.com/cosmos/cosmos-sdk/pull/12140) Fix staking's genesis JSON migrate in the `simd migrate v0.46` CLI command.
|
||||
|
||||
@ -6,6 +6,7 @@ import (
|
||||
"sort"
|
||||
"sync"
|
||||
|
||||
"github.com/tendermint/tendermint/libs/math"
|
||||
dbm "github.com/tendermint/tm-db"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/internal/conv"
|
||||
@ -13,7 +14,6 @@ import (
|
||||
"github.com/cosmos/cosmos-sdk/store/tracekv"
|
||||
"github.com/cosmos/cosmos-sdk/store/types"
|
||||
"github.com/cosmos/cosmos-sdk/types/kv"
|
||||
"github.com/tendermint/tendermint/libs/math"
|
||||
)
|
||||
|
||||
// cValue represents a cached value.
|
||||
@ -378,11 +378,14 @@ func (store *Store) clearUnsortedCacheSubset(unsorted []*kv.Pair, sortState sort
|
||||
if item.Value == nil {
|
||||
// deleted element, tracked by store.deleted
|
||||
// setting arbitrary value
|
||||
store.sortedCache.Set(item.Key, []byte{})
|
||||
if err := store.sortedCache.Set(item.Key, []byte{}); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
continue
|
||||
}
|
||||
err := store.sortedCache.Set(item.Key, item.Value)
|
||||
if err != nil {
|
||||
|
||||
if err := store.sortedCache.Set(item.Key, item.Value); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
@ -38,12 +38,8 @@ func GroupTotalWeightInvariantHelper(ctx sdk.Context, key storetypes.StoreKey, g
|
||||
}
|
||||
defer groupIt.Close()
|
||||
|
||||
groups := make(map[uint64]group.GroupInfo)
|
||||
for {
|
||||
membersWeight, err := groupmath.NewNonNegativeDecFromString("0")
|
||||
if err != nil {
|
||||
msg += fmt.Sprintf("error while parsing positive dec zero for group member\n%v\n", err)
|
||||
return msg, broken
|
||||
}
|
||||
var groupInfo group.GroupInfo
|
||||
_, err = groupIt.LoadNext(&groupInfo)
|
||||
if errors.ErrORMIteratorDone.Is(err) {
|
||||
@ -54,6 +50,16 @@ func GroupTotalWeightInvariantHelper(ctx sdk.Context, key storetypes.StoreKey, g
|
||||
return msg, broken
|
||||
}
|
||||
|
||||
groups[groupInfo.Id] = groupInfo
|
||||
}
|
||||
|
||||
for _, groupInfo := range groups {
|
||||
membersWeight, err := groupmath.NewNonNegativeDecFromString("0")
|
||||
if err != nil {
|
||||
msg += fmt.Sprintf("error while parsing positive dec zero for group member\n%v\n", err)
|
||||
return msg, broken
|
||||
}
|
||||
|
||||
memIt, err := groupMemberByGroupIndex.Get(ctx.KVStore(key), groupInfo.Id)
|
||||
if err != nil {
|
||||
msg += fmt.Sprintf("error while returning group member iterator for group with ID %d\n%v\n", groupInfo.Id, err)
|
||||
@ -77,6 +83,7 @@ func GroupTotalWeightInvariantHelper(ctx sdk.Context, key storetypes.StoreKey, g
|
||||
msg += fmt.Sprintf("error while parsing non-nengative decimal for group member %s\n%v\n", groupMember.Member.Address, err)
|
||||
return msg, broken
|
||||
}
|
||||
|
||||
membersWeight, err = groupmath.Add(membersWeight, curMemWeight)
|
||||
if err != nil {
|
||||
msg += fmt.Sprintf("decimal addition error while adding group member voting weight to total voting weight\n%v\n", err)
|
||||
@ -96,5 +103,6 @@ func GroupTotalWeightInvariantHelper(ctx sdk.Context, key storetypes.StoreKey, g
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
return msg, broken
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user