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 }