From cbb0ae2951f2a6fab17dcf12196ddf10a10d7b51 Mon Sep 17 00:00:00 2001 From: lutty Date: Fri, 18 Oct 2024 17:11:55 +0800 Subject: [PATCH] add GetAllPeriodDelegation Signed-off-by: lutty --- x/staking/keeper/period_delegation.go | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/x/staking/keeper/period_delegation.go b/x/staking/keeper/period_delegation.go index a68bc25470db..a12b9cee3f3e 100644 --- a/x/staking/keeper/period_delegation.go +++ b/x/staking/keeper/period_delegation.go @@ -2,6 +2,7 @@ package keeper import ( "context" + storetypes "cosmossdk.io/store/types" "errors" "time" @@ -36,6 +37,28 @@ func (k Keeper) ValidateNewPeriodDelegation( return periodDelegation, nil } +// GetAllPeriodDelegation returns all period delegation by delAddr and valAddr. +func (k Keeper) GetAllPeriodDelegation(ctx context.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) ([]types.PeriodDelegation, error) { + store := k.storeService.OpenKVStore(ctx) + + periodDelegationsKey := types.GetPeriodDelegationsKey(delAddr, valAddr) + iterator, err := store.Iterator(periodDelegationsKey, storetypes.PrefixEndBytes(periodDelegationsKey)) + if err != nil { + return nil, err + } + + periodDelegations := make([]types.PeriodDelegation, 0) + for ; iterator.Valid(); iterator.Next() { + periodDelegation, err := types.UnmarshalPeriodDelegation(k.cdc, iterator.Value()) + if err != nil { + return nil, err + } + periodDelegations = append(periodDelegations, periodDelegation) + } + + return periodDelegations, nil +} + // GetPeriodDelegation returns a specific period delegation. func (k Keeper) GetPeriodDelegation( ctx context.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress, periodDelegationID string,