github.com/cosmos/cosmos-sdk@v0.50.10/x/staking/keeper/test_common.go (about) 1 package keeper // noalias 2 3 import ( 4 "bytes" 5 "context" 6 7 storetypes "cosmossdk.io/store/types" 8 9 sdk "github.com/cosmos/cosmos-sdk/types" 10 "github.com/cosmos/cosmos-sdk/x/staking/types" 11 ) 12 13 // ValidatorByPowerIndexExists does a certain by-power index record exist 14 func ValidatorByPowerIndexExists(ctx context.Context, keeper *Keeper, power []byte) bool { 15 store := keeper.storeService.OpenKVStore(ctx) 16 has, err := store.Has(power) 17 if err != nil { 18 panic(err) 19 } 20 return has 21 } 22 23 // TestingUpdateValidator updates a validator for testing 24 func TestingUpdateValidator(keeper *Keeper, ctx sdk.Context, validator types.Validator, apply bool) types.Validator { 25 err := keeper.SetValidator(ctx, validator) 26 if err != nil { 27 panic(err) 28 } 29 30 // Remove any existing power key for validator. 31 store := keeper.storeService.OpenKVStore(ctx) 32 deleted := false 33 34 iterator, err := store.Iterator(types.ValidatorsByPowerIndexKey, storetypes.PrefixEndBytes(types.ValidatorsByPowerIndexKey)) 35 if err != nil { 36 panic(err) 37 } 38 defer iterator.Close() 39 40 bz, err := keeper.validatorAddressCodec.StringToBytes(validator.GetOperator()) 41 if err != nil { 42 panic(err) 43 } 44 45 for ; iterator.Valid(); iterator.Next() { 46 valAddr := types.ParseValidatorPowerRankKey(iterator.Key()) 47 if bytes.Equal(valAddr, bz) { 48 if deleted { 49 panic("found duplicate power index key") 50 } else { 51 deleted = true 52 } 53 54 if err = store.Delete(iterator.Key()); err != nil { 55 panic(err) 56 } 57 } 58 } 59 60 if err = keeper.SetValidatorByPowerIndex(ctx, validator); err != nil { 61 panic(err) 62 } 63 64 if !apply { 65 ctx, _ = ctx.CacheContext() 66 } 67 _, err = keeper.ApplyAndReturnValidatorSetUpdates(ctx) 68 if err != nil { 69 panic(err) 70 } 71 72 validator, err = keeper.GetValidator(ctx, sdk.ValAddress(bz)) 73 if err != nil { 74 panic(err) 75 } 76 77 return validator 78 }