chore(feegrant): remove address.String() calls (#17869)

This commit is contained in:
Marko 2023-09-25 18:03:32 +02:00 committed by GitHub
parent 31db604d61
commit 1e40dc8e3f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 218 additions and 100 deletions

View File

@ -34,3 +34,4 @@ Ref: https://keepachangelog.com/en/1.0.0/
* [#15606](https://github.com/cosmos/cosmos-sdk/pull/15606) `NewKeeper` now takes a `KVStoreService` instead of a `StoreKey` and methods in the `Keeper` now take a `context.Context` instead of a `sdk.Context`.
* [#15347](https://github.com/cosmos/cosmos-sdk/pull/15347) Remove global bech32 usage in keeper.
* [#15347](https://github.com/cosmos/cosmos-sdk/pull/15347) `ValidateBasic` is treated as a no op now with with acceptance of RFC001
* [#17869](https://github.com/cosmos/cosmos-sdk/pull/17869) `NewGrant`, `NewMsgGrantAllowance` & `NewMsgRevokeAllowance` takes strings instead of `sdk.AccAddress`

View File

@ -74,12 +74,16 @@ Examples:
return err
}
grantee, err := ac.StringToBytes(args[1])
_, err = ac.StringToBytes(args[1])
if err != nil {
return err
}
granter := clientCtx.GetFromAddress()
granterStr, err := ac.BytesToString(granter)
if err != nil {
return err
}
sl, err := cmd.Flags().GetString(FlagSpendLimit)
if err != nil {
return err
@ -167,7 +171,7 @@ Examples:
}
}
msg, err := feegrant.NewMsgGrantAllowance(grant, granter, grantee)
msg, err := feegrant.NewMsgGrantAllowance(grant, granterStr, args[1])
if err != nil {
return err
}
@ -209,12 +213,17 @@ Example:
return err
}
grantee, err := ac.StringToBytes(args[1])
_, err = ac.StringToBytes(args[1])
if err != nil {
return err
}
msg := feegrant.NewMsgRevokeAllowance(clientCtx.GetFromAddress(), grantee)
granter, err := ac.BytesToString(clientCtx.GetFromAddress())
if err != nil {
return err
}
msg := feegrant.NewMsgRevokeAllowance(granter, args[1])
return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), &msg)
},

View File

