github.com/Finschia/finschia-sdk@v0.48.1/x/staking/keeper/query_utils.go (about) 1 package keeper 2 3 import ( 4 sdk "github.com/Finschia/finschia-sdk/types" 5 "github.com/Finschia/finschia-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( 10 ctx sdk.Context, delegatorAddr sdk.AccAddress, maxRetrieve uint32, 11 ) types.Validators { 12 validators := make([]types.Validator, maxRetrieve) 13 14 store := ctx.KVStore(k.storeKey) 15 delegatorPrefixKey := types.GetDelegationsKey(delegatorAddr) 16 17 iterator := sdk.KVStorePrefixIterator(store, delegatorPrefixKey) // smallest to largest 18 defer iterator.Close() 19 20 i := 0 21 for ; iterator.Valid() && i < int(maxRetrieve); iterator.Next() { 22 delegation := types.MustUnmarshalDelegation(k.cdc, iterator.Value()) 23 24 validator, found := k.GetValidator(ctx, delegation.GetValidatorAddr()) 25 if !found { 26 panic(types.ErrNoValidatorFound) 27 } 28 29 validators[i] = validator 30 i++ 31 } 32 33 return validators[:i] // trim 34 } 35 36 // return a validator that a delegator is bonded to 37 func (k Keeper) GetDelegatorValidator( 38 ctx sdk.Context, delegatorAddr sdk.AccAddress, validatorAddr sdk.ValAddress, 39 ) (validator types.Validator, err error) { 40 delegation, found := k.GetDelegation(ctx, delegatorAddr, validatorAddr) 41 if !found { 42 return validator, types.ErrNoDelegation 43 } 44 45 validator, found = k.GetValidator(ctx, delegation.GetValidatorAddr()) 46 if !found { 47 panic(types.ErrNoValidatorFound) 48 } 49 50 return validator, nil 51 } 52 53 // return all delegations for a delegator 54 func (k Keeper) GetAllDelegatorDelegations(ctx sdk.Context, delegator sdk.AccAddress) []types.Delegation { 55 delegations := make([]types.Delegation, 0) 56 57 store := ctx.KVStore(k.storeKey) 58 delegatorPrefixKey := types.GetDelegationsKey(delegator) 59 60 iterator := sdk.KVStorePrefixIterator(store, delegatorPrefixKey) // smallest to largest 61 defer iterator.Close() 62 63 i := 0 64 65 for ; iterator.Valid(); iterator.Next() { 66 delegation := types.MustUnmarshalDelegation(k.cdc, iterator.Value()) 67 delegations = append(delegations, delegation) 68 i++ 69 } 70 71 return delegations 72 } 73 74 // return all unbonding-delegations for a delegator 75 func (k Keeper) GetAllUnbondingDelegations(ctx sdk.Context, delegator sdk.AccAddress) []types.UnbondingDelegation { 76 unbondingDelegations := make([]types.UnbondingDelegation, 0) 77 78 store := ctx.KVStore(k.storeKey) 79 delegatorPrefixKey := types.GetUBDsKey(delegator) 80 81 iterator := sdk.KVStorePrefixIterator(store, delegatorPrefixKey) // smallest to largest 82 defer iterator.Close() 83 84 for i := 0; iterator.Valid(); iterator.Next() { 85 unbondingDelegation := types.MustUnmarshalUBD(k.cdc, iterator.Value()) 86 unbondingDelegations = append(unbondingDelegations, unbondingDelegation) 87 i++ 88 } 89 90 return unbondingDelegations 91 } 92 93 // return all redelegations for a delegator 94 func (k Keeper) GetAllRedelegations( 95 ctx sdk.Context, delegator sdk.AccAddress, srcValAddress, dstValAddress sdk.ValAddress, 96 ) []types.Redelegation { 97 store := ctx.KVStore(k.storeKey) 98 delegatorPrefixKey := types.GetREDsKey(delegator) 99 100 iterator := sdk.KVStorePrefixIterator(store, delegatorPrefixKey) // smallest to largest 101 defer iterator.Close() 102 103 srcValFilter := !(srcValAddress.Empty()) 104 dstValFilter := !(dstValAddress.Empty()) 105 106 redelegations := []types.Redelegation{} 107 108 for ; iterator.Valid(); iterator.Next() { 109 redelegation := types.MustUnmarshalRED(k.cdc, iterator.Value()) 110 valSrcAddr, err := sdk.ValAddressFromBech32(redelegation.ValidatorSrcAddress) 111 if err != nil { 112 panic(err) 113 } 114 valDstAddr, err := sdk.ValAddressFromBech32(redelegation.ValidatorDstAddress) 115 if err != nil { 116 panic(err) 117 } 118 if srcValFilter && !(srcValAddress.Equals(valSrcAddr)) { 119 continue 120 } 121 122 if dstValFilter && !(dstValAddress.Equals(valDstAddr)) { 123 continue 124 } 125 126 redelegations = append(redelegations, redelegation) 127 } 128 129 return redelegations 130 }