Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: grants by granter pagination total (backport #11813) #11828

Merged
merged 1 commit into from
May 12, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,10 @@ Ref: https://keepachangelog.com/en/1.0.0/

## [Unreleased]

### Improvements

* (x/feegrant) [\#11813](https://github.com/cosmos/cosmos-sdk/pull/11813) Fix pagination total count in `AllowancesByGranter` query.

### Bug Fixes

* [#11796](https://github.com/cosmos/cosmos-sdk/pull/11796) Handle EOF error case in `readLineFromBuf`, which allows successful reading of passphrases from STDIN.
Expand Down
21 changes: 12 additions & 9 deletions x/feegrant/keeper/grpc_query.go
Original file line number Diff line number Diff line change
Expand Up @@ -110,20 +110,23 @@ func (q Keeper) AllowancesByGranter(c context.Context, req *feegrant.QueryAllowa
var grants []*feegrant.Grant

store := ctx.KVStore(q.storeKey)
pageRes, err := query.Paginate(store, req.Pagination, func(key []byte, value []byte) error {
var grant feegrant.Grant

granter, _ := feegrant.ParseAddressesFromFeeAllowanceKey(key)
prefixStore := prefix.NewStore(store, feegrant.FeeAllowanceKeyPrefix)
Copy link
Member

@julienrbrt julienrbrt May 6, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am unfamiliar with this addition while cherry-picking. It comes from #10830 and is a feature from 0.46.
Should we just use the store here?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, this looks correct!

We need to iterate over the FeeAllowanceKeyPrefix prefix. Looks like the key is composed as follows: FeeAllowanceKeyPrefix | grantee | granter

pageRes, err := query.FilteredPaginate(prefixStore, req.Pagination, func(key []byte, value []byte, accumulate bool) (bool, error) {
// ParseAddressesFromFeeAllowanceKey expects the full key including the prefix.
granter, _ := feegrant.ParseAddressesFromFeeAllowanceKey(append(feegrant.FeeAllowanceKeyPrefix, key...))
if !granter.Equals(granterAddr) {
return nil
return false, nil
}

if err := q.cdc.Unmarshal(value, &grant); err != nil {
return err
if accumulate {
var grant feegrant.Grant
if err := q.cdc.Unmarshal(value, &grant); err != nil {
return false, err
}
grants = append(grants, &grant)
}

grants = append(grants, &grant)
return nil
return true, nil
})

if err != nil {
Expand Down
10 changes: 5 additions & 5 deletions x/feegrant/keeper/grpc_query_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ func (suite *KeeperTestSuite) TestFeeAllowance() {
},
false,
func() {
grantFeeAllowance(suite)
suite.grantFeeAllowance(suite.addrs[0], suite.addrs[1])
},
func(response *feegrant.QueryAllowanceResponse) {
suite.Require().Equal(response.Allowance.Granter, suite.addrs[0].String())
Expand Down Expand Up @@ -124,7 +124,7 @@ func (suite *KeeperTestSuite) TestFeeAllowances() {
},
false,
func() {
grantFeeAllowance(suite)
suite.grantFeeAllowance(suite.addrs[0], suite.addrs[1])
},
func(resp *feegrant.QueryAllowancesResponse) {
suite.Require().Equal(len(resp.Allowances), 1)
Expand Down Expand Up @@ -190,7 +190,7 @@ func (suite *KeeperTestSuite) TestFeeAllowancesByGranter() {
},
false,
func() {
grantFeeAllowance(suite)
suite.grantFeeAllowance(suite.addrs[0], suite.addrs[1])
},
func(resp *feegrant.QueryAllowancesByGranterResponse) {
suite.Require().Equal(len(resp.Allowances), 1)
Expand All @@ -214,9 +214,9 @@ func (suite *KeeperTestSuite) TestFeeAllowancesByGranter() {
}
}

func grantFeeAllowance(suite *KeeperTestSuite) {
func (suite *KeeperTestSuite) grantFeeAllowance(granter, grantee sdk.AccAddress) {
exp := suite.sdkCtx.BlockTime().AddDate(1, 0, 0)
err := suite.app.FeeGrantKeeper.GrantAllowance(suite.sdkCtx, suite.addrs[0], suite.addrs[1], &feegrant.BasicAllowance{
err := suite.app.FeeGrantKeeper.GrantAllowance(suite.sdkCtx, granter, grantee, &feegrant.BasicAllowance{
SpendLimit: sdk.NewCoins(sdk.NewInt64Coin("atom", 555)),
Expiration: &exp,
})
Expand Down