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  }