github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/x/staking/keeper/query_utils.go (about)

     1  package keeper
     2  
     3  import (
     4  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
     5  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/staking/types"
     6  )
     7  
     8  // Return all validators that a delegator is bonded to. If maxRetrieve is supplied, the respective amount will be returned.
     9  func (k Keeper) GetDelegatorValidators(ctx sdk.Context, delegatorAddr sdk.AccAddress,
    10  	maxRetrieve uint16) (validators []types.Validator) {
    11  	validators = make([]types.Validator, maxRetrieve)
    12  
    13  	store := ctx.KVStore(k.storeKey)
    14  	delegatorPrefixKey := types.GetDelegationsKey(delegatorAddr)
    15  	iterator := sdk.KVStorePrefixIterator(store, delegatorPrefixKey) // smallest to largest
    16  	defer iterator.Close()
    17  
    18  	i := 0
    19  	for ; iterator.Valid() && i < int(maxRetrieve); iterator.Next() {
    20  		delegation := types.MustUnmarshalDelegation(k.cdc, iterator.Value())
    21  
    22  		validator, found := k.GetValidator(ctx, delegation.ValidatorAddress)
    23  		if !found {
    24  			panic(types.ErrNoValidatorFound)
    25  		}
    26  		validators[i] = validator
    27  		i++
    28  	}
    29  	return validators[:i] // trim
    30  }
    31  
    32  // return a validator that a delegator is bonded to
    33  func (k Keeper) GetDelegatorValidator(ctx sdk.Context, delegatorAddr sdk.AccAddress,
    34  	validatorAddr sdk.ValAddress) (validator types.Validator, err error) {
    35  
    36  	delegation, found := k.GetDelegation(ctx, delegatorAddr, validatorAddr)
    37  	if !found {
    38  		return validator, types.ErrNoDelegation
    39  	}
    40  
    41  	validator, found = k.GetValidator(ctx, delegation.ValidatorAddress)
    42  	if !found {
    43  		panic(types.ErrNoValidatorFound)
    44  	}
    45  	return
    46  }
    47  
    48  //_____________________________________________________________________________________
    49  
    50  // return all delegations for a delegator
    51  func (k Keeper) GetAllDelegatorDelegations(ctx sdk.Context, delegator sdk.AccAddress) []types.Delegation {
    52  	delegations := make([]types.Delegation, 0)
    53  
    54  	store := ctx.KVStore(k.storeKey)
    55  	delegatorPrefixKey := types.GetDelegationsKey(delegator)
    56  	iterator := sdk.KVStorePrefixIterator(store, delegatorPrefixKey) //smallest to largest
    57  	defer iterator.Close()
    58  
    59  	i := 0
    60  	for ; iterator.Valid(); iterator.Next() {
    61  		delegation := types.MustUnmarshalDelegation(k.cdc, iterator.Value())
    62  		delegations = append(delegations, delegation)
    63  		i++
    64  	}
    65  
    66  	return delegations
    67  }
    68  
    69  // return all unbonding-delegations for a delegator
    70  func (k Keeper) GetAllUnbondingDelegations(ctx sdk.Context, delegator sdk.AccAddress) []types.UnbondingDelegation {
    71  	unbondingDelegations := make([]types.UnbondingDelegation, 0)
    72  
    73  	store := ctx.KVStore(k.storeKey)
    74  	delegatorPrefixKey := types.GetUBDsKey(delegator)
    75  	iterator := sdk.KVStorePrefixIterator(store, delegatorPrefixKey) // smallest to largest
    76  	defer iterator.Close()
    77  
    78  	for i := 0; iterator.Valid(); iterator.Next() {
    79  		unbondingDelegation := types.MustUnmarshalUBD(k.cdc, iterator.Value())
    80  		unbondingDelegations = append(unbondingDelegations, unbondingDelegation)
    81  		i++
    82  	}
    83  
    84  	return unbondingDelegations
    85  }
    86  
    87  // return all redelegations for a delegator
    88  func (k Keeper) GetAllRedelegations(ctx sdk.Context, delegator sdk.AccAddress,
    89  	srcValAddress, dstValAddress sdk.ValAddress) (
    90  	redelegations []types.Redelegation) {
    91  
    92  	store := ctx.KVStore(k.storeKey)
    93  	delegatorPrefixKey := types.GetREDsKey(delegator)
    94  	iterator := sdk.KVStorePrefixIterator(store, delegatorPrefixKey) // smallest to largest
    95  	defer iterator.Close()
    96  
    97  	srcValFilter := !(srcValAddress.Empty())
    98  	dstValFilter := !(dstValAddress.Empty())
    99  
   100  	for ; iterator.Valid(); iterator.Next() {
   101  		redelegation := types.MustUnmarshalRED(k.cdc, iterator.Value())
   102  		if srcValFilter && !(srcValAddress.Equals(redelegation.ValidatorSrcAddress)) {
   103  			continue
   104  		}
   105  		if dstValFilter && !(dstValAddress.Equals(redelegation.ValidatorDstAddress)) {
   106  			continue
   107  		}
   108  		redelegations = append(redelegations, redelegation)
   109  	}
   110  	return redelegations
   111  }