@ -96,7 +96,12 @@ func (s *CLITestSuite) SetupSuite() {
s.createGrant(granter, grantee)
grant, err := feegrant.NewGrant(granter, grantee, &feegrant.BasicAllowance{
granteeStr, err := s.baseCtx.AddressCodec.BytesToString(grantee)
s.Require().NoError(err)
granterStr, err := s.baseCtx.AddressCodec.BytesToString(granter)
s.Require().NoError(err)
grant, err := feegrant.NewGrant(granterStr, granteeStr, &feegrant.BasicAllowance{
SpendLimit: sdk.NewCoins(sdk.NewCoin("stake", sdkmath.NewInt(100))),
})
s.Require().NoError(err)

View File

@ -12,6 +12,7 @@ import (
"cosmossdk.io/x/feegrant"
"cosmossdk.io/x/feegrant/module"
addresscodec "github.com/cosmos/cosmos-sdk/codec/address"
"github.com/cosmos/cosmos-sdk/testutil"
sdk "github.com/cosmos/cosmos-sdk/types"
moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil"
@ -33,6 +34,8 @@ func TestFilteredFeeValidAllow(t *testing.T) {
now := ctx.HeaderInfo().Time
oneHour := now.Add(1 * time.Hour)
ac := addresscodec.NewBech32Codec("cosmos")
// msg we will call in the all cases
call := banktypes.MsgSend{}
cases := map[string]struct {
@ -146,7 +149,9 @@ func TestFilteredFeeValidAllow(t *testing.T) {
var granter, grantee sdk.AccAddress
allowance, err := feegrant.NewAllowedMsgAllowance(tc.allowance, tc.msgs)
require.NoError(t, err)
grant, err := feegrant.NewGrant(granter, grantee, allowance)
granterStr, err := ac.BytesToString(granter)
require.NoError(t, err)
granteeStr, err := ac.BytesToString(grantee)
require.NoError(t, err)
// now try to deduct
@ -166,8 +171,8 @@ func TestFilteredFeeValidAllow(t *testing.T) {
// create a new updated grant
newGrant, err := feegrant.NewGrant(
sdk.AccAddress(grant.Granter),
sdk.AccAddress(grant.Grantee),
granterStr,
granteeStr,
allowance)
require.NoError(t, err)

View File

@ -6,14 +6,13 @@ import (
errorsmod "cosmossdk.io/errors"
"github.com/cosmos/cosmos-sdk/codec/types"
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
)
var _ types.UnpackInterfacesMessage = &Grant{}
// NewGrant creates a new FeeAllowanceGrant.
func NewGrant(granter, grantee sdk.AccAddress, feeAllowance FeeAllowanceI) (Grant, error) {
func NewGrant(granter, grantee string, feeAllowance FeeAllowanceI) (Grant, error) {
msg, ok := feeAllowance.(proto.Message)
if !ok {
return Grant{}, errorsmod.Wrapf(sdkerrors.ErrPackAny, "cannot proto marshal %T", feeAllowance)
@ -25,8 +24,8 @@ func NewGrant(granter, grantee sdk.AccAddress, feeAllowance FeeAllowanceI) (Gran
}
return Grant{
Granter: granter.String(),
Grantee: grantee.String(),
Granter: granter,
Grantee: grantee,
Allowance: any,
}, nil
}

View File

@ -82,7 +82,11 @@ func TestGrant(t *testing.T) {
for name, tc := range cases {
tc := tc
t.Run(name, func(t *testing.T) {
grant, err := feegrant.NewGrant(tc.granter, tc.grantee, &feegrant.BasicAllowance{
granterStr, err := addressCodec.BytesToString(tc.granter)
require.NoError(t, err)
granteeStr, err := addressCodec.BytesToString(tc.grantee)
require.NoError(t, err)
grant, err := feegrant.NewGrant(granterStr, granteeStr, &feegrant.BasicAllowance{
SpendLimit: tc.limit,
Expiration: &tc.expires,
})

View File

@ -59,7 +59,6 @@ func TestImportExportGenesis(t *testing.T) {
f := initFixture(t)
f.accountKeeper.EXPECT().GetAccount(gomock.Any(), granteeAddr).Return(authtypes.NewBaseAccountWithAddress(granteeAddr)).AnyTimes()
f.accountKeeper.EXPECT().AddressCodec().Return(address.NewBech32Codec("cosmos")).AnyTimes()
coins := sdk.NewCoins(sdk.NewCoin("foo", math.NewInt(1_000)))
now := f.ctx.HeaderInfo().Time
@ -73,10 +72,15 @@ func TestImportExportGenesis(t *testing.T) {
genesis, err := f.feegrantKeeper.ExportGenesis(f.ctx)
assert.NilError(t, err)
granter, err := f.accountKeeper.AddressCodec().BytesToString(granterAddr.Bytes())
assert.NilError(t, err)
grantee, err := f.accountKeeper.AddressCodec().BytesToString(granteeAddr.Bytes())
assert.NilError(t, err)
// revoke fee allowance
_, err = msgSrvr.RevokeAllowance(f.ctx, &feegrant.MsgRevokeAllowance{
Granter: granterAddr.String(),
Grantee: granteeAddr.String(),
Granter: granter,
Grantee: grantee,
})
assert.NilError(t, err)
@ -92,6 +96,13 @@ func TestInitGenesis(t *testing.T) {
any, err := codectypes.NewAnyWithValue(&testdata.Dog{})
assert.NilError(t, err)
ac := address.NewBech32Codec("cosmos")
granter, err := ac.BytesToString(granterAddr.Bytes())
assert.NilError(t, err)
grantee, err := ac.BytesToString(granteeAddr.Bytes())
assert.NilError(t, err)
testCases := []struct {
name string
feeAllowances []feegrant.Grant
@ -102,7 +113,7 @@ func TestInitGenesis(t *testing.T) {
[]feegrant.Grant{
{
Granter: "invalid granter",
Grantee: granteeAddr.String(),
Grantee: grantee,
},
},
true,
@ -111,7 +122,7 @@ func TestInitGenesis(t *testing.T) {
"invalid grantee",
[]feegrant.Grant{
{
Granter: granterAddr.String(),
Granter: granter,
Grantee: "invalid grantee",
},
},
@ -121,8 +132,8 @@ func TestInitGenesis(t *testing.T) {
"invalid allowance",
[]feegrant.Grant{
{
Granter: granterAddr.String(),
Grantee: granteeAddr.String(),
Granter: granter,
Grantee: grantee,
Allowance: any,
},
},

View File

@ -30,7 +30,7 @@ func (suite *KeeperTestSuite) TestFeeAllowance() {
"fail: invalid granter",
&feegrant.QueryAllowanceRequest{
Granter: invalidGranter,
Grantee: suite.addrs[0].String(),
Grantee: suite.encodedAddrs[0],
},
true,
func() {},
@ -39,7 +39,7 @@ func (suite *KeeperTestSuite) TestFeeAllowance() {
{
"fail: invalid grantee",
&feegrant.QueryAllowanceRequest{
Granter: suite.addrs[0].String(),
Granter: suite.encodedAddrs[0],
Grantee: invalidGrantee,
},
true,
@ -49,8 +49,8 @@ func (suite *KeeperTestSuite) TestFeeAllowance() {
{
"fail: no grants",
&feegrant.QueryAllowanceRequest{
Granter: suite.addrs[0].String(),
Grantee: suite.addrs[1].String(),
Granter: suite.encodedAddrs[0],
Grantee: suite.encodedAddrs[1],
},
true,
func() {},
@ -69,16 +69,16 @@ func (suite *KeeperTestSuite) TestFeeAllowance() {
{
"valid query: expect single grant",
&feegrant.QueryAllowanceRequest{
Granter: suite.addrs[0].String(),
Grantee: suite.addrs[1].String(),
Granter: suite.encodedAddrs[0],
Grantee: suite.encodedAddrs[1],
},
false,
func() {
suite.grantFeeAllowance(suite.addrs[0], suite.addrs[1])
},
func(response *feegrant.QueryAllowanceResponse) {
suite.Require().Equal(response.Allowance.Granter, suite.addrs[0].String())
suite.Require().Equal(response.Allowance.Grantee, suite.addrs[1].String())
suite.Require().Equal(response.Allowance.Granter, suite.encodedAddrs[0])
suite.Require().Equal(response.Allowance.Grantee, suite.encodedAddrs[1])
},
},
}
@ -124,7 +124,7 @@ func (suite *KeeperTestSuite) TestFeeAllowances() {
{
"no grants",
&feegrant.QueryAllowancesRequest{
Grantee: suite.addrs[1].String(),
Grantee: suite.encodedAddrs[1],
},
false,
func() {},
@ -135,7 +135,7 @@ func (suite *KeeperTestSuite) TestFeeAllowances() {
{
"valid query: expect single grant",
&feegrant.QueryAllowancesRequest{
Grantee: suite.addrs[1].String(),
Grantee: suite.encodedAddrs[1],
},
false,
func() {
@ -143,8 +143,8 @@ func (suite *KeeperTestSuite) TestFeeAllowances() {
},
func(resp *feegrant.QueryAllowancesResponse) {
suite.Require().Equal(len(resp.Allowances), 1)
suite.Require().Equal(resp.Allowances[0].Granter, suite.addrs[0].String())
suite.Require().Equal(resp.Allowances[0].Grantee, suite.addrs[1].String())
suite.Require().Equal(resp.Allowances[0].Granter, suite.encodedAddrs[0])
suite.Require().Equal(resp.Allowances[0].Grantee, suite.encodedAddrs[1])
},
},
}
@ -190,7 +190,7 @@ func (suite *KeeperTestSuite) TestFeeAllowancesByGranter() {
{
"no grants",
&feegrant.QueryAllowancesByGranterRequest{
Granter: suite.addrs[0].String(),
Granter: suite.encodedAddrs[0],
},
false,
func() {},
@ -201,7 +201,7 @@ func (suite *KeeperTestSuite) TestFeeAllowancesByGranter() {
{
"valid query: expect single grant",
&feegrant.QueryAllowancesByGranterRequest{
Granter: suite.addrs[0].String(),
Granter: suite.encodedAddrs[0],
},
false,
func() {
@ -212,8 +212,8 @@ func (suite *KeeperTestSuite) TestFeeAllowancesByGranter() {
},
func(resp *feegrant.QueryAllowancesByGranterResponse) {
suite.Require().Equal(len(resp.Allowances), 1)
suite.Require().Equal(resp.Allowances[0].Granter, suite.addrs[0].String())
suite.Require().Equal(resp.Allowances[0].Grantee, suite.addrs[1].String())
suite.Require().Equal(resp.Allowances[0].Granter, suite.encodedAddrs[0])
suite.Require().Equal(resp.Allowances[0].Grantee, suite.encodedAddrs[1])
suite.Require().Equal(resp.Pagination.Total, uint64(1))
},
},

View File

@ -97,7 +97,16 @@ func (k Keeper) GrantAllowance(ctx context.Context, granter, grantee sdk.AccAddr
}
}
grant, err := feegrant.NewGrant(granter, grantee, feeAllowance)
granterStr, err := k.authKeeper.AddressCodec().BytesToString(granter)
if err != nil {
return err
}
granteeStr, err := k.authKeeper.AddressCodec().BytesToString(grantee)
if err != nil {
return err
}
grant, err := feegrant.NewGrant(granterStr, granteeStr, feeAllowance)
if err != nil {
return err
}
@ -124,7 +133,16 @@ func (k Keeper) UpdateAllowance(ctx context.Context, granter, grantee sdk.AccAdd
return err
}
grant, err := feegrant.NewGrant(granter, grantee, feeAllowance)
granterStr, err := k.authKeeper.AddressCodec().BytesToString(granter)
if err != nil {
return err
}
granteeStr, err := k.authKeeper.AddressCodec().BytesToString(grantee)
if err != nil {
return err
}
grant, err := feegrant.NewGrant(granterStr, granteeStr, feeAllowance)
if err != nil {
return err
}
@ -166,11 +184,20 @@ func (k Keeper) revokeAllowance(ctx context.Context, granter, grantee sdk.AccAdd
}
}
granterStr, err := k.authKeeper.AddressCodec().BytesToString(granter)
if err != nil {
return err
}
granteeStr, err := k.authKeeper.AddressCodec().BytesToString(grantee)
if err != nil {
return err
}
sdk.UnwrapSDKContext(ctx).EventManager().EmitEvent(
sdk.NewEvent(
feegrant.EventTypeRevokeFeeGrant,
sdk.NewAttribute(feegrant.AttributeKeyGranter, granter.String()),
sdk.NewAttribute(feegrant.AttributeKeyGrantee, grantee.String()),
sdk.NewAttribute(feegrant.AttributeKeyGranter, granterStr),
sdk.NewAttribute(feegrant.AttributeKeyGrantee, granteeStr),
),
)
return nil
@ -228,6 +255,15 @@ func (k Keeper) UseGrantedFees(ctx context.Context, granter, grantee sdk.AccAddr
return err
}
granterStr, err := k.authKeeper.AddressCodec().BytesToString(granter)
if err != nil {
return err
}
granteeStr, err := k.authKeeper.AddressCodec().BytesToString(grantee)
if err != nil {
return err
}
remove, err := grant.Accept(ctx, fee, msgs)
if remove {
// Ignoring the `revokeFeeAllowance` error, because the user has enough grants to perform this transaction.
@ -235,14 +271,14 @@ func (k Keeper) UseGrantedFees(ctx context.Context, granter, grantee sdk.AccAddr
if err != nil {
return err
}
emitUseGrantEvent(ctx, granter.String(), grantee.String())
emitUseGrantEvent(ctx, granterStr, granteeStr)
return nil
}
if err != nil {
return err
}
emitUseGrantEvent(ctx, granter.String(), grantee.String())
emitUseGrantEvent(ctx, granterStr, granteeStr)
// if fee allowance is accepted, store the updated state of the allowance
return k.UpdateAllowance(ctx, granter, grantee, grant)

View File

@ -28,6 +28,7 @@ type KeeperTestSuite struct {
ctx sdk.Context
addrs []sdk.AccAddress
encodedAddrs []string
msgSrvr feegrant.MsgServer
atom sdk.Coins
feegrantKeeper keeper.Keeper
@ -52,7 +53,13 @@ func (suite *KeeperTestSuite) SetupTest() {
suite.accountKeeper.EXPECT().GetAccount(gomock.Any(), suite.addrs[2]).Return(authtypes.NewBaseAccountWithAddress(suite.addrs[2])).AnyTimes()
suite.accountKeeper.EXPECT().GetAccount(gomock.Any(), suite.addrs[3]).Return(authtypes.NewBaseAccountWithAddress(suite.addrs[3])).AnyTimes()
suite.accountKeeper.EXPECT().AddressCodec().Return(codecaddress.NewBech32Codec("cosmos")).AnyTimes()
ac := codecaddress.NewBech32Codec("cosmos")
suite.accountKeeper.EXPECT().AddressCodec().Return(ac).AnyTimes()
for _, addr := range suite.addrs {
str, err := ac.BytesToString(addr)
suite.Require().NoError(err)
suite.encodedAddrs = append(suite.encodedAddrs, str)
}
suite.feegrantKeeper = keeper.NewKeeper(encCfg.Codec, runtime.NewKVStoreService(key), suite.accountKeeper)
suite.ctx = testCtx.Ctx
@ -107,21 +114,21 @@ func (suite *KeeperTestSuite) TestKeeperCrud() {
suite.Require().Error(err)
// remove some, overwrite other
_, err = suite.msgSrvr.RevokeAllowance(suite.ctx, &feegrant.MsgRevokeAllowance{Granter: suite.addrs[0].String(), Grantee: suite.addrs[1].String()})
_, err = suite.msgSrvr.RevokeAllowance(suite.ctx, &feegrant.MsgRevokeAllowance{Granter: suite.encodedAddrs[0], Grantee: suite.encodedAddrs[1]})
suite.Require().NoError(err)
_, err = suite.msgSrvr.RevokeAllowance(suite.ctx, &feegrant.MsgRevokeAllowance{Granter: suite.addrs[0].String(), Grantee: suite.addrs[2].String()})
_, err = suite.msgSrvr.RevokeAllowance(suite.ctx, &feegrant.MsgRevokeAllowance{Granter: suite.encodedAddrs[0], Grantee: suite.encodedAddrs[2]})
suite.Require().NoError(err)
// revoke non-exist fee allowance
_, err = suite.msgSrvr.RevokeAllowance(suite.ctx, &feegrant.MsgRevokeAllowance{Granter: suite.addrs[0].String(), Grantee: suite.addrs[2].String()})
_, err = suite.msgSrvr.RevokeAllowance(suite.ctx, &feegrant.MsgRevokeAllowance{Granter: suite.encodedAddrs[0], Grantee: suite.encodedAddrs[2]})
suite.Require().Error(err)
err = suite.feegrantKeeper.GrantAllowance(suite.ctx, suite.addrs[0], suite.addrs[2], basic)
suite.Require().NoError(err)
// revoke an existing grant and grant again with different allowance.
_, err = suite.msgSrvr.RevokeAllowance(suite.ctx, &feegrant.MsgRevokeAllowance{Granter: suite.addrs[1].String(), Grantee: suite.addrs[2].String()})
_, err = suite.msgSrvr.RevokeAllowance(suite.ctx, &feegrant.MsgRevokeAllowance{Granter: suite.encodedAddrs[1], Grantee: suite.encodedAddrs[2]})
suite.Require().NoError(err)
err = suite.feegrantKeeper.GrantAllowance(suite.ctx, suite.addrs[1], suite.addrs[2], basic3)
@ -183,7 +190,7 @@ func (suite *KeeperTestSuite) TestKeeperCrud() {
_, err = suite.feegrantKeeper.GetAllowance(suite.ctx, suite.addrs[3], accAddr)
suite.Require().NoError(err)
_, err = suite.msgSrvr.RevokeAllowance(suite.ctx, &feegrant.MsgRevokeAllowance{Granter: suite.addrs[3].String(), Grantee: address})
_, err = suite.msgSrvr.RevokeAllowance(suite.ctx, &feegrant.MsgRevokeAllowance{Granter: suite.encodedAddrs[3], Grantee: address})
suite.Require().NoError(err)
}
@ -230,8 +237,8 @@ func (suite *KeeperTestSuite) TestUseGrantedFee() {
final: future,
postRun: func() {
_, err := suite.msgSrvr.RevokeAllowance(suite.ctx, &feegrant.MsgRevokeAllowance{
Granter: suite.addrs[0].String(),
Grantee: suite.addrs[1].String(),
Granter: suite.encodedAddrs[0],
Grantee: suite.encodedAddrs[1],
})
suite.Require().NoError(err)
},
@ -244,8 +251,8 @@ func (suite *KeeperTestSuite) TestUseGrantedFee() {
final: futureAfterSmall,
postRun: func() {
_, err := suite.msgSrvr.RevokeAllowance(suite.ctx, &feegrant.MsgRevokeAllowance{
Granter: suite.addrs[0].String(),
Grantee: suite.addrs[1].String(),
Granter: suite.encodedAddrs[0],
Grantee: suite.encodedAddrs[1],
})
suite.Require().NoError(err)
},
@ -314,8 +321,8 @@ func (suite *KeeperTestSuite) TestIterateGrants() {
err = suite.feegrantKeeper.GrantAllowance(suite.ctx, suite.addrs[2], suite.addrs[1], allowance1)
suite.Require().NoError(err)
err = suite.feegrantKeeper.IterateAllFeeAllowances(suite.ctx, func(grant feegrant.Grant) bool {
suite.Require().Equal(suite.addrs[1].String(), grant.Grantee)
suite.Require().Contains([]string{suite.addrs[0].String(), suite.addrs[2].String()}, grant.Granter)
suite.Require().Equal(suite.encodedAddrs[1], grant.Grantee)
suite.Require().Contains([]string{suite.encodedAddrs[0], suite.encodedAddrs[2]}, grant.Granter)
return true
})
suite.Require().NoError(err)

View File

@ -34,7 +34,7 @@ func (suite *KeeperTestSuite) TestGrantAllowance() {
invalid := "invalid-granter"
return &feegrant.MsgGrantAllowance{
Granter: invalid,
Grantee: suite.addrs[1].String(),
Grantee: suite.encodedAddrs[1],
Allowance: any,
}
},
@ -48,7 +48,7 @@ func (suite *KeeperTestSuite) TestGrantAllowance() {
suite.Require().NoError(err)
invalid := "invalid-grantee"
return &feegrant.MsgGrantAllowance{
Granter: suite.addrs[0].String(),
Granter: suite.encodedAddrs[0],
Grantee: invalid,
Allowance: any,
}
@ -79,7 +79,7 @@ func (suite *KeeperTestSuite) TestGrantAllowance() {
suite.Require().NoError(err)
return &feegrant.MsgGrantAllowance{
Granter: suite.addrs[0].String(),
Granter: suite.encodedAddrs[0],
Grantee: grantee,
Allowance: any,
}
@ -96,8 +96,8 @@ func (suite *KeeperTestSuite) TestGrantAllowance() {
})
suite.Require().NoError(err)
return &feegrant.MsgGrantAllowance{
Granter: suite.addrs[0].String(),
Grantee: suite.addrs[1].String(),
Granter: suite.encodedAddrs[0],
Grantee: suite.encodedAddrs[1],
Allowance: any,
}
},
@ -113,8 +113,8 @@ func (suite *KeeperTestSuite) TestGrantAllowance() {
})
suite.Require().NoError(err)
return &feegrant.MsgGrantAllowance{
Granter: suite.addrs[0].String(),
Grantee: suite.addrs[1].String(),
Granter: suite.encodedAddrs[0],
Grantee: suite.encodedAddrs[1],
Allowance: any,
}
},
@ -130,8 +130,8 @@ func (suite *KeeperTestSuite) TestGrantAllowance() {
})
suite.Require().NoError(err)
return &feegrant.MsgGrantAllowance{
Granter: suite.addrs[0].String(),
Grantee: suite.addrs[1].String(),
Granter: suite.encodedAddrs[0],
Grantee: suite.encodedAddrs[1],
Allowance: any,
}
},
@ -150,8 +150,8 @@ func (suite *KeeperTestSuite) TestGrantAllowance() {
})
suite.Require().NoError(err)
return &feegrant.MsgGrantAllowance{
Granter: suite.addrs[1].String(),
Grantee: suite.addrs[2].String(),
Granter: suite.encodedAddrs[1],
Grantee: suite.encodedAddrs[2],
Allowance: any,
}
},
@ -170,8 +170,8 @@ func (suite *KeeperTestSuite) TestGrantAllowance() {
})
suite.Require().NoError(err)
return &feegrant.MsgGrantAllowance{
Granter: suite.addrs[1].String(),
Grantee: suite.addrs[2].String(),
Granter: suite.encodedAddrs[1],
Grantee: suite.encodedAddrs[2],
Allowance: any,
}
},
@ -205,7 +205,7 @@ func (suite *KeeperTestSuite) TestRevokeAllowance() {
"error: invalid granter",
&feegrant.MsgRevokeAllowance{
Granter: invalidGranter,
Grantee: suite.addrs[1].String(),
Grantee: suite.encodedAddrs[1],
},
func() {},
true,
@ -214,7 +214,7 @@ func (suite *KeeperTestSuite) TestRevokeAllowance() {
{
"error: invalid grantee",
&feegrant.MsgRevokeAllowance{
Granter: suite.addrs[0].String(),
Granter: suite.encodedAddrs[0],
Grantee: invalidGrantee,
},
func() {},
@ -224,8 +224,8 @@ func (suite *KeeperTestSuite) TestRevokeAllowance() {
{
"error: fee allowance not found",
&feegrant.MsgRevokeAllowance{
Granter: suite.addrs[0].String(),
Grantee: suite.addrs[1].String(),
Granter: suite.encodedAddrs[0],
Grantee: suite.encodedAddrs[1],
},
func() {},
true,
@ -234,14 +234,14 @@ func (suite *KeeperTestSuite) TestRevokeAllowance() {
{
"success: revoke fee allowance",
&feegrant.MsgRevokeAllowance{
Granter: suite.addrs[0].String(),
Grantee: suite.addrs[1].String(),
Granter: suite.encodedAddrs[0],
Grantee: suite.encodedAddrs[1],
},
func() {
// removing fee allowance from previous tests if exists
_, err := suite.msgSrvr.RevokeAllowance(suite.ctx, &feegrant.MsgRevokeAllowance{
Granter: suite.addrs[0].String(),
Grantee: suite.addrs[1].String(),
Granter: suite.encodedAddrs[0],
Grantee: suite.encodedAddrs[1],
})
suite.Require().Error(err)
any, err := codectypes.NewAnyWithValue(&feegrant.PeriodicAllowance{
@ -253,8 +253,8 @@ func (suite *KeeperTestSuite) TestRevokeAllowance() {
})
suite.Require().NoError(err)
req := &feegrant.MsgGrantAllowance{
Granter: suite.addrs[0].String(),
Grantee: suite.addrs[1].String(),
Granter: suite.encodedAddrs[0],
Grantee: suite.encodedAddrs[1],
Allowance: any,
}
_, err = suite.msgSrvr.GrantAllowance(suite.ctx, req)
@ -266,8 +266,8 @@ func (suite *KeeperTestSuite) TestRevokeAllowance() {
{
"error: check fee allowance revoked",
&feegrant.MsgRevokeAllowance{
Granter: suite.addrs[0].String(),
Grantee: suite.addrs[1].String(),
Granter: suite.encodedAddrs[0],
Grantee: suite.encodedAddrs[1],
},
func() {},
true,

View File

@ -13,6 +13,7 @@ import (
v2 "cosmossdk.io/x/feegrant/migrations/v2"
"cosmossdk.io/x/feegrant/module"
addresscodec "github.com/cosmos/cosmos-sdk/codec/address"
"github.com/cosmos/cosmos-sdk/crypto/keys/ed25519"
"github.com/cosmos/cosmos-sdk/runtime"
"github.com/cosmos/cosmos-sdk/testutil"
@ -23,6 +24,7 @@ import (
func TestMigration(t *testing.T) {
encodingConfig := moduletestutil.MakeTestEncodingConfig(module.AppModuleBasic{})
cdc := encodingConfig.Codec
ac := addresscodec.NewBech32Codec("cosmos")
feegrantKey := storetypes.NewKVStoreKey(v2.ModuleName)
ctx := testutil.DefaultContext(feegrantKey, storetypes.NewTransientStoreKey("transient_test"))
@ -68,7 +70,11 @@ func TestMigration(t *testing.T) {
store := ctx.KVStore(feegrantKey)
for _, grant := range grants {
newGrant, err := feegrant.NewGrant(grant.granter, grant.grantee, &feegrant.BasicAllowance{
granterStr, err := ac.BytesToString(grant.granter)
require.NoError(t, err)
granteeStr, err := ac.BytesToString(grant.grantee)
require.NoError(t, err)
newGrant, err := feegrant.NewGrant(granterStr, granteeStr, &feegrant.BasicAllowance{
SpendLimit: grant.spendLimit,
Expiration: grant.expiration,
})

View File

@ -44,8 +44,8 @@ func TestFeegrantPruning(t *testing.T) {
accountKeeper.EXPECT().GetAccount(gomock.Any(), granter1).Return(authtypes.NewBaseAccountWithAddress(granter1)).AnyTimes()
accountKeeper.EXPECT().GetAccount(gomock.Any(), granter2).Return(authtypes.NewBaseAccountWithAddress(granter2)).AnyTimes()
accountKeeper.EXPECT().GetAccount(gomock.Any(), granter3).Return(authtypes.NewBaseAccountWithAddress(granter3)).AnyTimes()
accountKeeper.EXPECT().AddressCodec().Return(address.NewBech32Codec("cosmos")).AnyTimes()
ac := address.NewBech32Codec("cosmos")
accountKeeper.EXPECT().AddressCodec().Return(ac).AnyTimes()
feegrantKeeper := keeper.NewKeeper(encCfg.Codec, runtime.NewKVStoreService(key), accountKeeper)
@ -85,8 +85,10 @@ func TestFeegrantPruning(t *testing.T) {
module.EndBlocker(testCtx.Ctx, feegrantKeeper)
granteeStr, err := ac.BytesToString(grantee)
require.NoError(t, err)
res, err := queryClient.Allowances(testCtx.Ctx.Context(), &feegrant.QueryAllowancesRequest{
Grantee: grantee.String(),
Grantee: granteeStr,
})
require.NoError(t, err)
require.NotNil(t, res)
@ -96,7 +98,7 @@ func TestFeegrantPruning(t *testing.T) {
module.EndBlocker(testCtx.Ctx, feegrantKeeper)
res, err = queryClient.Allowances(testCtx.Ctx.Context(), &feegrant.QueryAllowancesRequest{
Grantee: grantee.String(),
Grantee: granteeStr,
})
require.NoError(t, err)
require.NotNil(t, res)

View File

@ -16,7 +16,7 @@ var (
)
// NewMsgGrantAllowance creates a new MsgGrantAllowance.
func NewMsgGrantAllowance(feeAllowance FeeAllowanceI, granter, grantee sdk.AccAddress) (*MsgGrantAllowance, error) {
func NewMsgGrantAllowance(feeAllowance FeeAllowanceI, granter, grantee string) (*MsgGrantAllowance, error) {
msg, ok := feeAllowance.(proto.Message)
if !ok {
return nil, errorsmod.Wrapf(sdkerrors.ErrPackAny, "cannot proto marshal %T", msg)
@ -27,8 +27,8 @@ func NewMsgGrantAllowance(feeAllowance FeeAllowanceI, granter, grantee sdk.AccAd
}
return &MsgGrantAllowance{
Granter: granter.String(),
Grantee: grantee.String(),
Granter: granter,
Grantee: grantee,
Allowance: any,
}, nil
}
@ -51,6 +51,6 @@ func (msg MsgGrantAllowance) UnpackInterfaces(unpacker types.AnyUnpacker) error
// NewMsgRevokeAllowance returns a message to revoke a fee allowance for a given
// granter and grantee
func NewMsgRevokeAllowance(granter, grantee sdk.AccAddress) MsgRevokeAllowance {
return MsgRevokeAllowance{Granter: granter.String(), Grantee: grantee.String()}
func NewMsgRevokeAllowance(granter, grantee string) MsgRevokeAllowance {
return MsgRevokeAllowance{Granter: granter, Grantee: grantee}
}

View File

@ -11,6 +11,7 @@ import (
"cosmossdk.io/x/feegrant/module"
"cosmossdk.io/x/feegrant/simulation"
addresscodec "github.com/cosmos/cosmos-sdk/codec/address"
"github.com/cosmos/cosmos-sdk/crypto/keys/ed25519"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/kv"
@ -27,8 +28,14 @@ func TestDecodeStore(t *testing.T) {
encodingConfig := moduletestutil.MakeTestEncodingConfig(module.AppModuleBasic{})
cdc := encodingConfig.Codec
dec := simulation.NewDecodeStore(cdc)
ac := addresscodec.NewBech32Codec("cosmos")
grant, err := feegrant.NewGrant(granterAddr, granteeAddr, &feegrant.BasicAllowance{
granterStr, err := ac.BytesToString(granterAddr)
require.NoError(t, err)
granteeStr, err := ac.BytesToString(granteeAddr)
require.NoError(t, err)
grant, err := feegrant.NewGrant(granterStr, granteeStr, &feegrant.BasicAllowance{
SpendLimit: sdk.NewCoins(sdk.NewCoin("foo", sdkmath.NewInt(100))),
})

View File

@ -18,12 +18,12 @@ func genFeeGrants(r *rand.Rand, accounts []simtypes.Account) []feegrant.Grant {
for i := 0; i < len(accounts)-1; i++ {
granter := accounts[i].Address
grantee := accounts[i+1].Address
allowances[i] = generateRandomAllowances(granter, grantee, r)
allowances[i] = generateRandomAllowances(granter.String(), grantee.String(), r) // TODO decouple this from call .String()
}
return allowances
}
func generateRandomAllowances(granter, grantee sdk.AccAddress, r *rand.Rand) feegrant.Grant {
func generateRandomAllowances(granter, grantee string, r *rand.Rand) feegrant.Grant {
allowances := make([]feegrant.Grant, 3)
spendLimit := sdk.NewCoins(sdk.NewCoin("stake", math.NewInt(100)))
periodSpendLimit := sdk.NewCoins(sdk.NewCoin("stake", math.NewInt(10)))

View File

@ -83,7 +83,16 @@ func SimulateMsgGrantAllowance(
) (simtypes.OperationMsg, []simtypes.FutureOperation, error) {
granter, _ := simtypes.RandomAcc(r, accs)
grantee, _ := simtypes.RandomAcc(r, accs)
if grantee.Address.String() == granter.Address.String() {
granterStr, err := ak.AddressCodec().BytesToString(granter.Address)
if err != nil {
return simtypes.OperationMsg{}, nil, err
}
granteeStr, err := ak.AddressCodec().BytesToString(grantee.Address)
if err != nil {
return simtypes.OperationMsg{}, nil, err
}
if granteeStr == granterStr {
return simtypes.NoOpMsg(feegrant.ModuleName, TypeMsgGrantAllowance, "grantee and granter cannot be same"), nil, nil
}
@ -102,7 +111,7 @@ func SimulateMsgGrantAllowance(
msg, err := feegrant.NewMsgGrantAllowance(&feegrant.BasicAllowance{
SpendLimit: spendableCoins,
Expiration: &oneYear,
}, granter.Address, grantee.Address)
}, granterStr, granteeStr)
if err != nil {
return simtypes.NoOpMsg(feegrant.ModuleName, TypeMsgGrantAllowance, err.Error()), nil, err
}
@ -171,7 +180,15 @@ func SimulateMsgRevokeAllowance(
account := ak.GetAccount(ctx, granter.Address)
spendableCoins := bk.SpendableCoins(ctx, account.GetAddress())
msg := feegrant.NewMsgRevokeAllowance(granterAddr, granteeAddr)
granterStr, err := ak.AddressCodec().BytesToString(granterAddr)
if err != nil {
return simtypes.NoOpMsg(feegrant.ModuleName, TypeMsgRevokeAllowance, err.Error()), nil, err
}
granteeStr, err := ak.AddressCodec().BytesToString(granteeAddr)
if err != nil {
return simtypes.NoOpMsg(feegrant.ModuleName, TypeMsgRevokeAllowance, err.Error()), nil, err
}
msg := feegrant.NewMsgRevokeAllowance(granterStr, granteeStr)
txCtx := simulation.OperationInput{
R: r,

View File

@ -147,9 +147,13 @@ func (suite *SimTestSuite) TestSimulateMsgGrantAllowance() {
s := rand.NewSource(1)
r := rand.New(s)
accounts := suite.getTestingAccounts(r, 3)
addr1, err := suite.accountKeeper.AddressCodec().BytesToString(accounts[1].Address)
require.NoError(err)
addr2, err := suite.accountKeeper.AddressCodec().BytesToString(accounts[2].Address)
require.NoError(err)
// new block
_, err := app.FinalizeBlock(&abci.RequestFinalizeBlock{Height: app.LastBlockHeight() + 1})
_, err = app.FinalizeBlock(&abci.RequestFinalizeBlock{Height: app.LastBlockHeight() + 1})
require.NoError(err)
// execute operation
@ -161,8 +165,8 @@ func (suite *SimTestSuite) TestSimulateMsgGrantAllowance() {
err = proto.Unmarshal(operationMsg.Msg, &msg)
require.NoError(err)
require.True(operationMsg.OK)
require.Equal(accounts[2].Address.String(), msg.Granter)
require.Equal(accounts[1].Address.String(), msg.Grantee)
require.Equal(addr2, msg.Granter)
require.Equal(addr1, msg.Grantee)
require.Len(futureOperations, 0)
}
@ -194,6 +198,11 @@ func (suite *SimTestSuite) TestSimulateMsgRevokeAllowance() {
)
require.NoError(err)
granterStr, err := suite.accountKeeper.AddressCodec().BytesToString(accounts[0].Address)
require.NoError(err)
granteeStr, err := suite.accountKeeper.AddressCodec().BytesToString(accounts[1].Address)
require.NoError(err)
// execute operation
op := simulation.SimulateMsgRevokeAllowance(codec.NewProtoCodec(suite.interfaceRegistry), suite.txConfig, suite.accountKeeper, suite.bankKeeper, suite.feegrantKeeper, codecaddress.NewBech32Codec("cosmos"))
operationMsg, futureOperations, err := op(r, app.BaseApp, ctx, accounts, "")
@ -203,8 +212,8 @@ func (suite *SimTestSuite) TestSimulateMsgRevokeAllowance() {
err = proto.Unmarshal(operationMsg.Msg, &msg)
require.NoError(err)
require.True(operationMsg.OK)
require.Equal(granter.Address.String(), msg.Granter)
require.Equal(grantee.Address.String(), msg.Grantee)
require.Equal(granterStr, msg.Granter)
require.Equal(granteeStr, msg.Grantee)
require.Len(futureOperations, 0)
}