Skip to content

Commit 12c2315

Browse files
DongLieupysel
authored andcommitted
Dong/pagination for all intermediary accounts (#4752)
* Add pagination support for AllIntermediaryAccounts query in Superfluid Module * lint * merge main
1 parent 8975815 commit 12c2315

File tree

2 files changed

+59
-10
lines changed

2 files changed

+59
-10
lines changed

x/superfluid/keeper/grpc_query.go

Lines changed: 37 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,15 @@ import (
99
sdk "github.com/cosmos/cosmos-sdk/types"
1010
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
1111
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
12+
"github.com/gogo/protobuf/proto"
1213
"google.golang.org/grpc/codes"
1314
"google.golang.org/grpc/status"
1415

1516
appparams "github.com/osmosis-labs/osmosis/v15/app/params"
1617

18+
"github.com/cosmos/cosmos-sdk/store/prefix"
19+
"github.com/cosmos/cosmos-sdk/types/query"
20+
1721
lockuptypes "github.com/osmosis-labs/osmosis/v15/x/lockup/types"
1822
"github.com/osmosis-labs/osmosis/v15/x/superfluid/types"
1923
)
@@ -90,22 +94,45 @@ func (q Querier) AssetMultiplier(goCtx context.Context, req *types.AssetMultipli
9094
}
9195

9296
// AllIntermediaryAccounts returns all superfluid intermediary accounts.
93-
func (q Querier) AllIntermediaryAccounts(goCtx context.Context, _ *types.AllIntermediaryAccountsRequest) (*types.AllIntermediaryAccountsResponse, error) {
94-
ctx := sdk.UnwrapSDKContext(goCtx)
95-
accounts := q.Keeper.GetAllIntermediaryAccounts(ctx)
97+
func (q Querier) AllIntermediaryAccounts(goCtx context.Context, req *types.AllIntermediaryAccountsRequest) (*types.AllIntermediaryAccountsResponse, error) {
98+
if req == nil {
99+
return nil, status.Error(codes.InvalidArgument, "empty request")
100+
}
101+
sdkCtx := sdk.UnwrapSDKContext(goCtx)
102+
store := sdkCtx.KVStore(q.Keeper.storeKey)
103+
accStore := prefix.NewStore(store, types.KeyPrefixIntermediaryAccount)
104+
iterator := sdk.KVStorePrefixIterator(accStore, nil)
105+
defer iterator.Close()
106+
96107
accInfos := []types.SuperfluidIntermediaryAccountInfo{}
97108

98-
for _, acc := range accounts {
99-
accInfos = append(accInfos, types.SuperfluidIntermediaryAccountInfo{
100-
Denom: acc.Denom,
101-
ValAddr: acc.ValAddr,
102-
GaugeId: acc.GaugeId,
103-
Address: acc.GetAccAddress().String(),
109+
pageRes, err := query.FilteredPaginate(accStore, req.Pagination,
110+
func(key, value []byte, accumulate bool) (bool, error) {
111+
account := types.SuperfluidIntermediaryAccount{}
112+
err := proto.Unmarshal(iterator.Value(), &account)
113+
if err != nil {
114+
return false, err
115+
}
116+
iterator.Next()
117+
118+
accountInfo := types.SuperfluidIntermediaryAccountInfo{
119+
Denom: account.Denom,
120+
ValAddr: account.ValAddr,
121+
GaugeId: account.GaugeId,
122+
Address: account.GetAccAddress().String(),
123+
}
124+
if accumulate {
125+
accInfos = append(accInfos, accountInfo)
126+
}
127+
return true, nil
104128
})
129+
if err != nil {
130+
return nil, status.Error(codes.Internal, err.Error())
105131
}
106132

107133
return &types.AllIntermediaryAccountsResponse{
108-
Accounts: accInfos,
134+
Accounts: accInfos,
135+
Pagination: pageRes,
109136
}, nil
110137
}
111138

x/superfluid/keeper/grpc_query_test.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,28 @@ func (suite *KeeperTestSuite) TestGRPCParams() {
1616
suite.Require().True(res.Params.MinimumRiskFactor.Equal(types.DefaultParams().MinimumRiskFactor))
1717
}
1818

19+
func (suite *KeeperTestSuite) TestAllIntermediaryAccounts() {
20+
suite.SetupTest()
21+
// set account 1
22+
valAddr1 := sdk.ValAddress([]byte("test1-AllIntermediaryAccounts"))
23+
acc1 := types.NewSuperfluidIntermediaryAccount("test1", valAddr1.String(), 0)
24+
suite.App.SuperfluidKeeper.SetIntermediaryAccount(suite.Ctx, acc1)
25+
26+
// set account 2
27+
valAddr2 := sdk.ValAddress([]byte("test2-AllIntermediaryAccounts"))
28+
acc2 := types.NewSuperfluidIntermediaryAccount("test2", valAddr2.String(), 0)
29+
suite.App.SuperfluidKeeper.SetIntermediaryAccount(suite.Ctx, acc2)
30+
31+
// set account 3
32+
valAddr3 := sdk.ValAddress([]byte("test3-AllIntermediaryAccounts"))
33+
acc3 := types.NewSuperfluidIntermediaryAccount("test3", valAddr3.String(), 0)
34+
suite.App.SuperfluidKeeper.SetIntermediaryAccount(suite.Ctx, acc3)
35+
36+
res, err := suite.querier.AllIntermediaryAccounts(sdk.WrapSDKContext(suite.Ctx), &types.AllIntermediaryAccountsRequest{})
37+
suite.Require().NoError(err)
38+
suite.Require().Equal(3, len(res.Accounts))
39+
suite.Require().Equal(uint64(3), res.Pagination.Total)
40+
}
1941
func (suite *KeeperTestSuite) TestTotalDelegationByValidatorForAsset() {
2042
suite.SetupTest()
2143
ctx := suite.Ctx

0 commit comments

Comments
 (0)