Move x/feegrant/types to x/feegrant (#9273)

* Move x/feegrant/types to x/feegrant

* Update spec

* Use feegrantmodule
This commit is contained in:
Marie Gauthier 2021-05-07 09:10:47 +02:00 committed by GitHub
parent 59810f3286
commit 3582ccef7c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
53 changed files with 535 additions and 543 deletions

View File

@ -8,7 +8,7 @@ import "cosmos/base/v1beta1/coin.proto";
import "google/protobuf/timestamp.proto";
import "google/protobuf/duration.proto";
option go_package = "github.com/cosmos/cosmos-sdk/x/feegrant/types";
option go_package = "github.com/cosmos/cosmos-sdk/x/feegrant";
// BasicAllowance implements Allowance with a one-time grant of tokens
// that optionally expires. The grantee can use up to SpendLimit to cover fees.

View File

@ -4,7 +4,7 @@ package cosmos.feegrant.v1beta1;
import "gogoproto/gogo.proto";
import "cosmos/feegrant/v1beta1/feegrant.proto";
option go_package = "github.com/cosmos/cosmos-sdk/x/feegrant/types";
option go_package = "github.com/cosmos/cosmos-sdk/x/feegrant";
// GenesisState contains a set of fee allowances, persisted from the store
message GenesisState {

View File

@ -5,7 +5,7 @@ import "cosmos/feegrant/v1beta1/feegrant.proto";
import "cosmos/base/query/v1beta1/pagination.proto";
import "google/api/annotations.proto";
option go_package = "github.com/cosmos/cosmos-sdk/x/feegrant/types";
option go_package = "github.com/cosmos/cosmos-sdk/x/feegrant";
// Query defines the gRPC querier service.
service Query {

View File

@ -5,7 +5,7 @@ import "gogoproto/gogo.proto";
import "google/protobuf/any.proto";
import "cosmos_proto/cosmos.proto";
option go_package = "github.com/cosmos/cosmos-sdk/x/feegrant/types";
option go_package = "github.com/cosmos/cosmos-sdk/x/feegrant";
// Msg defines the feegrant msg service.
service Msg {

View File

@ -58,9 +58,9 @@ import (
"github.com/cosmos/cosmos-sdk/x/evidence"
evidencekeeper "github.com/cosmos/cosmos-sdk/x/evidence/keeper"
evidencetypes "github.com/cosmos/cosmos-sdk/x/evidence/types"
feegrant "github.com/cosmos/cosmos-sdk/x/feegrant"
"github.com/cosmos/cosmos-sdk/x/feegrant"
feegrantkeeper "github.com/cosmos/cosmos-sdk/x/feegrant/keeper"
feegranttypes "github.com/cosmos/cosmos-sdk/x/feegrant/types"
feegrantmodule "github.com/cosmos/cosmos-sdk/x/feegrant/module"
"github.com/cosmos/cosmos-sdk/x/genutil"
genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types"
"github.com/cosmos/cosmos-sdk/x/gov"
@ -112,7 +112,7 @@ var (
params.AppModuleBasic{},
crisis.AppModuleBasic{},
slashing.AppModuleBasic{},
feegrant.AppModuleBasic{},
feegrantmodule.AppModuleBasic{},
upgrade.AppModuleBasic{},
evidence.AppModuleBasic{},
authz_m.AppModuleBasic{},
@ -205,7 +205,7 @@ func NewSimApp(
keys := sdk.NewKVStoreKeys(
authtypes.StoreKey, banktypes.StoreKey, stakingtypes.StoreKey,
minttypes.StoreKey, distrtypes.StoreKey, slashingtypes.StoreKey,
govtypes.StoreKey, paramstypes.StoreKey, upgradetypes.StoreKey, feegranttypes.StoreKey,
govtypes.StoreKey, paramstypes.StoreKey, upgradetypes.StoreKey, feegrant.StoreKey,
evidencetypes.StoreKey, capabilitytypes.StoreKey,
authzkeeper.StoreKey,
)
@ -255,7 +255,7 @@ func NewSimApp(
app.GetSubspace(crisistypes.ModuleName), invCheckPeriod, app.BankKeeper, authtypes.FeeCollectorName,
)
app.FeeGrantKeeper = feegrantkeeper.NewKeeper(appCodec, keys[feegranttypes.StoreKey], app.AccountKeeper)
app.FeeGrantKeeper = feegrantkeeper.NewKeeper(appCodec, keys[feegrant.StoreKey], app.AccountKeeper)
app.UpgradeKeeper = upgradekeeper.NewKeeper(skipUpgradeHeights, keys[upgradetypes.StoreKey], appCodec, homePath, app.BaseApp)
// register the staking hooks
@ -308,7 +308,7 @@ func NewSimApp(
bank.NewAppModule(appCodec, app.BankKeeper, app.AccountKeeper),
capability.NewAppModule(appCodec, *app.CapabilityKeeper),
crisis.NewAppModule(&app.CrisisKeeper, skipGenesisInvariants),
feegrant.NewAppModule(appCodec, app.AccountKeeper, app.BankKeeper, app.FeeGrantKeeper, app.interfaceRegistry),
feegrantmodule.NewAppModule(appCodec, app.AccountKeeper, app.BankKeeper, app.FeeGrantKeeper, app.interfaceRegistry),
gov.NewAppModule(appCodec, app.GovKeeper, app.AccountKeeper, app.BankKeeper),
mint.NewAppModule(appCodec, app.MintKeeper, app.AccountKeeper),
slashing.NewAppModule(appCodec, app.SlashingKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper),
@ -339,7 +339,7 @@ func NewSimApp(
capabilitytypes.ModuleName, authtypes.ModuleName, banktypes.ModuleName, distrtypes.ModuleName, stakingtypes.ModuleName,
slashingtypes.ModuleName, govtypes.ModuleName, minttypes.ModuleName, crisistypes.ModuleName,
genutiltypes.ModuleName, evidencetypes.ModuleName, authz.ModuleName,
feegranttypes.ModuleName,
feegrant.ModuleName,
)
app.mm.RegisterInvariants(&app.CrisisKeeper)
@ -358,7 +358,7 @@ func NewSimApp(
auth.NewAppModule(appCodec, app.AccountKeeper, authsims.RandomGenesisAccounts),
bank.NewAppModule(appCodec, app.BankKeeper, app.AccountKeeper),
capability.NewAppModule(appCodec, *app.CapabilityKeeper),
feegrant.NewAppModule(appCodec, app.AccountKeeper, app.BankKeeper, app.FeeGrantKeeper, app.interfaceRegistry),
feegrantmodule.NewAppModule(appCodec, app.AccountKeeper, app.BankKeeper, app.FeeGrantKeeper, app.interfaceRegistry),
gov.NewAppModule(appCodec, app.GovKeeper, app.AccountKeeper, app.BankKeeper),
mint.NewAppModule(appCodec, app.MintKeeper, app.AccountKeeper),
staking.NewAppModule(appCodec, app.StakingKeeper, app.AccountKeeper, app.BankKeeper),

View File

@ -25,7 +25,7 @@ import (
"github.com/cosmos/cosmos-sdk/x/crisis"
"github.com/cosmos/cosmos-sdk/x/distribution"
"github.com/cosmos/cosmos-sdk/x/evidence"
feegrant "github.com/cosmos/cosmos-sdk/x/feegrant"
feegrantmodule "github.com/cosmos/cosmos-sdk/x/feegrant/module"
"github.com/cosmos/cosmos-sdk/x/genutil"
"github.com/cosmos/cosmos-sdk/x/gov"
"github.com/cosmos/cosmos-sdk/x/mint"
@ -177,7 +177,7 @@ func TestRunMigrations(t *testing.T) {
"params": params.AppModule{}.ConsensusVersion(),
"upgrade": upgrade.AppModule{}.ConsensusVersion(),
"vesting": vesting.AppModule{}.ConsensusVersion(),
"feegrant": feegrant.AppModule{}.ConsensusVersion(),
"feegrant": feegrantmodule.AppModule{}.ConsensusVersion(),
"evidence": evidence.AppModule{}.ConsensusVersion(),
"crisis": crisis.AppModule{}.ConsensusVersion(),
"genutil": genutil.AppModule{}.ConsensusVersion(),
@ -228,7 +228,7 @@ func TestInitGenesisOnMigration(t *testing.T) {
"params": params.AppModule{}.ConsensusVersion(),
"upgrade": upgrade.AppModule{}.ConsensusVersion(),
"vesting": vesting.AppModule{}.ConsensusVersion(),
"feegrant": feegrant.AppModule{}.ConsensusVersion(),
"feegrant": feegrantmodule.AppModule{}.ConsensusVersion(),
"evidence": evidence.AppModule{}.ConsensusVersion(),
"crisis": crisis.AppModule{}.ConsensusVersion(),
"genutil": genutil.AppModule{}.ConsensusVersion(),

View File

@ -23,6 +23,6 @@ const (
DefaultWeightParamChangeProposal int = 5
// feegrant
DefaultWeightGrantFeeAllowance int = 100
DefaultWeightRevokeFeeAllowance int = 100
DefaultWeightGrantAllowance int = 100
DefaultWeightRevokeAllowance int = 100
)

View File

@ -21,7 +21,7 @@ import (
authsign "github.com/cosmos/cosmos-sdk/x/auth/signing"
"github.com/cosmos/cosmos-sdk/x/auth/tx"
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
"github.com/cosmos/cosmos-sdk/x/feegrant/types"
"github.com/cosmos/cosmos-sdk/x/feegrant"
)
func (suite *AnteTestSuite) TestDeductFeesNoDelegation() {
@ -54,13 +54,13 @@ func (suite *AnteTestSuite) TestDeductFeesNoDelegation() {
suite.Require().NoError(err)
// grant fee allowance from `addr2` to `addr3` (plenty to pay)
err = app.FeeGrantKeeper.GrantAllowance(ctx, addr2, addr3, &types.BasicAllowance{
err = app.FeeGrantKeeper.GrantAllowance(ctx, addr2, addr3, &feegrant.BasicAllowance{
SpendLimit: sdk.NewCoins(sdk.NewInt64Coin("atom", 500)),
})
suite.Require().NoError(err)
// grant low fee allowance (20atom), to check the tx requesting more than allowed.
err = app.FeeGrantKeeper.GrantAllowance(ctx, addr2, addr4, &types.BasicAllowance{
err = app.FeeGrantKeeper.GrantAllowance(ctx, addr2, addr4, &feegrant.BasicAllowance{
SpendLimit: sdk.NewCoins(sdk.NewInt64Coin("atom", 20)),
})
suite.Require().NoError(err)

View File

@ -1,4 +1,4 @@
package types
package feegrant
import (
sdk "github.com/cosmos/cosmos-sdk/types"
@ -16,7 +16,7 @@ var _ FeeAllowanceI = (*BasicAllowance)(nil)
// and will be saved again after an acceptance.
//
// If remove is true (regardless of the error), the FeeAllowance will be deleted from storage
// (eg. when it is used up). (See call to RevokeFeeAllowance in Keeper.UseGrantedFees)
// (eg. when it is used up). (See call to RevokeAllowance in Keeper.UseGrantedFees)
func (a *BasicAllowance) Accept(ctx sdk.Context, fee sdk.Coins, _ []sdk.Msg) (bool, error) {
if a.Expiration != nil && a.Expiration.Before(ctx.BlockTime()) {
return true, sdkerrors.Wrap(ErrFeeLimitExpired, "basic allowance")

View File

@ -1,4 +1,4 @@
package types_test
package feegrant_test
import (
"testing"
@ -10,7 +10,7 @@ import (
"github.com/cosmos/cosmos-sdk/simapp"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/x/feegrant/types"
"github.com/cosmos/cosmos-sdk/x/feegrant"
)
func TestBasicFeeValidAllow(t *testing.T) {
@ -18,7 +18,7 @@ func TestBasicFeeValidAllow(t *testing.T) {
ctx := app.BaseApp.NewContext(false, tmproto.Header{})
badTime := ctx.BlockTime().AddDate(0, 0, -1)
allowace := &types.BasicAllowance{
allowace := &feegrant.BasicAllowance{
Expiration: &badTime,
}
require.Error(t, allowace.ValidateBasic())
@ -35,7 +35,7 @@ func TestBasicFeeValidAllow(t *testing.T) {
oneHour := now.Add(1 * time.Hour)
cases := map[string]struct {
allowance *types.BasicAllowance
allowance *feegrant.BasicAllowance
// all other checks are ignored if valid=false
fee sdk.Coins
blockTime time.Time
@ -45,11 +45,11 @@ func TestBasicFeeValidAllow(t *testing.T) {
remains sdk.Coins
}{
"empty": {
allowance: &types.BasicAllowance{},
allowance: &feegrant.BasicAllowance{},
accept: true,
},
"small fee without expire": {
allowance: &types.BasicAllowance{
allowance: &feegrant.BasicAllowance{
SpendLimit: atom,
},
fee: smallAtom,
@ -58,7 +58,7 @@ func TestBasicFeeValidAllow(t *testing.T) {
remains: leftAtom,
},
"all fee without expire": {
allowance: &types.BasicAllowance{
allowance: &feegrant.BasicAllowance{
SpendLimit: smallAtom,
},
fee: smallAtom,
@ -66,14 +66,14 @@ func TestBasicFeeValidAllow(t *testing.T) {
remove: true,
},
"wrong fee": {
allowance: &types.BasicAllowance{
allowance: &feegrant.BasicAllowance{
SpendLimit: smallAtom,
},
fee: eth,
accept: false,
},
"non-expired": {
allowance: &types.BasicAllowance{
allowance: &feegrant.BasicAllowance{
SpendLimit: atom,
Expiration: &oneHour,
},
@ -85,7 +85,7 @@ func TestBasicFeeValidAllow(t *testing.T) {
remains: leftAtom,
},
"expired": {
allowance: &types.BasicAllowance{
allowance: &feegrant.BasicAllowance{
SpendLimit: atom,
Expiration: &now,
},
@ -96,7 +96,7 @@ func TestBasicFeeValidAllow(t *testing.T) {
remove: true,
},
"fee more than allowed": {
allowance: &types.BasicAllowance{
allowance: &feegrant.BasicAllowance{
SpendLimit: atom,
Expiration: &oneHour,
},
@ -106,7 +106,7 @@ func TestBasicFeeValidAllow(t *testing.T) {
accept: false,
},
"with out spend limit": {
allowance: &types.BasicAllowance{
allowance: &feegrant.BasicAllowance{
Expiration: &oneHour,
},
valid: true,
@ -115,7 +115,7 @@ func TestBasicFeeValidAllow(t *testing.T) {
accept: true,
},
"expired no spend limit": {
allowance: &types.BasicAllowance{
allowance: &feegrant.BasicAllowance{
Expiration: &now,
},
valid: true,

View File

@ -10,13 +10,13 @@ import (
"github.com/cosmos/cosmos-sdk/client/flags"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/version"
"github.com/cosmos/cosmos-sdk/x/feegrant/types"
"github.com/cosmos/cosmos-sdk/x/feegrant"
)
// GetQueryCmd returns the cli query commands for this module
func GetQueryCmd() *cobra.Command {
feegrantQueryCmd := &cobra.Command{
Use: types.ModuleName,
Use: feegrant.ModuleName,
Short: "Querying commands for the feegrant module",
DisableFlagParsing: true,
SuggestionsMinimumDistance: 2,
@ -47,7 +47,7 @@ $ %s query feegrant grant [granter] [grantee]
),
RunE: func(cmd *cobra.Command, args []string) error {
clientCtx := client.GetClientContextFromCmd(cmd)
queryClient := types.NewQueryClient(clientCtx)
queryClient := feegrant.NewQueryClient(clientCtx)
granterAddr, err := sdk.AccAddressFromBech32(args[0])
if err != nil {
@ -61,7 +61,7 @@ $ %s query feegrant grant [granter] [grantee]
res, err := queryClient.Allowance(
cmd.Context(),
&types.QueryAllowanceRequest{
&feegrant.QueryAllowanceRequest{
Granter: granterAddr.String(),
Grantee: granteeAddr.String(),
},
@ -95,7 +95,7 @@ $ %s query feegrant grants [grantee]
),
RunE: func(cmd *cobra.Command, args []string) error {
clientCtx := client.GetClientContextFromCmd(cmd)
queryClient := types.NewQueryClient(clientCtx)
queryClient := feegrant.NewQueryClient(clientCtx)
granteeAddr, err := sdk.AccAddressFromBech32(args[0])
if err != nil {
@ -109,7 +109,7 @@ $ %s query feegrant grants [grantee]
res, err := queryClient.Allowances(
cmd.Context(),
&types.QueryAllowancesRequest{
&feegrant.QueryAllowancesRequest{
Grantee: granteeAddr.String(),
Pagination: pageReq,
},

View File

@ -13,7 +13,7 @@ import (
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/msgservice"
"github.com/cosmos/cosmos-sdk/version"
"github.com/cosmos/cosmos-sdk/x/feegrant/types"
"github.com/cosmos/cosmos-sdk/x/feegrant"
)
// flag for feegrant module
@ -28,7 +28,7 @@ const (
// GetTxCmd returns the transaction commands for this module
func GetTxCmd() *cobra.Command {
feegrantTxCmd := &cobra.Command{
Use: types.ModuleName,
Use: feegrant.ModuleName,
Short: "Feegrant transactions subcommands",
Long: "Grant and revoke fee allowance for a grantee by a granter",
DisableFlagParsing: true,
@ -44,7 +44,7 @@ func GetTxCmd() *cobra.Command {
return feegrantTxCmd
}
// NewCmdFeeGrant returns a CLI command handler for creating a MsgGrantFeeAllowance transaction.
// NewCmdFeeGrant returns a CLI command handler for creating a MsgGrantAllowance transaction.
func NewCmdFeeGrant() *cobra.Command {
cmd := &cobra.Command{
Use: "grant [granter] [grantee]",
@ -59,7 +59,7 @@ Examples:
%s tx %s grant cosmos1skjw... cosmos1skjw... --spend-limit 100stake --period 3600 --period-limit 10stake --expiration 36000 or
%s tx %s grant cosmos1skjw... cosmos1skjw... --spend-limit 100stake --expiration 2022-01-30T15:04:05Z
--allowed-messages "/cosmos.gov.v1beta1.MsgSubmitProposal,/cosmos.gov.v1beta1.MsgVote"
`, version.AppName, types.ModuleName, version.AppName, types.ModuleName, version.AppName, types.ModuleName,
`, version.AppName, feegrant.ModuleName, version.AppName, feegrant.ModuleName, version.AppName, feegrant.ModuleName,
),
),
Args: cobra.ExactArgs(2),
@ -97,7 +97,7 @@ Examples:
return err
}
basic := types.BasicAllowance{
basic := feegrant.BasicAllowance{
SpendLimit: limit,
}
@ -110,7 +110,7 @@ Examples:
basic.Expiration = &expiresAtTime
}
var grant types.FeeAllowanceI
var grant feegrant.FeeAllowanceI
grant = &basic
periodClock, err := cmd.Flags().GetInt64(FlagPeriod)
@ -136,7 +136,7 @@ Examples:
return fmt.Errorf("period(%d) cannot reset after expiration(%v)", periodClock, exp)
}
periodic := types.PeriodicAllowance{
periodic := feegrant.PeriodicAllowance{
Basic: basic,
Period: getPeriod(periodClock),
PeriodReset: getPeriodReset(periodClock),
@ -157,19 +157,19 @@ Examples:
}
if len(allowedMsgs) > 0 {
grant, err = types.NewAllowedMsgAllowance(grant, allowedMsgs)
grant, err = feegrant.NewAllowedMsgAllowance(grant, allowedMsgs)
if err != nil {
return err
}
}
msg, err := types.NewMsgGrantAllowance(grant, granter, grantee)
msg, err := feegrant.NewMsgGrantAllowance(grant, granter, grantee)
if err != nil {
return err
}
svcMsgClientConn := &msgservice.ServiceMsgClientConn{}
msgClient := types.NewMsgClient(svcMsgClientConn)
msgClient := feegrant.NewMsgClient(svcMsgClientConn)
_, err = msgClient.GrantAllowance(cmd.Context(), msg)
if err != nil {
return err
@ -189,7 +189,7 @@ Examples:
return cmd
}
// NewCmdRevokeFeegrant returns a CLI command handler for creating a MsgRevokeFeeAllowance transaction.
// NewCmdRevokeFeegrant returns a CLI command handler for creating a MsgRevokeAllowance transaction.
func NewCmdRevokeFeegrant() *cobra.Command {
cmd := &cobra.Command{
Use: "revoke [granter] [grantee]",
@ -200,7 +200,7 @@ func NewCmdRevokeFeegrant() *cobra.Command {
Example:
$ %s tx %s revoke cosmos1skj.. cosmos1skj..
`, version.AppName, types.ModuleName),
`, version.AppName, feegrant.ModuleName),
),
Args: cobra.ExactArgs(2),
RunE: func(cmd *cobra.Command, args []string) error {
@ -215,9 +215,9 @@ Example:
return err
}
msg := types.NewMsgRevokeAllowance(clientCtx.GetFromAddress(), grantee)
msg := feegrant.NewMsgRevokeAllowance(clientCtx.GetFromAddress(), grantee)
svcMsgClientConn := &msgservice.ServiceMsgClientConn{}
msgClient := types.NewMsgClient(svcMsgClientConn)
msgClient := feegrant.NewMsgClient(svcMsgClientConn)
_, err = msgClient.RevokeAllowance(cmd.Context(), &msg)
if err != nil {
return err

View File

@ -17,8 +17,8 @@ import (
clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli"
"github.com/cosmos/cosmos-sdk/testutil/network"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/x/feegrant"
"github.com/cosmos/cosmos-sdk/x/feegrant/client/cli"
"github.com/cosmos/cosmos-sdk/x/feegrant/types"
govtestutil "github.com/cosmos/cosmos-sdk/x/gov/client/testutil"
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
)
@ -36,7 +36,7 @@ type IntegrationTestSuite struct {
network *network.Network
addedGranter sdk.AccAddress
addedGrantee sdk.AccAddress
addedGrant types.Grant
addedGrant feegrant.Grant
}
func NewIntegrationTestSuite(cfg network.Config) *IntegrationTestSuite {
@ -89,7 +89,7 @@ func (s *IntegrationTestSuite) SetupSuite() {
s.addedGranter = granter
s.addedGrantee = grantee
grant, err := types.NewGrant(granter, grantee, &types.BasicAllowance{
grant, err := feegrant.NewGrant(granter, grantee, &feegrant.BasicAllowance{
SpendLimit: sdk.NewCoins(fee),
})
s.Require().NoError(err)
@ -113,8 +113,8 @@ func (s *IntegrationTestSuite) TestCmdGetFeeGrant() {
args []string
expectErrMsg string
expectErr bool
respType *types.Grant
resp *types.Grant
respType *feegrant.Grant
resp *feegrant.Grant
}{
{
"wrong granter",
@ -155,7 +155,7 @@ func (s *IntegrationTestSuite) TestCmdGetFeeGrant() {
},
"",
false,
&types.Grant{},
&feegrant.Grant{},
&s.addedGrant,
},
}
@ -180,8 +180,8 @@ func (s *IntegrationTestSuite) TestCmdGetFeeGrant() {
grant1, err1 := tc.resp.GetGrant()
s.Require().NoError(err1)
s.Require().Equal(
grant.(*types.BasicAllowance).SpendLimit,
grant1.(*types.BasicAllowance).SpendLimit,
grant.(*feegrant.BasicAllowance).SpendLimit,
grant1.(*feegrant.BasicAllowance).SpendLimit,
)
}
})
@ -197,7 +197,7 @@ func (s *IntegrationTestSuite) TestCmdGetFeeGrants() {
name string
args []string
expectErr bool
resp *types.QueryAllowancesResponse
resp *feegrant.QueryAllowancesResponse
expectLength int
}{
{
@ -214,7 +214,7 @@ func (s *IntegrationTestSuite) TestCmdGetFeeGrants() {
"cosmos1nph3cfzk6trsmfxkeu943nvach5qw4vwstnvkl",
fmt.Sprintf("--%s=json", tmcli.OutputFlag),
},
false, &types.QueryAllowancesResponse{}, 0,
false, &feegrant.QueryAllowancesResponse{}, 0,
},
{
"valid req",
@ -222,7 +222,7 @@ func (s *IntegrationTestSuite) TestCmdGetFeeGrants() {
grantee.String(),
fmt.Sprintf("--%s=json", tmcli.OutputFlag),
},
false, &types.QueryAllowancesResponse{}, 1,
false, &feegrant.QueryAllowancesResponse{}, 1,
},
}
@ -733,7 +733,7 @@ func (s *IntegrationTestSuite) TestFilteredFeeAllowance() {
out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, args)
s.Require().NoError(err)
resp := &types.Grant{}
resp := &feegrant.Grant{}
s.Require().NoError(clientCtx.JSONCodec.UnmarshalJSON(out.Bytes(), resp), out.String())
s.Require().Equal(resp.Grantee, resp.Grantee)
@ -742,11 +742,11 @@ func (s *IntegrationTestSuite) TestFilteredFeeAllowance() {
grant, err := resp.GetGrant()
s.Require().NoError(err)
filteredFeeGrant, err := grant.(*types.AllowedMsgAllowance).GetAllowance()
filteredFeeGrant, err := grant.(*feegrant.AllowedMsgAllowance).GetAllowance()
s.Require().NoError(err)
s.Require().Equal(
filteredFeeGrant.(*types.BasicAllowance).SpendLimit.String(),
filteredFeeGrant.(*feegrant.BasicAllowance).SpendLimit.String(),
spendLimit.String(),
)

View File

@ -1,4 +1,4 @@
package types
package feegrant
import (
"github.com/cosmos/cosmos-sdk/codec/types"

View File

@ -10,7 +10,7 @@ provides ways for specifying fee allowances such that authorizing fee payment to
another account can be done with clear and safe restrictions.
A user would authorize granting fee payment to another user using
MsgDelegateFeeAllowance and revoke that delegation using MsgRevokeFeeAllowance.
MsgGrantAllowance and revoke that delegation using MsgRevokeAllowance.
In both cases, Granter is the one who is authorizing fee payment and Grantee is
the one who is receiving the fee payment authorization. So grantee would correspond
to the one who is signing a transaction and the granter would be the address that
@ -18,6 +18,6 @@ pays the fees.
The fee allowance that a grantee receives is specified by an implementation of
the FeeAllowance interface. Two FeeAllowance implementations are provided in
this package: BasicFeeAllowance and PeriodicFeeAllowance.
this package: BasicAllowance and PeriodicAllowance.
*/
package feegrant

View File

@ -1,4 +1,4 @@
package types
package feegrant
import (
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"

View File

@ -1,4 +1,4 @@
package types
package feegrant
// evidence module events
const (

View File

@ -1,4 +1,4 @@
package types
package feegrant
import (
sdk "github.com/cosmos/cosmos-sdk/types"

View File

@ -1,7 +1,7 @@
// Code generated by protoc-gen-gogo. DO NOT EDIT.
// source: cosmos/feegrant/v1beta1/feegrant.proto
package types
package feegrant
import (
fmt "fmt"
@ -294,43 +294,43 @@ func init() {
}
var fileDescriptor_7279582900c30aea = []byte{
// 564 bytes of a gzipped FileDescriptorProto
// 562 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0x3f, 0x6f, 0xd3, 0x40,
0x14, 0x8f, 0x9b, 0xa4, 0x90, 0x0b, 0x94, 0xc6, 0x14, 0xe1, 0x64, 0x70, 0xa2, 0x0e, 0x10, 0x86,
0x9c, 0x69, 0xd9, 0xca, 0x42, 0x1d, 0x20, 0x42, 0xa2, 0x12, 0x32, 0x4c, 0x2c, 0xd1, 0xd9, 0x79,
0x35, 0x27, 0x62, 0x9f, 0xe5, 0xbb, 0x40, 0xb3, 0x32, 0x31, 0x76, 0x64, 0x42, 0xcc, 0xcc, 0x7c,
0x88, 0x8a, 0xa9, 0x82, 0x85, 0x89, 0xa2, 0xe4, 0x8b, 0x20, 0xdf, 0x9d, 0x93, 0x90, 0xf0, 0x47,
0x42, 0x9d, 0xe2, 0xbb, 0xf7, 0x7e, 0xff, 0xde, 0x3b, 0x05, 0xdd, 0x08, 0x18, 0x8f, 0x18, 0x77,
0x0e, 0x01, 0xc2, 0x94, 0xc4, 0xc2, 0x79, 0xb5, 0xe3, 0x83, 0x20, 0x3b, 0xb3, 0x0b, 0x9c, 0xa4,
0x4c, 0x30, 0xf3, 0xba, 0xea, 0xc3, 0xb3, 0x6b, 0xdd, 0xd7, 0xd8, 0x0a, 0x59, 0xc8, 0x64, 0x8f,
0x93, 0x7d, 0xa9, 0xf6, 0x46, 0x3d, 0x64, 0x2c, 0x1c, 0x82, 0x23, 0x4f, 0xfe, 0xe8, 0xd0, 0x21,
0xf1, 0x38, 0x2f, 0x29, 0xa6, 0xbe, 0xc2, 0x68, 0x5a, 0x55, 0xb2, 0xb5, 0x19, 0x9f, 0x70, 0x98,
0x19, 0x09, 0x18, 0x8d, 0x75, 0xbd, 0xb9, 0xcc, 0x2a, 0x68, 0x04, 0x5c, 0x90, 0x28, 0xc9, 0x09,
0x96, 0x1b, 0x06, 0xa3, 0x94, 0x08, 0xca, 0x34, 0xc1, 0xf6, 0x57, 0x03, 0x6d, 0xb8, 0x84, 0xd3,
0x60, 0x7f, 0x38, 0x64, 0xaf, 0x49, 0x1c, 0x80, 0x39, 0x44, 0x55, 0x9e, 0x40, 0x3c, 0xe8, 0x0f,
0x69, 0x44, 0x85, 0x65, 0xb4, 0x8a, 0xed, 0xea, 0x6e, 0x1d, 0x6b, 0x5f, 0x99, 0x93, 0x3c, 0x2a,
0xee, 0x32, 0x1a, 0xbb, 0xb7, 0x4f, 0xbe, 0x37, 0x0b, 0x1f, 0xcf, 0x9a, 0xed, 0x90, 0x8a, 0x17,
0x23, 0x1f, 0x07, 0x2c, 0xd2, 0x21, 0xf4, 0x4f, 0x87, 0x0f, 0x5e, 0x3a, 0x62, 0x9c, 0x00, 0x97,
0x00, 0xee, 0x21, 0xc9, 0xff, 0x38, 0xa3, 0x37, 0xef, 0x21, 0x04, 0x47, 0x09, 0x55, 0xa6, 0xac,
0xb5, 0x96, 0xd1, 0xae, 0xee, 0x36, 0xb0, 0x72, 0x8d, 0x73, 0xd7, 0xf8, 0x59, 0x1e, 0xcb, 0x2d,
0x1d, 0x9f, 0x35, 0x0d, 0x6f, 0x01, 0xb3, 0x57, 0xfb, 0xf2, 0xa9, 0x73, 0xf9, 0x21, 0xc0, 0x2c,
0xc1, 0xa3, 0xed, 0x69, 0x11, 0xd5, 0x9e, 0x40, 0x4a, 0xd9, 0x60, 0x31, 0x58, 0x17, 0x95, 0xfd,
0x2c, 0xaa, 0x65, 0x48, 0x95, 0x9b, 0xf8, 0x0f, 0x1b, 0xc4, 0xbf, 0x0e, 0xc4, 0x2d, 0x65, 0x01,
0x3d, 0x85, 0x35, 0xef, 0xa2, 0xf5, 0x44, 0x32, 0x6b, 0xaf, 0xf5, 0x15, 0xaf, 0xf7, 0xf5, 0x84,
0xdd, 0x8b, 0x19, 0xee, 0x5d, 0x66, 0x57, 0x43, 0xcc, 0x31, 0x32, 0xd5, 0x57, 0x7f, 0x71, 0xc2,
0xc5, 0xf3, 0x9f, 0xf0, 0xa6, 0x92, 0x79, 0x3a, 0x9f, 0xf3, 0x08, 0xe9, 0xbb, 0x7e, 0x40, 0x62,
0x25, 0x6f, 0x95, 0xce, 0x5f, 0x78, 0x43, 0x89, 0x74, 0x49, 0x2c, 0xb5, 0xcd, 0x1e, 0xba, 0xa4,
0x65, 0x53, 0xe0, 0x20, 0xac, 0xf2, 0x3f, 0x17, 0x2c, 0xa7, 0x26, 0x97, 0x5c, 0x55, 0x48, 0x2f,
0x03, 0xfe, 0x6e, 0xcb, 0xef, 0x0d, 0x74, 0x55, 0x1e, 0x61, 0x70, 0xc0, 0xc3, 0xf9, 0x9e, 0x1f,
0xa0, 0x0a, 0xc9, 0x0f, 0x7a, 0xd7, 0x5b, 0x2b, 0x82, 0xfb, 0xf1, 0xd8, 0xad, 0x7d, 0x5e, 0xe6,
0xf4, 0xe6, 0x48, 0xf3, 0x16, 0xda, 0x24, 0x8a, 0xbd, 0x1f, 0x01, 0xe7, 0x24, 0x04, 0x6e, 0xad,
0xb5, 0x8a, 0xed, 0x8a, 0x77, 0x45, 0xdf, 0x1f, 0xe8, 0xeb, 0xbd, 0x6b, 0x6f, 0x3f, 0x34, 0x0b,
0xab, 0x06, 0xdf, 0x18, 0xa8, 0xdc, 0xcb, 0x5e, 0x96, 0x69, 0xa1, 0x0b, 0xf2, 0x89, 0x41, 0x2a,
0x0d, 0x55, 0xbc, 0xfc, 0x38, 0xaf, 0x80, 0x7c, 0x50, 0xb3, 0xca, 0x52, 0x8c, 0xe2, 0xff, 0xc6,
0x70, 0x7b, 0x27, 0x13, 0xdb, 0x38, 0x9d, 0xd8, 0xc6, 0x8f, 0x89, 0x6d, 0x1c, 0x4f, 0xed, 0xc2,
0xe9, 0xd4, 0x2e, 0x7c, 0x9b, 0xda, 0x85, 0xe7, 0x9d, 0xbf, 0x6e, 0xf5, 0x68, 0xfe, 0x0f, 0x28,
0x17, 0xec, 0xaf, 0x4b, 0xd1, 0x3b, 0x3f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x34, 0xef, 0x7e, 0x35,
0x21, 0x05, 0x00, 0x00,
0x14, 0x8f, 0x9b, 0xa4, 0x90, 0x0b, 0x94, 0xc6, 0x14, 0xe1, 0x64, 0x70, 0xa2, 0x0e, 0x34, 0x0c,
0xb5, 0x69, 0xd9, 0xca, 0x42, 0x1c, 0xa0, 0x42, 0xa2, 0x12, 0x32, 0x4c, 0x2c, 0xd1, 0xd9, 0x79,
0x35, 0x27, 0x6c, 0x9f, 0xe5, 0xbb, 0x40, 0xb3, 0x32, 0x31, 0x76, 0x64, 0x42, 0xcc, 0xcc, 0x7c,
0x88, 0x8a, 0xa9, 0x82, 0x85, 0x89, 0xa2, 0xe4, 0x8b, 0x20, 0xdf, 0x9d, 0x9d, 0x90, 0xf0, 0x47,
0xaa, 0x3a, 0xc5, 0x77, 0xef, 0xfd, 0xfe, 0xbd, 0x77, 0x0a, 0xba, 0xe5, 0x53, 0x16, 0x51, 0x66,
0x1f, 0x02, 0x04, 0x29, 0x8e, 0xb9, 0xfd, 0x7a, 0xc7, 0x03, 0x8e, 0x77, 0x8a, 0x0b, 0x2b, 0x49,
0x29, 0xa7, 0xfa, 0x4d, 0xd9, 0x67, 0x15, 0xd7, 0xaa, 0xaf, 0xb5, 0x11, 0xd0, 0x80, 0x8a, 0x1e,
0x3b, 0xfb, 0x92, 0xed, 0xad, 0x66, 0x40, 0x69, 0x10, 0x82, 0x2d, 0x4e, 0xde, 0xe8, 0xd0, 0xc6,
0xf1, 0x38, 0x2f, 0x49, 0xa6, 0x81, 0xc4, 0x28, 0x5a, 0x59, 0x32, 0x95, 0x19, 0x0f, 0x33, 0x28,
0x8c, 0xf8, 0x94, 0xc4, 0xaa, 0xde, 0x5e, 0x64, 0xe5, 0x24, 0x02, 0xc6, 0x71, 0x94, 0xe4, 0x04,
0x8b, 0x0d, 0xc3, 0x51, 0x8a, 0x39, 0xa1, 0x8a, 0x60, 0xf3, 0x9b, 0x86, 0xd6, 0x1c, 0xcc, 0x88,
0xdf, 0x0b, 0x43, 0xfa, 0x06, 0xc7, 0x3e, 0xe8, 0x21, 0xaa, 0xb3, 0x04, 0xe2, 0xe1, 0x20, 0x24,
0x11, 0xe1, 0x86, 0xd6, 0x29, 0x77, 0xeb, 0xbb, 0x4d, 0x4b, 0xf9, 0xca, 0x9c, 0xe4, 0x51, 0xad,
0x3e, 0x25, 0xb1, 0x73, 0xe7, 0xe4, 0x47, 0xbb, 0xf4, 0xe9, 0xac, 0xdd, 0x0d, 0x08, 0x7f, 0x39,
0xf2, 0x2c, 0x9f, 0x46, 0x2a, 0x84, 0xfa, 0xd9, 0x66, 0xc3, 0x57, 0x36, 0x1f, 0x27, 0xc0, 0x04,
0x80, 0xb9, 0x48, 0xf0, 0x3f, 0xc9, 0xe8, 0xf5, 0xfb, 0x08, 0xc1, 0x51, 0x42, 0xa4, 0x29, 0x63,
0xa5, 0xa3, 0x75, 0xeb, 0xbb, 0x2d, 0x4b, 0xba, 0xb6, 0x72, 0xd7, 0xd6, 0xf3, 0x3c, 0x96, 0x53,
0x39, 0x3e, 0x6b, 0x6b, 0xee, 0x1c, 0x66, 0xaf, 0xf1, 0xf5, 0xf3, 0xf6, 0xd5, 0x47, 0x00, 0x45,
0x82, 0xc7, 0x9b, 0xd3, 0x32, 0x6a, 0x3c, 0x85, 0x94, 0xd0, 0xe1, 0x7c, 0xb0, 0x3e, 0xaa, 0x7a,
0x59, 0x54, 0x43, 0x13, 0x2a, 0x5b, 0xd6, 0x5f, 0x36, 0x68, 0xfd, 0x3e, 0x10, 0xa7, 0x92, 0x05,
0x74, 0x25, 0x56, 0xbf, 0x87, 0x56, 0x13, 0xc1, 0xac, 0xbc, 0x36, 0x97, 0xbc, 0x3e, 0x50, 0x13,
0x76, 0x2e, 0x67, 0xb8, 0xf7, 0x99, 0x5d, 0x05, 0xd1, 0xc7, 0x48, 0x97, 0x5f, 0x83, 0xf9, 0x09,
0x97, 0x2f, 0x7e, 0xc2, 0xeb, 0x52, 0xe6, 0xd9, 0x6c, 0xce, 0x23, 0xa4, 0xee, 0x06, 0x3e, 0x8e,
0xa5, 0xbc, 0x51, 0xb9, 0x78, 0xe1, 0x35, 0x29, 0xd2, 0xc7, 0xb1, 0xd0, 0xd6, 0xf7, 0xd1, 0x15,
0x25, 0x9b, 0x02, 0x03, 0x6e, 0x54, 0xff, 0xbb, 0x60, 0x31, 0x35, 0xb1, 0xe4, 0xba, 0x44, 0xba,
0x19, 0xf0, 0x4f, 0x5b, 0xfe, 0xa0, 0xa1, 0xeb, 0xe2, 0x08, 0xc3, 0x03, 0x16, 0xcc, 0xf6, 0xfc,
0x10, 0xd5, 0x70, 0x7e, 0x50, 0xbb, 0xde, 0x58, 0x12, 0xec, 0xc5, 0x63, 0xa7, 0xf1, 0x65, 0x91,
0xd3, 0x9d, 0x21, 0xf5, 0xdb, 0x68, 0x1d, 0x4b, 0xf6, 0x41, 0x04, 0x8c, 0xe1, 0x00, 0x98, 0xb1,
0xd2, 0x29, 0x77, 0x6b, 0xee, 0x35, 0x75, 0x7f, 0xa0, 0xae, 0xf7, 0x6e, 0xbc, 0xfb, 0xd8, 0x2e,
0x2d, 0x1b, 0x7c, 0xab, 0xa1, 0xea, 0x7e, 0xf6, 0xb2, 0x74, 0x03, 0x5d, 0x12, 0x4f, 0x0c, 0x52,
0x61, 0xa8, 0xe6, 0xe6, 0xc7, 0x59, 0x05, 0xc4, 0x83, 0x2a, 0x2a, 0x0b, 0x31, 0xca, 0xe7, 0x8d,
0xe1, 0xf4, 0x4e, 0x26, 0xa6, 0x76, 0x3a, 0x31, 0xb5, 0x9f, 0x13, 0x53, 0x3b, 0x9e, 0x9a, 0xa5,
0xd3, 0xa9, 0x59, 0xfa, 0x3e, 0x35, 0x4b, 0x2f, 0xb6, 0xfe, 0xb9, 0xd5, 0xa3, 0xe2, 0x0f, 0xcf,
0x5b, 0x15, 0x72, 0x77, 0x7f, 0x05, 0x00, 0x00, 0xff, 0xff, 0xd0, 0x08, 0x9a, 0x3d, 0x1b, 0x05,
0x00, 0x00,
}
func (m *BasicAllowance) Marshal() (dAtA []byte, err error) {

View File

@ -1,4 +1,4 @@
package types
package feegrant
import (
sdk "github.com/cosmos/cosmos-sdk/types"
@ -16,7 +16,7 @@ type FeeAllowanceI interface {
// and will be saved again after an acceptance.
//
// If remove is true (regardless of the error), the FeeAllowance will be deleted from storage
// (eg. when it is used up). (See call to RevokeFeeAllowance in Keeper.UseGrantedFees)
// (eg. when it is used up). (See call to RevokeAllowance in Keeper.UseGrantedFees)
Accept(ctx sdk.Context, fee sdk.Coins, msgs []sdk.Msg) (remove bool, err error)
// ValidateBasic should evaluate this FeeAllowance for internal consistency.

View File

@ -1,4 +1,4 @@
package types
package feegrant
import (
"github.com/cosmos/cosmos-sdk/codec/types"

View File

@ -1,29 +1,26 @@
package feegrant
import (
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/x/feegrant/keeper"
"github.com/cosmos/cosmos-sdk/x/feegrant/types"
"github.com/cosmos/cosmos-sdk/codec/types"
)
// InitGenesis will initialize the keeper from a *previously validated* GenesisState
func InitGenesis(ctx sdk.Context, k keeper.Keeper, data *types.GenesisState) error {
for _, f := range data.Allowances {
granter, err := sdk.AccAddressFromBech32(f.Granter)
if err != nil {
return err
}
grantee, err := sdk.AccAddressFromBech32(f.Grantee)
if err != nil {
return err
}
var _ types.UnpackInterfacesMessage = GenesisState{}
// NewGenesisState creates new GenesisState object
func NewGenesisState(entries []Grant) *GenesisState {
return &GenesisState{
Allowances: entries,
}
}
// ValidateGenesis ensures all grants in the genesis state are valid
func ValidateGenesis(data GenesisState) error {
for _, f := range data.Allowances {
grant, err := f.GetGrant()
if err != nil {
return err
}
err = k.GrantAllowance(ctx, granter, grantee, grant)
err = grant.ValidateBasic()
if err != nil {
return err
}
@ -31,16 +28,19 @@ func InitGenesis(ctx sdk.Context, k keeper.Keeper, data *types.GenesisState) err
return nil
}
// ExportGenesis will dump the contents of the keeper into a serializable GenesisState.
func ExportGenesis(ctx sdk.Context, k keeper.Keeper) (*types.GenesisState, error) {
var grants []types.Grant
err := k.IterateAllFeeAllowances(ctx, func(grant types.Grant) bool {
grants = append(grants, grant)
return false
})
return &types.GenesisState{
Allowances: grants,
}, err
// DefaultGenesisState returns default state for feegrant module.
func DefaultGenesisState() *GenesisState {
return &GenesisState{}
}
// UnpackInterfaces implements UnpackInterfacesMessage.UnpackInterfaces
func (data GenesisState) UnpackInterfaces(unpacker types.AnyUnpacker) error {
for _, f := range data.Allowances {
err := f.UnpackInterfaces(unpacker)
if err != nil {
return err
}
}
return nil
}

View File

@ -1,7 +1,7 @@
// Code generated by protoc-gen-gogo. DO NOT EDIT.
// source: cosmos/feegrant/v1beta1/genesis.proto
package types
package feegrant
import (
fmt "fmt"
@ -77,7 +77,7 @@ func init() {
}
var fileDescriptor_ac719d2d0954d1bf = []byte{
// 208 bytes of a gzipped FileDescriptorProto
// 203 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x4d, 0xce, 0x2f, 0xce,
0xcd, 0x2f, 0xd6, 0x4f, 0x4b, 0x4d, 0x4d, 0x2f, 0x4a, 0xcc, 0x2b, 0xd1, 0x2f, 0x33, 0x4c, 0x4a,
0x2d, 0x49, 0x34, 0xd4, 0x4f, 0x4f, 0xcd, 0x4b, 0x2d, 0xce, 0x2c, 0xd6, 0x2b, 0x28, 0xca, 0x2f,
@ -86,11 +86,11 @@ var fileDescriptor_ac719d2d0954d1bf = []byte{
0xa7, 0x14, 0xc2, 0xc5, 0xe3, 0x0e, 0xb1, 0x27, 0xb8, 0x24, 0xb1, 0x24, 0x55, 0xc8, 0x85, 0x8b,
0x2b, 0x31, 0x27, 0x27, 0xbf, 0x3c, 0x31, 0x2f, 0x39, 0xb5, 0x58, 0x82, 0x51, 0x81, 0x59, 0x83,
0xdb, 0x48, 0x4e, 0x0f, 0x87, 0xdd, 0x7a, 0xee, 0x20, 0x9e, 0x13, 0xcb, 0x89, 0x7b, 0xf2, 0x0c,
0x41, 0x48, 0xfa, 0x9c, 0xdc, 0x4f, 0x3c, 0x92, 0x63, 0xbc, 0xf0, 0x48, 0x8e, 0xf1, 0xc1, 0x23,
0x41, 0x48, 0xfa, 0x9c, 0x1c, 0x4f, 0x3c, 0x92, 0x63, 0xbc, 0xf0, 0x48, 0x8e, 0xf1, 0xc1, 0x23,
0x39, 0xc6, 0x09, 0x8f, 0xe5, 0x18, 0x2e, 0x3c, 0x96, 0x63, 0xb8, 0xf1, 0x58, 0x8e, 0x21, 0x4a,
0x37, 0x3d, 0xb3, 0x24, 0xa3, 0x34, 0x49, 0x2f, 0x39, 0x3f, 0x57, 0x1f, 0xea, 0x44, 0x08, 0xa5,
0x5b, 0x9c, 0x92, 0xad, 0x5f, 0x81, 0x70, 0x6f, 0x49, 0x65, 0x41, 0x6a, 0x71, 0x12, 0x1b, 0xd8,
0x95, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x8b, 0xe8, 0xa0, 0x07, 0x25, 0x01, 0x00, 0x00,
0x3d, 0x3d, 0xb3, 0x24, 0xa3, 0x34, 0x49, 0x2f, 0x39, 0x3f, 0x57, 0x1f, 0xea, 0x44, 0x08, 0xa5,
0x5b, 0x9c, 0x92, 0xad, 0x5f, 0x01, 0x77, 0x5e, 0x12, 0x1b, 0xd8, 0x7d, 0xc6, 0x80, 0x00, 0x00,
0x00, 0xff, 0xff, 0x3e, 0xdc, 0xb9, 0x91, 0x1f, 0x01, 0x00, 0x00,
}
func (m *GenesisState) Marshal() (dAtA []byte, err error) {

View File

@ -1,4 +1,4 @@
package types
package feegrant
import (
"github.com/gogo/protobuf/proto"

View File

@ -1,4 +1,4 @@
package types_test
package feegrant_test
import (
"testing"
@ -9,7 +9,7 @@ import (
"github.com/cosmos/cosmos-sdk/simapp"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/x/feegrant/types"
"github.com/cosmos/cosmos-sdk/x/feegrant"
)
func TestGrant(t *testing.T) {
@ -75,7 +75,7 @@ func TestGrant(t *testing.T) {
for name, tc := range cases {
tc := tc
t.Run(name, func(t *testing.T) {
grant, err := types.NewGrant(tc.granter, tc.grantee, &types.BasicAllowance{
grant, err := feegrant.NewGrant(tc.granter, tc.grantee, &feegrant.BasicAllowance{
SpendLimit: tc.limit,
Expiration: &tc.expires,
})
@ -91,7 +91,7 @@ func TestGrant(t *testing.T) {
// if it is valid, let's try to serialize, deserialize, and make sure it matches
bz, err := cdc.Marshal(&grant)
require.NoError(t, err)
var loaded types.Grant
var loaded feegrant.Grant
err = cdc.Unmarshal(bz, &loaded)
require.NoError(t, err)

View File

@ -1,4 +1,4 @@
package feegrant_test
package keeper_test
import (
"testing"
@ -11,9 +11,8 @@ import (
"github.com/cosmos/cosmos-sdk/simapp"
"github.com/cosmos/cosmos-sdk/testutil/testdata"
sdk "github.com/cosmos/cosmos-sdk/types"
feegrant "github.com/cosmos/cosmos-sdk/x/feegrant"
"github.com/cosmos/cosmos-sdk/x/feegrant"
"github.com/cosmos/cosmos-sdk/x/feegrant/keeper"
"github.com/cosmos/cosmos-sdk/x/feegrant/types"
)
type GenesisTestSuite struct {
@ -42,22 +41,22 @@ func (suite *GenesisTestSuite) TestImportExportGenesis() {
oneYear := now.AddDate(1, 0, 0)
msgSrvr := keeper.NewMsgServerImpl(suite.keeper)
allowance := &types.BasicAllowance{SpendLimit: coins, Expiration: &oneYear}
allowance := &feegrant.BasicAllowance{SpendLimit: coins, Expiration: &oneYear}
err := suite.keeper.GrantAllowance(suite.ctx, granterAddr, granteeAddr, allowance)
suite.Require().NoError(err)
genesis, err := feegrant.ExportGenesis(suite.ctx, suite.keeper)
genesis, err := suite.keeper.ExportGenesis(suite.ctx)
suite.Require().NoError(err)
// revoke fee allowance
_, err = msgSrvr.RevokeAllowance(sdk.WrapSDKContext(suite.ctx), &types.MsgRevokeAllowance{
_, err = msgSrvr.RevokeAllowance(sdk.WrapSDKContext(suite.ctx), &feegrant.MsgRevokeAllowance{
Granter: granterAddr.String(),
Grantee: granteeAddr.String(),
})
suite.Require().NoError(err)
err = feegrant.InitGenesis(suite.ctx, suite.keeper, genesis)
err = suite.keeper.InitGenesis(suite.ctx, genesis)
suite.Require().NoError(err)
newGenesis, err := feegrant.ExportGenesis(suite.ctx, suite.keeper)
newGenesis, err := suite.keeper.ExportGenesis(suite.ctx)
suite.Require().NoError(err)
suite.Require().Equal(genesis, newGenesis)
}
@ -68,11 +67,11 @@ func (suite *GenesisTestSuite) TestInitGenesis() {
testCases := []struct {
name string
feeAllowances []types.Grant
feeAllowances []feegrant.Grant
}{
{
"invalid granter",
[]types.Grant{
[]feegrant.Grant{
{
Granter: "invalid granter",
Grantee: granteeAddr.String(),
@ -81,7 +80,7 @@ func (suite *GenesisTestSuite) TestInitGenesis() {
},
{
"invalid grantee",
[]types.Grant{
[]feegrant.Grant{
{
Granter: granterAddr.String(),
Grantee: "invalid grantee",
@ -90,7 +89,7 @@ func (suite *GenesisTestSuite) TestInitGenesis() {
},
{
"invalid allowance",
[]types.Grant{
[]feegrant.Grant{
{
Granter: granterAddr.String(),
Grantee: granteeAddr.String(),
@ -103,7 +102,7 @@ func (suite *GenesisTestSuite) TestInitGenesis() {
for _, tc := range testCases {
tc := tc
suite.Run(tc.name, func() {
err := feegrant.InitGenesis(suite.ctx, suite.keeper, &types.GenesisState{Allowances: tc.feeAllowances})
err := suite.keeper.InitGenesis(suite.ctx, &feegrant.GenesisState{Allowances: tc.feeAllowances})
suite.Require().Error(err)
})
}

View File

@ -11,13 +11,13 @@ import (
"github.com/cosmos/cosmos-sdk/store/prefix"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/query"
"github.com/cosmos/cosmos-sdk/x/feegrant/types"
"github.com/cosmos/cosmos-sdk/x/feegrant"
)
var _ types.QueryServer = Keeper{}
var _ feegrant.QueryServer = Keeper{}
// Allowance returns fee granted to the grantee by the granter.
func (q Keeper) Allowance(c context.Context, req *types.QueryAllowanceRequest) (*types.QueryAllowanceResponse, error) {
func (q Keeper) Allowance(c context.Context, req *feegrant.QueryAllowanceRequest) (*feegrant.QueryAllowanceResponse, error) {
if req == nil {
return nil, status.Error(codes.InvalidArgument, "invalid request")
}
@ -49,8 +49,8 @@ func (q Keeper) Allowance(c context.Context, req *types.QueryAllowanceRequest) (
return nil, status.Errorf(codes.Internal, err.Error())
}
return &types.QueryAllowanceResponse{
Allowance: &types.Grant{
return &feegrant.QueryAllowanceResponse{
Allowance: &feegrant.Grant{
Granter: granterAddr.String(),
Grantee: granteeAddr.String(),
Allowance: feeAllowanceAny,
@ -59,7 +59,7 @@ func (q Keeper) Allowance(c context.Context, req *types.QueryAllowanceRequest) (
}
// Allowances queries all the allowances granted to the given grantee.
func (q Keeper) Allowances(c context.Context, req *types.QueryAllowancesRequest) (*types.QueryAllowancesResponse, error) {
func (q Keeper) Allowances(c context.Context, req *feegrant.QueryAllowancesRequest) (*feegrant.QueryAllowancesResponse, error) {
if req == nil {
return nil, status.Error(codes.InvalidArgument, "invalid request")
}
@ -71,13 +71,13 @@ func (q Keeper) Allowances(c context.Context, req *types.QueryAllowancesRequest)
ctx := sdk.UnwrapSDKContext(c)
var grants []*types.Grant
var grants []*feegrant.Grant
store := ctx.KVStore(q.storeKey)
grantsStore := prefix.NewStore(store, types.FeeAllowancePrefixByGrantee(granteeAddr))
grantsStore := prefix.NewStore(store, feegrant.FeeAllowancePrefixByGrantee(granteeAddr))
pageRes, err := query.Paginate(grantsStore, req.Pagination, func(key []byte, value []byte) error {
var grant types.Grant
var grant feegrant.Grant
if err := q.cdc.Unmarshal(value, &grant); err != nil {
return err
@ -91,5 +91,5 @@ func (q Keeper) Allowances(c context.Context, req *types.QueryAllowancesRequest)
return nil, status.Error(codes.Internal, err.Error())
}
return &types.QueryAllowancesResponse{Allowances: grants, Pagination: pageRes}, nil
return &feegrant.QueryAllowancesResponse{Allowances: grants, Pagination: pageRes}, nil
}

View File

@ -2,58 +2,58 @@ package keeper_test
import (
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/x/feegrant/types"
"github.com/cosmos/cosmos-sdk/x/feegrant"
)
func (suite *KeeperTestSuite) TestFeeAllowance() {
testCases := []struct {
name string
req *types.QueryAllowanceRequest
req *feegrant.QueryAllowanceRequest
expectErr bool
preRun func()
postRun func(_ *types.QueryAllowanceResponse)
postRun func(_ *feegrant.QueryAllowanceResponse)
}{
{
"nil request",
nil,
true,
func() {},
func(*types.QueryAllowanceResponse) {},
func(*feegrant.QueryAllowanceResponse) {},
},
{
"fail: invalid granter",
&types.QueryAllowanceRequest{
&feegrant.QueryAllowanceRequest{
Granter: "invalid_granter",
Grantee: suite.addrs[0].String(),
},
true,
func() {},
func(*types.QueryAllowanceResponse) {},
func(*feegrant.QueryAllowanceResponse) {},
},
{
"fail: invalid grantee",
&types.QueryAllowanceRequest{
&feegrant.QueryAllowanceRequest{
Granter: suite.addrs[0].String(),
Grantee: "invalid_grantee",
},
true,
func() {},
func(*types.QueryAllowanceResponse) {},
func(*feegrant.QueryAllowanceResponse) {},
},
{
"fail: no grants",
&types.QueryAllowanceRequest{
&feegrant.QueryAllowanceRequest{
Granter: suite.addrs[0].String(),
Grantee: suite.addrs[1].String(),
},
true,
func() {},
func(*types.QueryAllowanceResponse) {},
func(*feegrant.QueryAllowanceResponse) {},
},
{
"valid query: expect single grant",
&types.QueryAllowanceRequest{
&feegrant.QueryAllowanceRequest{
Granter: suite.addrs[0].String(),
Grantee: suite.addrs[1].String(),
},
@ -61,7 +61,7 @@ func (suite *KeeperTestSuite) TestFeeAllowance() {
func() {
grantFeeAllowance(suite)
},
func(response *types.QueryAllowanceResponse) {
func(response *feegrant.QueryAllowanceResponse) {
suite.Require().Equal(response.Allowance.Granter, suite.addrs[0].String())
suite.Require().Equal(response.Allowance.Grantee, suite.addrs[1].String())
},
@ -85,48 +85,48 @@ func (suite *KeeperTestSuite) TestFeeAllowance() {
func (suite *KeeperTestSuite) TestFeeAllowances() {
testCases := []struct {
name string
req *types.QueryAllowancesRequest
req *feegrant.QueryAllowancesRequest
expectErr bool
preRun func()
postRun func(_ *types.QueryAllowancesResponse)
postRun func(_ *feegrant.QueryAllowancesResponse)
}{
{
"nil request",
nil,
true,
func() {},
func(*types.QueryAllowancesResponse) {},
func(*feegrant.QueryAllowancesResponse) {},
},
{
"fail: invalid grantee",
&types.QueryAllowancesRequest{
&feegrant.QueryAllowancesRequest{
Grantee: "invalid_grantee",
},
true,
func() {},
func(*types.QueryAllowancesResponse) {},
func(*feegrant.QueryAllowancesResponse) {},
},
{
"no grants",
&types.QueryAllowancesRequest{
&feegrant.QueryAllowancesRequest{
Grantee: suite.addrs[1].String(),
},
false,
func() {},
func(resp *types.QueryAllowancesResponse) {
func(resp *feegrant.QueryAllowancesResponse) {
suite.Require().Equal(len(resp.Allowances), 0)
},
},
{
"valid query: expect single grant",
&types.QueryAllowancesRequest{
&feegrant.QueryAllowancesRequest{
Grantee: suite.addrs[1].String(),
},
false,
func() {
grantFeeAllowance(suite)
},
func(resp *types.QueryAllowancesResponse) {
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())
@ -150,7 +150,7 @@ func (suite *KeeperTestSuite) TestFeeAllowances() {
func grantFeeAllowance(suite *KeeperTestSuite) {
exp := suite.sdkCtx.BlockTime().AddDate(1, 0, 0)
err := suite.app.FeeGrantKeeper.GrantAllowance(suite.sdkCtx, suite.addrs[0], suite.addrs[1], &types.BasicAllowance{
err := suite.app.FeeGrantKeeper.GrantAllowance(suite.sdkCtx, suite.addrs[0], suite.addrs[1], &feegrant.BasicAllowance{
SpendLimit: sdk.NewCoins(sdk.NewInt64Coin("atom", 555)),
Expiration: &exp,
})

View File

@ -9,7 +9,7 @@ import (
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
"github.com/cosmos/cosmos-sdk/x/auth/ante"
"github.com/cosmos/cosmos-sdk/x/feegrant/types"
"github.com/cosmos/cosmos-sdk/x/feegrant"
)
// Keeper manages state of all fee grants, as well as calculating approval.
@ -17,13 +17,13 @@ import (
type Keeper struct {
cdc codec.BinaryCodec
storeKey sdk.StoreKey
authKeeper types.AccountKeeper
authKeeper feegrant.AccountKeeper
}
var _ ante.FeegrantKeeper = &Keeper{}
// NewKeeper creates a fee grant Keeper
func NewKeeper(cdc codec.BinaryCodec, storeKey sdk.StoreKey, ak types.AccountKeeper) Keeper {
func NewKeeper(cdc codec.BinaryCodec, storeKey sdk.StoreKey, ak feegrant.AccountKeeper) Keeper {
return Keeper{
cdc: cdc,
storeKey: storeKey,
@ -33,11 +33,11 @@ func NewKeeper(cdc codec.BinaryCodec, storeKey sdk.StoreKey, ak types.AccountKee
// Logger returns a module-specific logger.
func (k Keeper) Logger(ctx sdk.Context) log.Logger {
return ctx.Logger().With("module", fmt.Sprintf("x/%s", types.ModuleName))
return ctx.Logger().With("module", fmt.Sprintf("x/%s", feegrant.ModuleName))
}
// GrantAllowance creates a new grant
func (k Keeper) GrantAllowance(ctx sdk.Context, granter, grantee sdk.AccAddress, feeAllowance types.FeeAllowanceI) error {
func (k Keeper) GrantAllowance(ctx sdk.Context, granter, grantee sdk.AccAddress, feeAllowance feegrant.FeeAllowanceI) error {
// create the account if it is not in account state
granteeAcc := k.authKeeper.GetAccount(ctx, grantee)
@ -47,8 +47,8 @@ func (k Keeper) GrantAllowance(ctx sdk.Context, granter, grantee sdk.AccAddress,
}
store := ctx.KVStore(k.storeKey)
key := types.FeeAllowanceKey(granter, grantee)
grant, err := types.NewGrant(granter, grantee, feeAllowance)
key := feegrant.FeeAllowanceKey(granter, grantee)
grant, err := feegrant.NewGrant(granter, grantee, feeAllowance)
if err != nil {
return err
}
@ -62,9 +62,9 @@ func (k Keeper) GrantAllowance(ctx sdk.Context, granter, grantee sdk.AccAddress,
ctx.EventManager().EmitEvent(
sdk.NewEvent(
types.EventTypeSetFeeGrant,
sdk.NewAttribute(types.AttributeKeyGranter, grant.Granter),
sdk.NewAttribute(types.AttributeKeyGrantee, grant.Grantee),
feegrant.EventTypeSetFeeGrant,
sdk.NewAttribute(feegrant.AttributeKeyGranter, grant.Granter),
sdk.NewAttribute(feegrant.AttributeKeyGrantee, grant.Grantee),
),
)
@ -79,14 +79,14 @@ func (k Keeper) revokeAllowance(ctx sdk.Context, granter, grantee sdk.AccAddress
}
store := ctx.KVStore(k.storeKey)
key := types.FeeAllowanceKey(granter, grantee)
key := feegrant.FeeAllowanceKey(granter, grantee)
store.Delete(key)
ctx.EventManager().EmitEvent(
sdk.NewEvent(
types.EventTypeRevokeFeeGrant,
sdk.NewAttribute(types.AttributeKeyGranter, granter.String()),
sdk.NewAttribute(types.AttributeKeyGrantee, grantee.String()),
feegrant.EventTypeRevokeFeeGrant,
sdk.NewAttribute(feegrant.AttributeKeyGranter, granter.String()),
sdk.NewAttribute(feegrant.AttributeKeyGrantee, grantee.String()),
),
)
return nil
@ -95,7 +95,7 @@ func (k Keeper) revokeAllowance(ctx sdk.Context, granter, grantee sdk.AccAddress
// GetAllowance returns the allowance between the granter and grantee.
// If there is none, it returns nil, nil.
// Returns an error on parsing issues
func (k Keeper) GetAllowance(ctx sdk.Context, granter, grantee sdk.AccAddress) (types.FeeAllowanceI, error) {
func (k Keeper) GetAllowance(ctx sdk.Context, granter, grantee sdk.AccAddress) (feegrant.FeeAllowanceI, error) {
grant, err := k.getGrant(ctx, granter, grantee)
if err != nil {
return nil, err
@ -105,15 +105,15 @@ func (k Keeper) GetAllowance(ctx sdk.Context, granter, grantee sdk.AccAddress) (
}
// getGrant returns entire grant between both accounts
func (k Keeper) getGrant(ctx sdk.Context, granter sdk.AccAddress, grantee sdk.AccAddress) (*types.Grant, error) {
func (k Keeper) getGrant(ctx sdk.Context, granter sdk.AccAddress, grantee sdk.AccAddress) (*feegrant.Grant, error) {
store := ctx.KVStore(k.storeKey)
key := types.FeeAllowanceKey(granter, grantee)
key := feegrant.FeeAllowanceKey(granter, grantee)
bz := store.Get(key)
if len(bz) == 0 {
return nil, sdkerrors.Wrap(sdkerrors.ErrUnauthorized, "fee-grant not found")
}
var feegrant types.Grant
var feegrant feegrant.Grant
if err := k.cdc.Unmarshal(bz, &feegrant); err != nil {
return nil, err
}
@ -124,15 +124,15 @@ func (k Keeper) getGrant(ctx sdk.Context, granter sdk.AccAddress, grantee sdk.Ac
// IterateAllFeeAllowances iterates over all the grants in the store.
// Callback to get all data, returns true to stop, false to keep reading
// Calling this without pagination is very expensive and only designed for export genesis
func (k Keeper) IterateAllFeeAllowances(ctx sdk.Context, cb func(grant types.Grant) bool) error {
func (k Keeper) IterateAllFeeAllowances(ctx sdk.Context, cb func(grant feegrant.Grant) bool) error {
store := ctx.KVStore(k.storeKey)
iter := sdk.KVStorePrefixIterator(store, types.FeeAllowanceKeyPrefix)
iter := sdk.KVStorePrefixIterator(store, feegrant.FeeAllowanceKeyPrefix)
defer iter.Close()
stop := false
for ; iter.Valid() && !stop; iter.Next() {
bz := iter.Value()
var feeGrant types.Grant
var feeGrant feegrant.Grant
if err := k.cdc.Unmarshal(bz, &feeGrant); err != nil {
return err
}
@ -182,9 +182,48 @@ func (k Keeper) UseGrantedFees(ctx sdk.Context, granter, grantee sdk.AccAddress,
func emitUseGrantEvent(ctx sdk.Context, granter, grantee string) {
ctx.EventManager().EmitEvent(
sdk.NewEvent(
types.EventTypeUseFeeGrant,
sdk.NewAttribute(types.AttributeKeyGranter, granter),
sdk.NewAttribute(types.AttributeKeyGrantee, grantee),
feegrant.EventTypeUseFeeGrant,
sdk.NewAttribute(feegrant.AttributeKeyGranter, granter),
sdk.NewAttribute(feegrant.AttributeKeyGrantee, grantee),
),
)
}
// InitGenesis will initialize the keeper from a *previously validated* GenesisState
func (k Keeper) InitGenesis(ctx sdk.Context, data *feegrant.GenesisState) error {
for _, f := range data.Allowances {
granter, err := sdk.AccAddressFromBech32(f.Granter)
if err != nil {
return err
}
grantee, err := sdk.AccAddressFromBech32(f.Grantee)
if err != nil {
return err
}
grant, err := f.GetGrant()
if err != nil {
return err
}
err = k.GrantAllowance(ctx, granter, grantee, grant)
if err != nil {
return err
}
}
return nil
}
// ExportGenesis will dump the contents of the keeper into a serializable GenesisState.
func (k Keeper) ExportGenesis(ctx sdk.Context) (*feegrant.GenesisState, error) {
var grants []feegrant.Grant
err := k.IterateAllFeeAllowances(ctx, func(grant feegrant.Grant) bool {
grants = append(grants, grant)
return false
})
return &feegrant.GenesisState{
Allowances: grants,
}, err
}

View File

@ -9,8 +9,8 @@ import (
"github.com/cosmos/cosmos-sdk/simapp"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/x/feegrant"
"github.com/cosmos/cosmos-sdk/x/feegrant/keeper"
"github.com/cosmos/cosmos-sdk/x/feegrant/types"
)
type KeeperTestSuite struct {
@ -19,7 +19,7 @@ type KeeperTestSuite struct {
app *simapp.SimApp
sdkCtx sdk.Context
addrs []sdk.AccAddress
msgSrvr types.MsgServer
msgSrvr feegrant.MsgServer
ctx context.Context
atom sdk.Coins
keeper keeper.Keeper
@ -46,12 +46,12 @@ func (suite *KeeperTestSuite) TestKeeperCrud() {
// some helpers
eth := sdk.NewCoins(sdk.NewInt64Coin("eth", 123))
exp := suite.sdkCtx.BlockTime().AddDate(1, 0, 0)
basic := &types.BasicAllowance{
basic := &feegrant.BasicAllowance{
SpendLimit: suite.atom,
Expiration: &exp,
}
basic2 := &types.BasicAllowance{
basic2 := &feegrant.BasicAllowance{
SpendLimit: eth,
Expiration: &exp,
}
@ -73,13 +73,13 @@ func (suite *KeeperTestSuite) TestKeeperCrud() {
suite.Require().NoError(err)
// remove some, overwrite other
_, err = suite.msgSrvr.RevokeAllowance(suite.ctx, &types.MsgRevokeAllowance{Granter: suite.addrs[0].String(), Grantee: suite.addrs[1].String()})
_, err = suite.msgSrvr.RevokeAllowance(suite.ctx, &feegrant.MsgRevokeAllowance{Granter: suite.addrs[0].String(), Grantee: suite.addrs[1].String()})
suite.Require().NoError(err)
_, err = suite.msgSrvr.RevokeAllowance(suite.ctx, &types.MsgRevokeAllowance{Granter: suite.addrs[0].String(), Grantee: suite.addrs[2].String()})
_, err = suite.msgSrvr.RevokeAllowance(suite.ctx, &feegrant.MsgRevokeAllowance{Granter: suite.addrs[0].String(), Grantee: suite.addrs[2].String()})
suite.Require().NoError(err)
// revoke non-exist fee allowance
_, err = suite.msgSrvr.RevokeAllowance(suite.ctx, &types.MsgRevokeAllowance{Granter: suite.addrs[0].String(), Grantee: suite.addrs[2].String()})
_, err = suite.msgSrvr.RevokeAllowance(suite.ctx, &feegrant.MsgRevokeAllowance{Granter: suite.addrs[0].String(), Grantee: suite.addrs[2].String()})
suite.Require().Error(err)
err = suite.keeper.GrantAllowance(suite.sdkCtx, suite.addrs[0], suite.addrs[2], basic)
@ -97,7 +97,7 @@ func (suite *KeeperTestSuite) TestKeeperCrud() {
cases := map[string]struct {
grantee sdk.AccAddress
granter sdk.AccAddress
allowance types.FeeAllowanceI
allowance feegrant.FeeAllowanceI
}{
"addr revoked": {
granter: suite.addrs[0],
@ -142,7 +142,7 @@ func (suite *KeeperTestSuite) TestKeeperCrud() {
_, err = suite.keeper.GetAllowance(suite.sdkCtx, suite.addrs[3], accAddr)
suite.Require().NoError(err)
_, err = suite.msgSrvr.RevokeAllowance(suite.ctx, &types.MsgRevokeAllowance{Granter: suite.addrs[3].String(), Grantee: accAddr.String()})
_, err = suite.msgSrvr.RevokeAllowance(suite.ctx, &feegrant.MsgRevokeAllowance{Granter: suite.addrs[3].String(), Grantee: accAddr.String()})
suite.Require().NoError(err)
}
@ -152,7 +152,7 @@ func (suite *KeeperTestSuite) TestUseGrantedFee() {
blockTime := suite.sdkCtx.BlockTime()
oneYear := blockTime.AddDate(1, 0, 0)
future := &types.BasicAllowance{
future := &feegrant.BasicAllowance{
SpendLimit: suite.atom,
Expiration: &oneYear,
}
@ -160,7 +160,7 @@ func (suite *KeeperTestSuite) TestUseGrantedFee() {
// for testing limits of the contract
hugeAtom := sdk.NewCoins(sdk.NewInt64Coin("atom", 9999))
smallAtom := sdk.NewCoins(sdk.NewInt64Coin("atom", 1))
futureAfterSmall := &types.BasicAllowance{
futureAfterSmall := &feegrant.BasicAllowance{
SpendLimit: sdk.NewCoins(sdk.NewInt64Coin("atom", 554)),
Expiration: &oneYear,
}
@ -171,7 +171,7 @@ func (suite *KeeperTestSuite) TestUseGrantedFee() {
granter sdk.AccAddress
fee sdk.Coins
allowed bool
final types.FeeAllowanceI
final feegrant.FeeAllowanceI
}{
"use entire pot": {
granter: suite.addrs[0],
@ -214,7 +214,7 @@ func (suite *KeeperTestSuite) TestUseGrantedFee() {
})
}
expired := &types.BasicAllowance{
expired := &feegrant.BasicAllowance{
SpendLimit: eth,
Expiration: &blockTime,
}
@ -239,12 +239,12 @@ func (suite *KeeperTestSuite) TestIterateGrants() {
eth := sdk.NewCoins(sdk.NewInt64Coin("eth", 123))
exp := suite.sdkCtx.BlockTime().AddDate(1, 0, 0)
allowance := &types.BasicAllowance{
allowance := &feegrant.BasicAllowance{
SpendLimit: suite.atom,
Expiration: &exp,
}
allowance1 := &types.BasicAllowance{
allowance1 := &feegrant.BasicAllowance{
SpendLimit: eth,
Expiration: &exp,
}
@ -252,7 +252,7 @@ func (suite *KeeperTestSuite) TestIterateGrants() {
suite.keeper.GrantAllowance(suite.sdkCtx, suite.addrs[0], suite.addrs[1], allowance)
suite.keeper.GrantAllowance(suite.sdkCtx, suite.addrs[2], suite.addrs[1], allowance1)
suite.keeper.IterateAllFeeAllowances(suite.sdkCtx, func(grant types.Grant) bool {
suite.keeper.IterateAllFeeAllowances(suite.sdkCtx, 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)
return true

View File

@ -6,7 +6,7 @@ import (
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
"github.com/cosmos/cosmos-sdk/x/feegrant/types"
"github.com/cosmos/cosmos-sdk/x/feegrant"
)
type msgServer struct {
@ -15,16 +15,16 @@ type msgServer struct {
// NewMsgServerImpl returns an implementation of the feegrant MsgServer interface
// for the provided Keeper.
func NewMsgServerImpl(k Keeper) types.MsgServer {
func NewMsgServerImpl(k Keeper) feegrant.MsgServer {
return &msgServer{
Keeper: k,
}
}
var _ types.MsgServer = msgServer{}
var _ feegrant.MsgServer = msgServer{}
// GrantAllowance grants an allowance from the granter's funds to be used by the grantee.
func (k msgServer) GrantAllowance(goCtx context.Context, msg *types.MsgGrantAllowance) (*types.MsgGrantAllowanceResponse, error) {
func (k msgServer) GrantAllowance(goCtx context.Context, msg *feegrant.MsgGrantAllowance) (*feegrant.MsgGrantAllowanceResponse, error) {
ctx := sdk.UnwrapSDKContext(goCtx)
grantee, err := sdk.AccAddressFromBech32(msg.Grantee)
@ -52,11 +52,11 @@ func (k msgServer) GrantAllowance(goCtx context.Context, msg *types.MsgGrantAllo
return nil, err
}
return &types.MsgGrantAllowanceResponse{}, nil
return &feegrant.MsgGrantAllowanceResponse{}, nil
}
// RevokeAllowance revokes a fee allowance between a granter and grantee.
func (k msgServer) RevokeAllowance(goCtx context.Context, msg *types.MsgRevokeAllowance) (*types.MsgRevokeAllowanceResponse, error) {
func (k msgServer) RevokeAllowance(goCtx context.Context, msg *feegrant.MsgRevokeAllowance) (*feegrant.MsgRevokeAllowanceResponse, error) {
ctx := sdk.UnwrapSDKContext(goCtx)
grantee, err := sdk.AccAddressFromBech32(msg.Grantee)
@ -74,5 +74,5 @@ func (k msgServer) RevokeAllowance(goCtx context.Context, msg *types.MsgRevokeAl
return nil, err
}
return &types.MsgRevokeAllowanceResponse{}, nil
return &feegrant.MsgRevokeAllowanceResponse{}, nil
}

View File

@ -3,24 +3,24 @@ package keeper_test
import (
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
"github.com/cosmos/cosmos-sdk/x/feegrant/types"
"github.com/cosmos/cosmos-sdk/x/feegrant"
)
func (suite *KeeperTestSuite) TestGrantFeeAllowance() {
func (suite *KeeperTestSuite) TestGrantAllowance() {
oneYear := suite.sdkCtx.BlockTime().AddDate(1, 0, 0)
testCases := []struct {
name string
req func() *types.MsgGrantAllowance
req func() *feegrant.MsgGrantAllowance
expectErr bool
errMsg string
}{
{
"invalid granter address",
func() *types.MsgGrantAllowance {
any, err := codectypes.NewAnyWithValue(&types.BasicAllowance{})
func() *feegrant.MsgGrantAllowance {
any, err := codectypes.NewAnyWithValue(&feegrant.BasicAllowance{})
suite.Require().NoError(err)
return &types.MsgGrantAllowance{
return &feegrant.MsgGrantAllowance{
Granter: "invalid-granter",
Grantee: suite.addrs[1].String(),
Allowance: any,
@ -31,10 +31,10 @@ func (suite *KeeperTestSuite) TestGrantFeeAllowance() {
},
{
"invalid grantee address",
func() *types.MsgGrantAllowance {
any, err := codectypes.NewAnyWithValue(&types.BasicAllowance{})
func() *feegrant.MsgGrantAllowance {
any, err := codectypes.NewAnyWithValue(&feegrant.BasicAllowance{})
suite.Require().NoError(err)
return &types.MsgGrantAllowance{
return &feegrant.MsgGrantAllowance{
Granter: suite.addrs[0].String(),
Grantee: "invalid-grantee",
Allowance: any,
@ -45,13 +45,13 @@ func (suite *KeeperTestSuite) TestGrantFeeAllowance() {
},
{
"valid: basic fee allowance",
func() *types.MsgGrantAllowance {
any, err := codectypes.NewAnyWithValue(&types.BasicAllowance{
func() *feegrant.MsgGrantAllowance {
any, err := codectypes.NewAnyWithValue(&feegrant.BasicAllowance{
SpendLimit: suite.atom,
Expiration: &oneYear,
})
suite.Require().NoError(err)
return &types.MsgGrantAllowance{
return &feegrant.MsgGrantAllowance{
Granter: suite.addrs[0].String(),
Grantee: suite.addrs[1].String(),
Allowance: any,
@ -62,13 +62,13 @@ func (suite *KeeperTestSuite) TestGrantFeeAllowance() {
},
{
"fail: fee allowance exists",
func() *types.MsgGrantAllowance {
any, err := codectypes.NewAnyWithValue(&types.BasicAllowance{
func() *feegrant.MsgGrantAllowance {
any, err := codectypes.NewAnyWithValue(&feegrant.BasicAllowance{
SpendLimit: suite.atom,
Expiration: &oneYear,
})
suite.Require().NoError(err)
return &types.MsgGrantAllowance{
return &feegrant.MsgGrantAllowance{
Granter: suite.addrs[0].String(),
Grantee: suite.addrs[1].String(),
Allowance: any,
@ -79,15 +79,15 @@ func (suite *KeeperTestSuite) TestGrantFeeAllowance() {
},
{
"valid: periodic fee allowance",
func() *types.MsgGrantAllowance {
any, err := codectypes.NewAnyWithValue(&types.PeriodicAllowance{
Basic: types.BasicAllowance{
func() *feegrant.MsgGrantAllowance {
any, err := codectypes.NewAnyWithValue(&feegrant.PeriodicAllowance{
Basic: feegrant.BasicAllowance{
SpendLimit: suite.atom,
Expiration: &oneYear,
},
})
suite.Require().NoError(err)
return &types.MsgGrantAllowance{
return &feegrant.MsgGrantAllowance{
Granter: suite.addrs[1].String(),
Grantee: suite.addrs[2].String(),
Allowance: any,
@ -98,15 +98,15 @@ func (suite *KeeperTestSuite) TestGrantFeeAllowance() {
},
{
"error: fee allowance exists",
func() *types.MsgGrantAllowance {
any, err := codectypes.NewAnyWithValue(&types.PeriodicAllowance{
Basic: types.BasicAllowance{
func() *feegrant.MsgGrantAllowance {
any, err := codectypes.NewAnyWithValue(&feegrant.PeriodicAllowance{
Basic: feegrant.BasicAllowance{
SpendLimit: suite.atom,
Expiration: &oneYear,
},
})
suite.Require().NoError(err)
return &types.MsgGrantAllowance{
return &feegrant.MsgGrantAllowance{
Granter: suite.addrs[1].String(),
Grantee: suite.addrs[2].String(),
Allowance: any,
@ -127,19 +127,19 @@ func (suite *KeeperTestSuite) TestGrantFeeAllowance() {
}
}
func (suite *KeeperTestSuite) TestRevokeFeeAllowance() {
func (suite *KeeperTestSuite) TestRevokeAllowance() {
oneYear := suite.sdkCtx.BlockTime().AddDate(1, 0, 0)
testCases := []struct {
name string
request *types.MsgRevokeAllowance
request *feegrant.MsgRevokeAllowance
preRun func()
expectErr bool
errMsg string
}{
{
"error: invalid granter",
&types.MsgRevokeAllowance{
&feegrant.MsgRevokeAllowance{
Granter: "invalid-granter",
Grantee: suite.addrs[1].String(),
},
@ -149,7 +149,7 @@ func (suite *KeeperTestSuite) TestRevokeFeeAllowance() {
},
{
"error: invalid grantee",
&types.MsgRevokeAllowance{
&feegrant.MsgRevokeAllowance{
Granter: suite.addrs[0].String(),
Grantee: "invalid-grantee",
},
@ -159,7 +159,7 @@ func (suite *KeeperTestSuite) TestRevokeFeeAllowance() {
},
{
"error: fee allowance not found",
&types.MsgRevokeAllowance{
&feegrant.MsgRevokeAllowance{
Granter: suite.addrs[0].String(),
Grantee: suite.addrs[1].String(),
},
@ -169,24 +169,24 @@ func (suite *KeeperTestSuite) TestRevokeFeeAllowance() {
},
{
"success: revoke fee allowance",
&types.MsgRevokeAllowance{
&feegrant.MsgRevokeAllowance{
Granter: suite.addrs[0].String(),
Grantee: suite.addrs[1].String(),
},
func() {
// removing fee allowance from previous tests if exists
suite.msgSrvr.RevokeAllowance(suite.ctx, &types.MsgRevokeAllowance{
suite.msgSrvr.RevokeAllowance(suite.ctx, &feegrant.MsgRevokeAllowance{
Granter: suite.addrs[0].String(),
Grantee: suite.addrs[1].String(),
})
any, err := codectypes.NewAnyWithValue(&types.PeriodicAllowance{
Basic: types.BasicAllowance{
any, err := codectypes.NewAnyWithValue(&feegrant.PeriodicAllowance{
Basic: feegrant.BasicAllowance{
SpendLimit: suite.atom,
Expiration: &oneYear,
},
})
suite.Require().NoError(err)
req := &types.MsgGrantAllowance{
req := &feegrant.MsgGrantAllowance{
Granter: suite.addrs[0].String(),
Grantee: suite.addrs[1].String(),
Allowance: any,
@ -199,7 +199,7 @@ func (suite *KeeperTestSuite) TestRevokeFeeAllowance() {
},
{
"error: check fee allowance revoked",
&types.MsgRevokeAllowance{
&feegrant.MsgRevokeAllowance{
Granter: suite.addrs[0].String(),
Grantee: suite.addrs[1].String(),
},

View File

@ -1,4 +1,4 @@
package types
package feegrant
import (
sdk "github.com/cosmos/cosmos-sdk/types"

View File

@ -1,4 +1,4 @@
package feegrant
package module
import (
"context"
@ -18,10 +18,10 @@ import (
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
"github.com/cosmos/cosmos-sdk/types/module"
simtypes "github.com/cosmos/cosmos-sdk/types/simulation"
"github.com/cosmos/cosmos-sdk/x/feegrant"
"github.com/cosmos/cosmos-sdk/x/feegrant/client/cli"
"github.com/cosmos/cosmos-sdk/x/feegrant/keeper"
"github.com/cosmos/cosmos-sdk/x/feegrant/simulation"
"github.com/cosmos/cosmos-sdk/x/feegrant/types"
)
var (
@ -41,14 +41,14 @@ type AppModuleBasic struct {
// Name returns the feegrant module's name.
func (AppModuleBasic) Name() string {
return types.ModuleName
return feegrant.ModuleName
}
// RegisterServices registers a gRPC query service to respond to the
// module-specific gRPC queries.
func (am AppModule) RegisterServices(cfg module.Configurator) {
types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper))
types.RegisterQueryServer(cfg.QueryServer(), am.keeper)
feegrant.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper))
feegrant.RegisterQueryServer(cfg.QueryServer(), am.keeper)
}
// RegisterLegacyAminoCodec registers the feegrant module's types for the given codec.
@ -57,7 +57,7 @@ func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {
// RegisterInterfaces registers the feegrant module's interface types
func (AppModuleBasic) RegisterInterfaces(registry cdctypes.InterfaceRegistry) {
types.RegisterInterfaces(registry)
feegrant.RegisterInterfaces(registry)
}
// LegacyQuerierHandler returns the feegrant module sdk.Querier.
@ -68,17 +68,17 @@ func (am AppModule) LegacyQuerierHandler(legacyQuerierCdc *codec.LegacyAmino) sd
// DefaultGenesis returns default genesis state as raw bytes for the feegrant
// module.
func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage {
return cdc.MustMarshalJSON(types.DefaultGenesisState())
return cdc.MustMarshalJSON(feegrant.DefaultGenesisState())
}
// ValidateGenesis performs genesis state validation for the feegrant module.
func (a AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config sdkclient.TxEncodingConfig, bz json.RawMessage) error {
var data types.GenesisState
var data feegrant.GenesisState
if err := cdc.UnmarshalJSON(bz, &data); err != nil {
sdkerrors.Wrapf(err, "failed to unmarshal %s genesis state", types.ModuleName)
sdkerrors.Wrapf(err, "failed to unmarshal %s genesis state", feegrant.ModuleName)
}
return types.ValidateGenesis(data)
return feegrant.ValidateGenesis(data)
}
// RegisterRESTRoutes registers the REST routes for the feegrant module.
@ -86,7 +86,7 @@ func (AppModuleBasic) RegisterRESTRoutes(ctx sdkclient.Context, rtr *mux.Router)
// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the feegrant module.
func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx sdkclient.Context, mux *runtime.ServeMux) {
types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx))
feegrant.RegisterQueryHandlerClient(context.Background(), mux, feegrant.NewQueryClient(clientCtx))
}
// GetTxCmd returns the root tx command for the feegrant module.
@ -107,13 +107,13 @@ func (AppModuleBasic) GetQueryCmd() *cobra.Command {
type AppModule struct {
AppModuleBasic
keeper keeper.Keeper
accountKeeper types.AccountKeeper
bankKeeper types.BankKeeper
accountKeeper feegrant.AccountKeeper
bankKeeper feegrant.BankKeeper
registry cdctypes.InterfaceRegistry
}
// NewAppModule creates a new AppModule object
func NewAppModule(cdc codec.Codec, ak types.AccountKeeper, bk types.BankKeeper, keeper keeper.Keeper, registry cdctypes.InterfaceRegistry) AppModule {
func NewAppModule(cdc codec.Codec, ak feegrant.AccountKeeper, bk feegrant.BankKeeper, keeper keeper.Keeper, registry cdctypes.InterfaceRegistry) AppModule {
return AppModule{
AppModuleBasic: AppModuleBasic{cdc: cdc},
keeper: keeper,
@ -125,7 +125,7 @@ func NewAppModule(cdc codec.Codec, ak types.AccountKeeper, bk types.BankKeeper,
// Name returns the feegrant module's name.
func (AppModule) Name() string {
return types.ModuleName
return feegrant.ModuleName
}
// RegisterInvariants registers the feegrant module invariants.
@ -133,7 +133,7 @@ func (am AppModule) RegisterInvariants(ir sdk.InvariantRegistry) {}
// Route returns the message routing key for the feegrant module.
func (am AppModule) Route() sdk.Route {
return sdk.NewRoute(types.RouterKey, nil)
return sdk.NewRoute(feegrant.RouterKey, nil)
}
// NewHandler returns an sdk.Handler for the feegrant module.
@ -149,10 +149,10 @@ func (AppModule) QuerierRoute() string {
// InitGenesis performs genesis initialization for the feegrant module. It returns
// no validator updates.
func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, bz json.RawMessage) []abci.ValidatorUpdate {
var gs types.GenesisState
var gs feegrant.GenesisState
cdc.MustUnmarshalJSON(bz, &gs)
err := InitGenesis(ctx, am.keeper, &gs)
err := am.keeper.InitGenesis(ctx, &gs)
if err != nil {
panic(err)
}
@ -162,7 +162,7 @@ func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, bz json.Ra
// ExportGenesis returns the exported genesis state as raw bytes for the feegrant
// module.
func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage {
gs, err := ExportGenesis(ctx, am.keeper)
gs, err := am.keeper.ExportGenesis(ctx)
if err != nil {
panic(err)
}
@ -202,7 +202,7 @@ func (AppModule) RandomizedParams(r *rand.Rand) []simtypes.ParamChange {
// RegisterStoreDecoder registers a decoder for feegrant module's types
func (am AppModule) RegisterStoreDecoder(sdr sdk.StoreDecoderRegistry) {
sdr[types.StoreKey] = simulation.NewDecodeStore(am.cdc)
sdr[feegrant.StoreKey] = simulation.NewDecodeStore(am.cdc)
}
// WeightedOperations returns all the feegrant module operations with their respective weights.

View File

@ -1,4 +1,4 @@
package types
package feegrant
import (
"github.com/gogo/protobuf/proto"
@ -13,7 +13,7 @@ var (
_ types.UnpackInterfacesMessage = &MsgGrantAllowance{}
)
// NewMsgGrantAllowance creates a new MsgGrantFeeAllowance.
// NewMsgGrantAllowance creates a new MsgGrantAllowance.
//nolint:interfacer
func NewMsgGrantAllowance(feeAllowance FeeAllowanceI, granter, grantee sdk.AccAddress) (*MsgGrantAllowance, error) {
msg, ok := feeAllowance.(proto.Message)

View File

@ -1,4 +1,4 @@
package types_test
package feegrant_test
import (
"testing"
@ -7,17 +7,17 @@ import (
"github.com/cosmos/cosmos-sdk/codec"
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/x/feegrant/types"
"github.com/cosmos/cosmos-sdk/x/feegrant"
"github.com/stretchr/testify/require"
)
func TestMsgGrantFeeAllowance(t *testing.T) {
func TestMsgGrantAllowance(t *testing.T) {
cdc := codec.NewProtoCodec(codectypes.NewInterfaceRegistry())
addr, _ := sdk.AccAddressFromBech32("cosmos1aeuqja06474dfrj7uqsvukm6rael982kk89mqr")
addr2, _ := sdk.AccAddressFromBech32("cosmos1nph3cfzk6trsmfxkeu943nvach5qw4vwstnvkl")
atom := sdk.NewCoins(sdk.NewInt64Coin("atom", 555))
threeHours := time.Now().Add(3 * time.Hour)
basic := &types.BasicAllowance{
basic := &feegrant.BasicAllowance{
SpendLimit: atom,
Expiration: &threeHours,
}
@ -25,7 +25,7 @@ func TestMsgGrantFeeAllowance(t *testing.T) {
cases := map[string]struct {
grantee sdk.AccAddress
granter sdk.AccAddress
grant *types.BasicAllowance
grant *feegrant.BasicAllowance
valid bool
}{
"valid": {
@ -55,7 +55,7 @@ func TestMsgGrantFeeAllowance(t *testing.T) {
}
for _, tc := range cases {
msg, err := types.NewMsgGrantAllowance(tc.grant, tc.granter, tc.grantee)
msg, err := feegrant.NewMsgGrantAllowance(tc.grant, tc.granter, tc.grantee)
require.NoError(t, err)
err = msg.ValidateBasic()
@ -77,20 +77,20 @@ func TestMsgGrantFeeAllowance(t *testing.T) {
}
}
func TestMsgRevokeFeeAllowance(t *testing.T) {
func TestMsgRevokeAllowance(t *testing.T) {
addr, _ := sdk.AccAddressFromBech32("cosmos1aeuqja06474dfrj7uqsvukm6rael982kk89mqr")
addr2, _ := sdk.AccAddressFromBech32("cosmos1nph3cfzk6trsmfxkeu943nvach5qw4vwstnvkl")
atom := sdk.NewCoins(sdk.NewInt64Coin("atom", 555))
threeHours := time.Now().Add(3 * time.Hour)
basic := &types.BasicAllowance{
basic := &feegrant.BasicAllowance{
SpendLimit: atom,
Expiration: &threeHours,
}
cases := map[string]struct {
grantee sdk.AccAddress
granter sdk.AccAddress
grant *types.BasicAllowance
grant *feegrant.BasicAllowance
valid bool
}{
"valid": {
@ -120,7 +120,7 @@ func TestMsgRevokeFeeAllowance(t *testing.T) {
}
for _, tc := range cases {
msg := types.NewMsgRevokeAllowance(tc.granter, tc.grantee)
msg := feegrant.NewMsgRevokeAllowance(tc.granter, tc.grantee)
err := msg.ValidateBasic()
if tc.valid {
require.NoError(t, err)

View File

@ -1,4 +1,4 @@
package types
package feegrant
import (
"time"
@ -18,7 +18,7 @@ var _ FeeAllowanceI = (*PeriodicAllowance)(nil)
// and will be saved again after an acceptance.
//
// If remove is true (regardless of the error), the FeeAllowance will be deleted from storage
// (eg. when it is used up). (See call to RevokeFeeAllowance in Keeper.UseGrantedFees)
// (eg. when it is used up). (See call to RevokeAllowance in Keeper.UseGrantedFees)
func (a *PeriodicAllowance) Accept(ctx sdk.Context, fee sdk.Coins, _ []sdk.Msg) (bool, error) {
blockTime := ctx.BlockTime()

View File

@ -1,4 +1,4 @@
package types_test
package feegrant_test
import (
"testing"
@ -10,7 +10,7 @@ import (
"github.com/cosmos/cosmos-sdk/simapp"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/x/feegrant/types"
"github.com/cosmos/cosmos-sdk/x/feegrant"
)
func TestPeriodicFeeValidAllow(t *testing.T) {
@ -31,7 +31,7 @@ func TestPeriodicFeeValidAllow(t *testing.T) {
tenMinutes := time.Duration(10) * time.Minute
cases := map[string]struct {
allow types.PeriodicAllowance
allow feegrant.PeriodicAllowance
// all other checks are ignored if valid=false
fee sdk.Coins
blockTime time.Time
@ -43,12 +43,12 @@ func TestPeriodicFeeValidAllow(t *testing.T) {
periodReset time.Time
}{
"empty": {
allow: types.PeriodicAllowance{},
allow: feegrant.PeriodicAllowance{},
valid: false,
},
"only basic": {
allow: types.PeriodicAllowance{
Basic: types.BasicAllowance{
allow: feegrant.PeriodicAllowance{
Basic: feegrant.BasicAllowance{
SpendLimit: atom,
Expiration: &oneHour,
},
@ -56,7 +56,7 @@ func TestPeriodicFeeValidAllow(t *testing.T) {
valid: false,
},
"empty basic": {
allow: types.PeriodicAllowance{
allow: feegrant.PeriodicAllowance{
Period: tenMinutes,
PeriodSpendLimit: smallAtom,
PeriodReset: now.Add(30 * time.Minute),
@ -68,8 +68,8 @@ func TestPeriodicFeeValidAllow(t *testing.T) {
periodReset: now.Add(30 * time.Minute),
},
"mismatched currencies": {
allow: types.PeriodicAllowance{
Basic: types.BasicAllowance{
allow: feegrant.PeriodicAllowance{
Basic: feegrant.BasicAllowance{
SpendLimit: atom,
Expiration: &oneHour,
},
@ -79,8 +79,8 @@ func TestPeriodicFeeValidAllow(t *testing.T) {
valid: false,
},
"same period": {
allow: types.PeriodicAllowance{
Basic: types.BasicAllowance{
allow: feegrant.PeriodicAllowance{
Basic: feegrant.BasicAllowance{
SpendLimit: atom,
Expiration: &twoHours,
},
@ -99,8 +99,8 @@ func TestPeriodicFeeValidAllow(t *testing.T) {
periodReset: now.Add(1 * time.Hour),
},
"step one period": {
allow: types.PeriodicAllowance{
Basic: types.BasicAllowance{
allow: feegrant.PeriodicAllowance{
Basic: feegrant.BasicAllowance{
SpendLimit: atom,
Expiration: &twoHours,
},
@ -118,8 +118,8 @@ func TestPeriodicFeeValidAllow(t *testing.T) {
periodReset: oneHour.Add(10 * time.Minute), // one step from last reset, not now
},
"step limited by global allowance": {
allow: types.PeriodicAllowance{
Basic: types.BasicAllowance{
allow: feegrant.PeriodicAllowance{
Basic: feegrant.BasicAllowance{
SpendLimit: smallAtom,
Expiration: &twoHours,
},
@ -137,8 +137,8 @@ func TestPeriodicFeeValidAllow(t *testing.T) {
periodReset: oneHour.Add(10 * time.Minute), // one step from last reset, not now
},
"expired": {
allow: types.PeriodicAllowance{
Basic: types.BasicAllowance{
allow: feegrant.PeriodicAllowance{
Basic: feegrant.BasicAllowance{
SpendLimit: atom,
Expiration: &now,
},
@ -152,8 +152,8 @@ func TestPeriodicFeeValidAllow(t *testing.T) {
remove: true,
},
"over period limit": {
allow: types.PeriodicAllowance{
Basic: types.BasicAllowance{
allow: feegrant.PeriodicAllowance{
Basic: feegrant.BasicAllowance{
SpendLimit: atom,
Expiration: &now,
},

View File

@ -1,7 +1,7 @@
// Code generated by protoc-gen-gogo. DO NOT EDIT.
// source: cosmos/feegrant/v1beta1/query.proto
package types
package feegrant
import (
context "context"
@ -251,34 +251,34 @@ func init() {
}
var fileDescriptor_59efc303945de53f = []byte{
// 432 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x93, 0xc1, 0xca, 0xd3, 0x40,
0x10, 0xc7, 0xbb, 0x15, 0x95, 0x6e, 0x6f, 0x0b, 0xda, 0x10, 0x24, 0x94, 0x08, 0x55, 0x84, 0xee,
0xda, 0x8a, 0xe2, 0x41, 0x0a, 0x7a, 0xb0, 0x07, 0x2f, 0x9a, 0x83, 0x07, 0x6f, 0x9b, 0x3a, 0xc6,
0x60, 0x9b, 0x4d, 0xb3, 0x5b, 0xb5, 0x4a, 0x2f, 0x3e, 0x81, 0xe0, 0x1b, 0x78, 0xf0, 0xe4, 0x83,
0x78, 0x2c, 0x78, 0xf1, 0xe6, 0x47, 0xfb, 0x3d, 0xc8, 0x47, 0x37, 0xd9, 0x24, 0x5f, 0xdb, 0xd0,
0x9c, 0x92, 0xcd, 0xfc, 0xe7, 0x3f, 0xbf, 0x99, 0xd9, 0xe0, 0xdb, 0x13, 0x21, 0x67, 0x42, 0xb2,
0x77, 0x00, 0x41, 0xc2, 0x23, 0xc5, 0x3e, 0x0e, 0x7c, 0x50, 0x7c, 0xc0, 0xe6, 0x0b, 0x48, 0x96,
0x34, 0x4e, 0x84, 0x12, 0xa4, 0x93, 0x8a, 0xa8, 0x11, 0xd1, 0x4c, 0x64, 0xf7, 0xaa, 0xb2, 0x73,
0xa5, 0x36, 0xb0, 0xef, 0x65, 0x3a, 0x9f, 0x4b, 0x48, 0x9d, 0x73, 0x65, 0xcc, 0x83, 0x30, 0xe2,
0x2a, 0x14, 0x51, 0xa6, 0xbd, 0x15, 0x08, 0x11, 0x4c, 0x81, 0xf1, 0x38, 0x64, 0x3c, 0x8a, 0x84,
0xd2, 0x41, 0x99, 0x46, 0xdd, 0x17, 0xf8, 0xc6, 0xab, 0x5d, 0xfe, 0xd3, 0xe9, 0x54, 0x7c, 0xe2,
0xd1, 0x04, 0x3c, 0x98, 0x2f, 0x40, 0x2a, 0x62, 0xe1, 0xeb, 0xba, 0x22, 0x24, 0x16, 0xea, 0xa2,
0xbb, 0x2d, 0xcf, 0x1c, 0x8b, 0x08, 0x58, 0xcd, 0x72, 0x04, 0xdc, 0xd7, 0xf8, 0xe6, 0xbe, 0x99,
0x8c, 0x45, 0x24, 0x81, 0x3c, 0xc1, 0x2d, 0x6e, 0x3e, 0x6a, 0xbf, 0xf6, 0xd0, 0xa1, 0x15, 0x53,
0xa0, 0xe3, 0xdd, 0xc9, 0x2b, 0x12, 0xdc, 0x2f, 0xfb, 0xbe, 0xf2, 0x80, 0x12, 0x2e, 0x53, 0x02,
0x79, 0x8e, 0x71, 0x31, 0x0a, 0x0d, 0xda, 0x1e, 0xf6, 0x4c, 0xc9, 0xdd, 0xdc, 0x68, 0xba, 0x11,
0x53, 0xf4, 0x25, 0x0f, 0x4c, 0xef, 0x5e, 0x29, 0xd3, 0xfd, 0x89, 0x70, 0xe7, 0xa0, 0x78, 0xd6,
0xd5, 0x08, 0xe3, 0x1c, 0x52, 0x5a, 0xa8, 0x7b, 0xa5, 0x46, 0x5b, 0xa5, 0x0c, 0x32, 0x3e, 0xc2,
0x78, 0xe7, 0x24, 0x63, 0x5a, 0xbc, 0x0c, 0x39, 0xfc, 0xdf, 0xc4, 0x57, 0x35, 0x24, 0xf9, 0x8d,
0x70, 0x2b, 0x27, 0x25, 0xb4, 0x12, 0xe6, 0xe8, 0xd2, 0x6d, 0x56, 0x5b, 0x9f, 0x42, 0xb8, 0xa3,
0x6f, 0x7f, 0xcf, 0x7f, 0x34, 0x1f, 0x93, 0x47, 0xac, 0xea, 0xe6, 0xe6, 0xed, 0xb2, 0xaf, 0xd9,
0x05, 0x5a, 0x99, 0x37, 0x58, 0x91, 0x5f, 0x08, 0xe3, 0x62, 0xb0, 0xa4, 0x6e, 0x7d, 0xb3, 0x7f,
0xfb, 0x7e, 0xfd, 0x84, 0x8c, 0xf8, 0xa1, 0x26, 0x66, 0xa4, 0x7f, 0x9a, 0x58, 0x16, 0xa0, 0xcf,
0xc6, 0x7f, 0x36, 0x0e, 0x5a, 0x6f, 0x1c, 0x74, 0xb6, 0x71, 0xd0, 0xf7, 0xad, 0xd3, 0x58, 0x6f,
0x9d, 0xc6, 0xbf, 0xad, 0xd3, 0x78, 0xd3, 0x0f, 0x42, 0xf5, 0x7e, 0xe1, 0xd3, 0x89, 0x98, 0x19,
0xcb, 0xf4, 0xd1, 0x97, 0x6f, 0x3f, 0xb0, 0xcf, 0x85, 0xbf, 0x5a, 0xc6, 0x20, 0xfd, 0x6b, 0xfa,
0xbf, 0x7b, 0x70, 0x11, 0x00, 0x00, 0xff, 0xff, 0x86, 0xb1, 0x57, 0xa8, 0x29, 0x04, 0x00, 0x00,
// 430 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x4e, 0xce, 0x2f, 0xce,
0xcd, 0x2f, 0xd6, 0x4f, 0x4b, 0x4d, 0x4d, 0x2f, 0x4a, 0xcc, 0x2b, 0xd1, 0x2f, 0x33, 0x4c, 0x4a,
0x2d, 0x49, 0x34, 0xd4, 0x2f, 0x2c, 0x4d, 0x2d, 0xaa, 0xd4, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17,
0x12, 0x87, 0x28, 0xd2, 0x83, 0x29, 0xd2, 0x83, 0x2a, 0x92, 0x52, 0xc3, 0xa5, 0x1b, 0xae, 0x12,
0x6c, 0x80, 0x94, 0x16, 0x54, 0x5d, 0x52, 0x62, 0x71, 0x2a, 0xc4, 0x64, 0xb8, 0xca, 0x82, 0xc4,
0xf4, 0xcc, 0xbc, 0xc4, 0x92, 0xcc, 0xfc, 0x3c, 0xa8, 0x5a, 0x99, 0xf4, 0xfc, 0xfc, 0xf4, 0x9c,
0x54, 0xfd, 0xc4, 0x82, 0x4c, 0xfd, 0xc4, 0xbc, 0xbc, 0xfc, 0x12, 0xb0, 0x64, 0x31, 0x44, 0x56,
0xc9, 0x9b, 0x4b, 0x34, 0x10, 0xa4, 0xdf, 0x31, 0x27, 0x27, 0xbf, 0x3c, 0x31, 0x2f, 0x39, 0x35,
0x28, 0xb5, 0xb0, 0x34, 0xb5, 0xb8, 0x44, 0x48, 0x82, 0x8b, 0x1d, 0x6c, 0x63, 0x6a, 0x91, 0x04,
0xa3, 0x02, 0xa3, 0x06, 0x67, 0x10, 0x8c, 0x8b, 0x90, 0x49, 0x95, 0x60, 0x42, 0x96, 0x49, 0x55,
0x0a, 0xe3, 0x12, 0x43, 0x37, 0xac, 0xb8, 0x20, 0x3f, 0xaf, 0x38, 0x55, 0xc8, 0x86, 0x8b, 0x33,
0x11, 0x26, 0x08, 0x36, 0x8f, 0xdb, 0x48, 0x4e, 0x0f, 0x47, 0x28, 0xe8, 0xb9, 0x83, 0x78, 0x41,
0x08, 0x0d, 0x4a, 0x55, 0xe8, 0xe6, 0x16, 0x63, 0xb8, 0x32, 0x15, 0xd5, 0x95, 0xa9, 0x42, 0x6e,
0x5c, 0x5c, 0x88, 0xa0, 0x00, 0x3b, 0x94, 0xdb, 0x48, 0x0d, 0x66, 0x25, 0x28, 0xdc, 0xf4, 0x20,
0x31, 0x02, 0xb3, 0x34, 0x20, 0x31, 0x1d, 0xe6, 0xf7, 0x20, 0x24, 0x9d, 0x4a, 0x8b, 0x18, 0xb9,
0xc4, 0x31, 0x2c, 0x87, 0xfa, 0xca, 0x8e, 0x8b, 0x0b, 0xee, 0xc8, 0x62, 0x09, 0x46, 0x05, 0x66,
0x22, 0xbc, 0x85, 0xa4, 0x43, 0xc8, 0x1d, 0x8b, 0x1b, 0xd5, 0x09, 0xba, 0x11, 0x62, 0x39, 0xb2,
0x23, 0x8d, 0xee, 0x33, 0x71, 0xb1, 0x82, 0x1d, 0x29, 0xb4, 0x86, 0x91, 0x8b, 0x13, 0xee, 0x52,
0x21, 0x3d, 0x9c, 0x8e, 0xc1, 0x1a, 0xe9, 0x52, 0xfa, 0x44, 0xab, 0x87, 0x38, 0x42, 0xc9, 0xae,
0xe9, 0xf2, 0x93, 0xc9, 0x4c, 0x16, 0x42, 0x66, 0xfa, 0xb8, 0x52, 0x2e, 0xdc, 0xbb, 0xfa, 0xd5,
0xd0, 0x04, 0x54, 0x0b, 0x63, 0xa5, 0xd6, 0x0a, 0x2d, 0x63, 0xe4, 0xe2, 0x42, 0x04, 0xac, 0x10,
0xb1, 0xf6, 0xc3, 0xe2, 0x5f, 0xca, 0x80, 0x78, 0x0d, 0x50, 0x17, 0x9b, 0x82, 0x5d, 0xac, 0x2f,
0xa4, 0x4b, 0xd8, 0xc5, 0xc5, 0x08, 0x87, 0x3a, 0x39, 0x9e, 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91,
0x1c, 0xe3, 0x83, 0x47, 0x72, 0x8c, 0x13, 0x1e, 0xcb, 0x31, 0x5c, 0x78, 0x2c, 0xc7, 0x70, 0xe3,
0xb1, 0x1c, 0x43, 0x94, 0x7a, 0x7a, 0x66, 0x49, 0x46, 0x69, 0x92, 0x5e, 0x72, 0x7e, 0x2e, 0xcc,
0x48, 0x08, 0xa5, 0x5b, 0x9c, 0x92, 0xad, 0x5f, 0x01, 0x37, 0x3f, 0x89, 0x0d, 0x9c, 0xe3, 0x8c,
0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0x19, 0x08, 0xf0, 0xae, 0x23, 0x04, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.

View File

@ -2,11 +2,11 @@
// source: cosmos/feegrant/v1beta1/query.proto
/*
Package types is a reverse proxy.
Package feegrant is a reverse proxy.
It translates gRPC into RESTful JSON APIs.
*/
package types
package feegrant
import (
"context"

View File

@ -6,7 +6,7 @@ import (
"github.com/cosmos/cosmos-sdk/codec"
"github.com/cosmos/cosmos-sdk/types/kv"
"github.com/cosmos/cosmos-sdk/x/feegrant/types"
"github.com/cosmos/cosmos-sdk/x/feegrant"
)
// NewDecodeStore returns a decoder function closure that unmarshals the KVPair's
@ -14,8 +14,8 @@ import (
func NewDecodeStore(cdc codec.Codec) func(kvA, kvB kv.Pair) string {
return func(kvA, kvB kv.Pair) string {
switch {
case bytes.Equal(kvA.Key[:1], types.FeeAllowanceKeyPrefix):
var grantA, grantB types.Grant
case bytes.Equal(kvA.Key[:1], feegrant.FeeAllowanceKeyPrefix):
var grantA, grantB feegrant.Grant
cdc.MustUnmarshal(kvA.Value, &grantA)
cdc.MustUnmarshal(kvB.Value, &grantB)
return fmt.Sprintf("%v\n%v", grantA, grantB)

View File

@ -10,8 +10,8 @@ import (
"github.com/cosmos/cosmos-sdk/simapp"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/kv"
"github.com/cosmos/cosmos-sdk/x/feegrant"
"github.com/cosmos/cosmos-sdk/x/feegrant/simulation"
"github.com/cosmos/cosmos-sdk/x/feegrant/types"
)
var (
@ -25,7 +25,7 @@ func TestDecodeStore(t *testing.T) {
cdc := simapp.MakeTestEncodingConfig().Marshaler
dec := simulation.NewDecodeStore(cdc)
grant, err := types.NewGrant(granterAddr, granteeAddr, &types.BasicAllowance{
grant, err := feegrant.NewGrant(granterAddr, granteeAddr, &feegrant.BasicAllowance{
SpendLimit: sdk.NewCoins(sdk.NewCoin("foo", sdk.NewInt(100))),
})
@ -36,7 +36,7 @@ func TestDecodeStore(t *testing.T) {
kvPairs := kv.Pairs{
Pairs: []kv.Pair{
{Key: []byte(types.FeeAllowanceKeyPrefix), Value: grantBz},
{Key: []byte(feegrant.FeeAllowanceKeyPrefix), Value: grantBz},
{Key: []byte{0x99}, Value: []byte{0x99}},
},
}

View File

@ -8,15 +8,12 @@ import (
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/module"
simtypes "github.com/cosmos/cosmos-sdk/types/simulation"
"github.com/cosmos/cosmos-sdk/x/feegrant/types"
"github.com/cosmos/cosmos-sdk/x/feegrant"
)
// Simulation parameter constants
const feegrant = "feegrant"
// genFeeGrants returns a slice of randomly generated allowances.
func genFeeGrants(r *rand.Rand, accounts []simtypes.Account) []types.Grant {
allowances := make([]types.Grant, len(accounts)-1)
func genFeeGrants(r *rand.Rand, accounts []simtypes.Account) []feegrant.Grant {
allowances := make([]feegrant.Grant, len(accounts)-1)
for i := 0; i < len(accounts)-1; i++ {
granter := accounts[i].Address
grantee := accounts[i+1].Address
@ -25,22 +22,22 @@ func genFeeGrants(r *rand.Rand, accounts []simtypes.Account) []types.Grant {
return allowances
}
func generateRandomAllowances(granter, grantee sdk.AccAddress, r *rand.Rand) types.Grant {
allowances := make([]types.Grant, 3)
func generateRandomAllowances(granter, grantee sdk.AccAddress, r *rand.Rand) feegrant.Grant {
allowances := make([]feegrant.Grant, 3)
spendLimit := sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(100)))
periodSpendLimit := sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(10)))
basic := types.BasicAllowance{
basic := feegrant.BasicAllowance{
SpendLimit: spendLimit,
}
basicAllowance, err := types.NewGrant(granter, grantee, &basic)
basicAllowance, err := feegrant.NewGrant(granter, grantee, &basic)
if err != nil {
panic(err)
}
allowances[0] = basicAllowance
periodicAllowance, err := types.NewGrant(granter, grantee, &types.PeriodicAllowance{
periodicAllowance, err := feegrant.NewGrant(granter, grantee, &feegrant.PeriodicAllowance{
Basic: basic,
PeriodSpendLimit: periodSpendLimit,
Period: time.Hour,
@ -50,7 +47,7 @@ func generateRandomAllowances(granter, grantee sdk.AccAddress, r *rand.Rand) typ
}
allowances[1] = periodicAllowance
filteredAllowance, err := types.NewGrant(granter, grantee, &types.AllowedMsgAllowance{
filteredAllowance, err := feegrant.NewGrant(granter, grantee, &feegrant.AllowedMsgAllowance{
Allowance: basicAllowance.GetAllowance(),
AllowedMessages: []string{"/cosmos.gov.v1beta1.MsgSubmitProposal"},
})
@ -64,19 +61,19 @@ func generateRandomAllowances(granter, grantee sdk.AccAddress, r *rand.Rand) typ
// RandomizedGenState generates a random GenesisState for feegrant
func RandomizedGenState(simState *module.SimulationState) {
var feegrants []types.Grant
var feegrants []feegrant.Grant
simState.AppParams.GetOrGenerate(
simState.Cdc, feegrant, &feegrants, simState.Rand,
simState.Cdc, "feegrant", &feegrants, simState.Rand,
func(r *rand.Rand) { feegrants = genFeeGrants(r, simState.Accounts) },
)
feegrantGenesis := types.NewGenesisState(feegrants)
feegrantGenesis := feegrant.NewGenesisState(feegrants)
bz, err := simState.Cdc.MarshalJSON(feegrantGenesis)
if err != nil {
panic(err)
}
fmt.Printf("Selected randomly generated %s parameters:\n%s\n", types.ModuleName, bz)
simState.GenState[types.ModuleName] = bz
fmt.Printf("Selected randomly generated %s parameters:\n%s\n", feegrant.ModuleName, bz)
simState.GenState[feegrant.ModuleName] = bz
}

View File

@ -10,8 +10,8 @@ import (
"github.com/cosmos/cosmos-sdk/simapp"
"github.com/cosmos/cosmos-sdk/types/module"
simtypes "github.com/cosmos/cosmos-sdk/types/simulation"
"github.com/cosmos/cosmos-sdk/x/feegrant"
"github.com/cosmos/cosmos-sdk/x/feegrant/simulation"
"github.com/cosmos/cosmos-sdk/x/feegrant/types"
)
func TestRandomizedGenState(t *testing.T) {
@ -33,8 +33,8 @@ func TestRandomizedGenState(t *testing.T) {
}
simulation.RandomizedGenState(&simState)
var feegrantGenesis types.GenesisState
simState.Cdc.MustUnmarshalJSON(simState.GenState[types.ModuleName], &feegrantGenesis)
var feegrantGenesis feegrant.GenesisState
simState.Cdc.MustUnmarshalJSON(simState.GenState[feegrant.ModuleName], &feegrantGenesis)
require.Len(t, feegrantGenesis.Allowances, len(accounts)-1)
}

View File

@ -11,70 +11,70 @@ import (
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/msgservice"
simtypes "github.com/cosmos/cosmos-sdk/types/simulation"
"github.com/cosmos/cosmos-sdk/x/feegrant"
"github.com/cosmos/cosmos-sdk/x/feegrant/keeper"
"github.com/cosmos/cosmos-sdk/x/feegrant/types"
"github.com/cosmos/cosmos-sdk/x/simulation"
)
// Simulation operation weights constants
const (
OpWeightMsgGrantFeeAllowance = "op_weight_msg_grant_fee_allowance"
OpWeightMsgRevokeFeeAllowance = "op_weight_msg_grant_revoke_allowance"
OpWeightMsgGrantAllowance = "op_weight_msg_grant_fee_allowance"
OpWeightMsgRevokeAllowance = "op_weight_msg_grant_revoke_allowance"
)
var (
TypeMsgGrantFeeAllowance = sdk.MsgTypeURL(&types.MsgGrantAllowance{})
TypeMsgRevokeFeeAllowance = sdk.MsgTypeURL(&types.MsgRevokeAllowance{})
TypeMsgGrantAllowance = sdk.MsgTypeURL(&feegrant.MsgGrantAllowance{})
TypeMsgRevokeAllowance = sdk.MsgTypeURL(&feegrant.MsgRevokeAllowance{})
)
func WeightedOperations(
appParams simtypes.AppParams, cdc codec.JSONCodec,
ak types.AccountKeeper, bk types.BankKeeper, k keeper.Keeper,
ak feegrant.AccountKeeper, bk feegrant.BankKeeper, k keeper.Keeper,
protoCdc *codec.ProtoCodec,
) simulation.WeightedOperations {
var (
weightMsgGrantFeeAllowance int
weightMsgRevokeFeeAllowance int
weightMsgGrantAllowance int
weightMsgRevokeAllowance int
)
appParams.GetOrGenerate(cdc, OpWeightMsgGrantFeeAllowance, &weightMsgGrantFeeAllowance, nil,
appParams.GetOrGenerate(cdc, OpWeightMsgGrantAllowance, &weightMsgGrantAllowance, nil,
func(_ *rand.Rand) {
weightMsgGrantFeeAllowance = simappparams.DefaultWeightGrantFeeAllowance
weightMsgGrantAllowance = simappparams.DefaultWeightGrantAllowance
},
)
appParams.GetOrGenerate(cdc, OpWeightMsgRevokeFeeAllowance, &weightMsgRevokeFeeAllowance, nil,
appParams.GetOrGenerate(cdc, OpWeightMsgRevokeAllowance, &weightMsgRevokeAllowance, nil,
func(_ *rand.Rand) {
weightMsgRevokeFeeAllowance = simappparams.DefaultWeightRevokeFeeAllowance
weightMsgRevokeAllowance = simappparams.DefaultWeightRevokeAllowance
},
)
return simulation.WeightedOperations{
simulation.NewWeightedOperation(
weightMsgGrantFeeAllowance,
SimulateMsgGrantFeeAllowance(ak, bk, k, protoCdc),
weightMsgGrantAllowance,
SimulateMsgGrantAllowance(ak, bk, k, protoCdc),
),
simulation.NewWeightedOperation(
weightMsgRevokeFeeAllowance,
SimulateMsgRevokeFeeAllowance(ak, bk, k, protoCdc),
weightMsgRevokeAllowance,
SimulateMsgRevokeAllowance(ak, bk, k, protoCdc),
),
}
}
// SimulateMsgGrantFeeAllowance generates MsgGrantFeeAllowance with random values.
func SimulateMsgGrantFeeAllowance(ak types.AccountKeeper, bk types.BankKeeper, k keeper.Keeper, protoCdc *codec.ProtoCodec) simtypes.Operation {
// SimulateMsgGrantAllowance generates MsgGrantAllowance with random values.
func SimulateMsgGrantAllowance(ak feegrant.AccountKeeper, bk feegrant.BankKeeper, k keeper.Keeper, protoCdc *codec.ProtoCodec) simtypes.Operation {
return func(
r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string,
) (simtypes.OperationMsg, []simtypes.FutureOperation, error) {
granter, _ := simtypes.RandomAcc(r, accs)
grantee, _ := simtypes.RandomAcc(r, accs)
if grantee.Address.String() == granter.Address.String() {
return simtypes.NoOpMsg(types.ModuleName, TypeMsgGrantFeeAllowance, "grantee and granter cannot be same"), nil, nil
return simtypes.NoOpMsg(feegrant.ModuleName, TypeMsgGrantAllowance, "grantee and granter cannot be same"), nil, nil
}
if f, _ := k.GetAllowance(ctx, granter.Address, grantee.Address); f != nil {
return simtypes.NoOpMsg(types.ModuleName, TypeMsgGrantFeeAllowance, "fee allowance exists"), nil, nil
return simtypes.NoOpMsg(feegrant.ModuleName, TypeMsgGrantAllowance, "fee allowance exists"), nil, nil
}
account := ak.GetAccount(ctx, granter.Address)
@ -82,29 +82,29 @@ func SimulateMsgGrantFeeAllowance(ak types.AccountKeeper, bk types.BankKeeper, k
spendableCoins := bk.SpendableCoins(ctx, account.GetAddress())
fees, err := simtypes.RandomFees(r, ctx, spendableCoins)
if err != nil {
return simtypes.NoOpMsg(types.ModuleName, TypeMsgGrantFeeAllowance, err.Error()), nil, err
return simtypes.NoOpMsg(feegrant.ModuleName, TypeMsgGrantAllowance, err.Error()), nil, err
}
spendableCoins = spendableCoins.Sub(fees)
if spendableCoins.Empty() {
return simtypes.NoOpMsg(types.ModuleName, TypeMsgGrantFeeAllowance, "unable to grant empty coins as SpendLimit"), nil, nil
return simtypes.NoOpMsg(feegrant.ModuleName, TypeMsgGrantAllowance, "unable to grant empty coins as SpendLimit"), nil, nil
}
oneYear := ctx.BlockTime().AddDate(1, 0, 0)
msg, err := types.NewMsgGrantAllowance(&types.BasicAllowance{
msg, err := feegrant.NewMsgGrantAllowance(&feegrant.BasicAllowance{
SpendLimit: spendableCoins,
Expiration: &oneYear,
}, granter.Address, grantee.Address)
if err != nil {
return simtypes.NoOpMsg(types.ModuleName, TypeMsgGrantFeeAllowance, err.Error()), nil, err
return simtypes.NoOpMsg(feegrant.ModuleName, TypeMsgGrantAllowance, err.Error()), nil, err
}
txGen := simappparams.MakeTestEncodingConfig().TxConfig
svcMsgClientConn := &msgservice.ServiceMsgClientConn{}
feegrantMsgClient := types.NewMsgClient(svcMsgClientConn)
feegrantMsgClient := feegrant.NewMsgClient(svcMsgClientConn)
_, err = feegrantMsgClient.GrantAllowance(context.Background(), msg)
if err != nil {
return simtypes.NoOpMsg(types.ModuleName, TypeMsgGrantFeeAllowance, err.Error()), nil, err
return simtypes.NoOpMsg(feegrant.ModuleName, TypeMsgGrantAllowance, err.Error()), nil, err
}
tx, err := helpers.GenTx(
txGen,
@ -118,20 +118,20 @@ func SimulateMsgGrantFeeAllowance(ak types.AccountKeeper, bk types.BankKeeper, k
)
if err != nil {
return simtypes.NoOpMsg(types.ModuleName, TypeMsgGrantFeeAllowance, "unable to generate mock tx"), nil, err
return simtypes.NoOpMsg(feegrant.ModuleName, TypeMsgGrantAllowance, "unable to generate mock tx"), nil, err
}
_, _, err = app.Deliver(txGen.TxEncoder(), tx)
if err != nil {
return simtypes.NoOpMsg(types.ModuleName, sdk.MsgTypeURL(svcMsgClientConn.GetMsgs()[0]), "unable to deliver tx"), nil, err
return simtypes.NoOpMsg(feegrant.ModuleName, sdk.MsgTypeURL(svcMsgClientConn.GetMsgs()[0]), "unable to deliver tx"), nil, err
}
return simtypes.NewOperationMsg(svcMsgClientConn.GetMsgs()[0], true, "", protoCdc), nil, err
}
}
// SimulateMsgRevokeFeeAllowance generates a MsgRevokeFeeAllowance with random values.
func SimulateMsgRevokeFeeAllowance(ak types.AccountKeeper, bk types.BankKeeper, k keeper.Keeper, protoCdc *codec.ProtoCodec) simtypes.Operation {
// SimulateMsgRevokeAllowance generates a MsgRevokeAllowance with random values.
func SimulateMsgRevokeAllowance(ak feegrant.AccountKeeper, bk feegrant.BankKeeper, k keeper.Keeper, protoCdc *codec.ProtoCodec) simtypes.Operation {
return func(
r *rand.Rand, app *baseapp.BaseApp, ctx sdk.Context, accs []simtypes.Account, chainID string,
) (simtypes.OperationMsg, []simtypes.FutureOperation, error) {
@ -139,7 +139,7 @@ func SimulateMsgRevokeFeeAllowance(ak types.AccountKeeper, bk types.BankKeeper,
hasGrant := false
var granterAddr sdk.AccAddress
var granteeAddr sdk.AccAddress
k.IterateAllFeeAllowances(ctx, func(grant types.Grant) bool {
k.IterateAllFeeAllowances(ctx, func(grant feegrant.Grant) bool {
granter, err := sdk.AccAddressFromBech32(grant.Granter)
if err != nil {
@ -156,29 +156,29 @@ func SimulateMsgRevokeFeeAllowance(ak types.AccountKeeper, bk types.BankKeeper,
})
if !hasGrant {
return simtypes.NoOpMsg(types.ModuleName, TypeMsgRevokeFeeAllowance, "no grants"), nil, nil
return simtypes.NoOpMsg(feegrant.ModuleName, TypeMsgRevokeAllowance, "no grants"), nil, nil
}
granter, ok := simtypes.FindAccount(accs, granterAddr)
if !ok {
return simtypes.NoOpMsg(types.ModuleName, TypeMsgRevokeFeeAllowance, "Account not found"), nil, nil
return simtypes.NoOpMsg(feegrant.ModuleName, TypeMsgRevokeAllowance, "Account not found"), nil, nil
}
account := ak.GetAccount(ctx, granter.Address)
spendableCoins := bk.SpendableCoins(ctx, account.GetAddress())
fees, err := simtypes.RandomFees(r, ctx, spendableCoins)
if err != nil {
return simtypes.NoOpMsg(types.ModuleName, TypeMsgRevokeFeeAllowance, err.Error()), nil, err
return simtypes.NoOpMsg(feegrant.ModuleName, TypeMsgRevokeAllowance, err.Error()), nil, err
}
msg := types.NewMsgRevokeAllowance(granterAddr, granteeAddr)
msg := feegrant.NewMsgRevokeAllowance(granterAddr, granteeAddr)
txGen := simappparams.MakeTestEncodingConfig().TxConfig
svcMsgClientConn := &msgservice.ServiceMsgClientConn{}
feegrantMsgClient := types.NewMsgClient(svcMsgClientConn)
feegrantMsgClient := feegrant.NewMsgClient(svcMsgClientConn)
_, err = feegrantMsgClient.RevokeAllowance(context.Background(), &msg)
if err != nil {
return simtypes.NoOpMsg(types.ModuleName, TypeMsgGrantFeeAllowance, err.Error()), nil, err
return simtypes.NoOpMsg(feegrant.ModuleName, TypeMsgGrantAllowance, err.Error()), nil, err
}
tx, err := helpers.GenTx(
@ -193,7 +193,7 @@ func SimulateMsgRevokeFeeAllowance(ak types.AccountKeeper, bk types.BankKeeper,
)
if err != nil {
return simtypes.NoOpMsg(types.ModuleName, TypeMsgRevokeFeeAllowance, err.Error()), nil, err
return simtypes.NoOpMsg(feegrant.ModuleName, TypeMsgRevokeAllowance, err.Error()), nil, err
}
_, _, err = app.Deliver(txGen.TxEncoder(), tx)

View File

@ -15,8 +15,8 @@ import (
simappparams "github.com/cosmos/cosmos-sdk/simapp/params"
sdk "github.com/cosmos/cosmos-sdk/types"
simtypes "github.com/cosmos/cosmos-sdk/types/simulation"
"github.com/cosmos/cosmos-sdk/x/feegrant"
"github.com/cosmos/cosmos-sdk/x/feegrant/simulation"
"github.com/cosmos/cosmos-sdk/x/feegrant/types"
)
type SimTestSuite struct {
@ -78,14 +78,14 @@ func (suite *SimTestSuite) TestWeightedOperations() {
opMsgName string
}{
{
simappparams.DefaultWeightGrantFeeAllowance,
types.ModuleName,
simulation.TypeMsgGrantFeeAllowance,
simappparams.DefaultWeightGrantAllowance,
feegrant.ModuleName,
simulation.TypeMsgGrantAllowance,
},
{
simappparams.DefaultWeightRevokeFeeAllowance,
types.ModuleName,
simulation.TypeMsgRevokeFeeAllowance,
simappparams.DefaultWeightRevokeAllowance,
feegrant.ModuleName,
simulation.TypeMsgRevokeAllowance,
},
}
@ -100,7 +100,7 @@ func (suite *SimTestSuite) TestWeightedOperations() {
}
}
func (suite *SimTestSuite) TestSimulateMsgGrantFeeAllowance() {
func (suite *SimTestSuite) TestSimulateMsgGrantAllowance() {
app, ctx := suite.app, suite.ctx
require := suite.Require()
@ -112,11 +112,11 @@ func (suite *SimTestSuite) TestSimulateMsgGrantFeeAllowance() {
app.BeginBlock(abci.RequestBeginBlock{Header: tmproto.Header{Height: app.LastBlockHeight() + 1, AppHash: app.LastCommitID().Hash}})
// execute operation
op := simulation.SimulateMsgGrantFeeAllowance(app.AccountKeeper, app.BankKeeper, app.FeeGrantKeeper, suite.protoCdc)
op := simulation.SimulateMsgGrantAllowance(app.AccountKeeper, app.BankKeeper, app.FeeGrantKeeper, suite.protoCdc)
operationMsg, futureOperations, err := op(r, app.BaseApp, ctx, accounts, "")
require.NoError(err)
var msg types.MsgGrantAllowance
var msg feegrant.MsgGrantAllowance
suite.app.AppCodec().UnmarshalJSON(operationMsg.Msg, &msg)
require.True(operationMsg.OK)
@ -125,7 +125,7 @@ func (suite *SimTestSuite) TestSimulateMsgGrantFeeAllowance() {
require.Len(futureOperations, 0)
}
func (suite *SimTestSuite) TestSimulateMsgRevokeFeeAllowance() {
func (suite *SimTestSuite) TestSimulateMsgRevokeAllowance() {
app, ctx := suite.app, suite.ctx
require := suite.Require()
@ -146,7 +146,7 @@ func (suite *SimTestSuite) TestSimulateMsgRevokeFeeAllowance() {
ctx,
granter.Address,
grantee.Address,
&types.BasicAllowance{
&feegrant.BasicAllowance{
SpendLimit: feeCoins,
Expiration: &oneYear,
},
@ -154,11 +154,11 @@ func (suite *SimTestSuite) TestSimulateMsgRevokeFeeAllowance() {
require.NoError(err)
// execute operation
op := simulation.SimulateMsgRevokeFeeAllowance(app.AccountKeeper, app.BankKeeper, app.FeeGrantKeeper, suite.protoCdc)
op := simulation.SimulateMsgRevokeAllowance(app.AccountKeeper, app.BankKeeper, app.FeeGrantKeeper, suite.protoCdc)
operationMsg, futureOperations, err := op(r, app.BaseApp, ctx, accounts, "")
require.NoError(err)
var msg types.MsgRevokeAllowance
var msg feegrant.MsgRevokeAllowance
suite.app.AppCodec().UnmarshalJSON(operationMsg.Msg, &msg)
require.True(operationMsg.OK)

View File

@ -3,27 +3,28 @@ order: 1
-->
# Concepts
## FeeAllowanceGrant
`FeeAllowanceGrant` is stored in the KVStore to record a grant with full context. Every grant will contain `granter`, `grantee` and what kind of `allowance` is granted. `granter` is an account address who is giving permission to `grantee` (the beneficiary account address) to pay for some or all of `grantee`'s transaction fees. `allowance` defines what kind of fee allowance (`BasicFeeAllowance` or `PeriodicFeeAllowance`, see below) is granted to `grantee`. `allowance` accepts an interface which implements `FeeAllowanceI`, encoded as `Any` type. There can be only one existing fee grant allowed for a `grantee` and `granter`, self grants are not allowed.
## Grant
+++ https://github.com/cosmos/cosmos-sdk/blob/d97e7907f176777ed8a464006d360bb3e1a223e4/proto/cosmos/feegrant/v1beta1/feegrant.proto#L75-L81
`Grant` is stored in the KVStore to record a grant with full context. Every grant will contain `granter`, `grantee` and what kind of `allowance` is granted. `granter` is an account address who is giving permission to `grantee` (the beneficiary account address) to pay for some or all of `grantee`'s transaction fees. `allowance` defines what kind of fee allowance (`BasicAllowance` or `PeriodicAllowance`, see below) is granted to `grantee`. `allowance` accepts an interface which implements `FeeAllowanceI`, encoded as `Any` type. There can be only one existing fee grant allowed for a `grantee` and `granter`, self grants are not allowed.
+++ https://github.com/cosmos/cosmos-sdk/blob/691032b8be0f7539ec99f8882caecefc51f33d1f/proto/cosmos/feegrant/v1beta1/feegrant.proto#L75-L81
`FeeAllowanceI` looks like:
+++ https://github.com/cosmos/cosmos-sdk/blob/d97e7907f176777ed8a464006d360bb3e1a223e4/x/feegrant/types/fees.go#L9-L32
+++ https://github.com/cosmos/cosmos-sdk/blob/691032b8be0f7539ec99f8882caecefc51f33d1f/x/feegrant/fees.go#L9-L32
## Fee Allowance types
There are two types of fee allowances present at the moment:
- `BasicFeeAllowance`
- `PeriodicFeeAllowance`
- `BasicAllowance`
- `PeriodicAllowance`
## BasicFeeAllowance
## BasicAllowance
`BasicFeeAllowance` is permission for `grantee` to use fee from a `granter`'s account. If any of the `spend_limit` or `expiration` reaches its limit, the grant will be removed from the state.
`BasicAllowance` is permission for `grantee` to use fee from a `granter`'s account. If any of the `spend_limit` or `expiration` reaches its limit, the grant will be removed from the state.
+++ https://github.com/cosmos/cosmos-sdk/blob/d97e7907f176777ed8a464006d360bb3e1a223e4/proto/cosmos/feegrant/v1beta1/feegrant.proto#L13-L26
+++ https://github.com/cosmos/cosmos-sdk/blob/691032b8be0f7539ec99f8882caecefc51f33d1f/proto/cosmos/feegrant/v1beta1/feegrant.proto#L13-L26
- `spend_limit` is the limit of coins that are allowed to be used from the `granter` account. If it is empty, it assumes there's no spend limit, `grantee` can use any number of available tokens from `granter` account address before the expiration.
@ -31,15 +32,15 @@ There are two types of fee allowances present at the moment:
- When a grant is created with empty values for `spend_limit` and `expiration`, it is still a valid grant. It won't restrict the `grantee` to use any number of tokens from `granter` and it won't have any expiration. The only way to restrict the `grantee` is by revoking the grant.
## PeriodicFeeAllowance
## PeriodicAllowance
`PeriodicFeeAllowance` is a repeating fee allowance for the mentioned period, we can mention when the grant can expire as well as when a period can reset. We can also define the maximum number of coins that can be used in a mentioned period of time.
`PeriodicAllowance` is a repeating fee allowance for the mentioned period, we can mention when the grant can expire as well as when a period can reset. We can also define the maximum number of coins that can be used in a mentioned period of time.
+++ https://github.com/cosmos/cosmos-sdk/blob/d97e7907f176777ed8a464006d360bb3e1a223e4/proto/cosmos/feegrant/v1beta1/feegrant.proto#L28-L73
+++ https://github.com/cosmos/cosmos-sdk/blob/691032b8be0f7539ec99f8882caecefc51f33d1f/proto/cosmos/feegrant/v1beta1/feegrant.proto#L28-L73
- `basic` is the instance of `BasicFeeAllowance` which is optional for periodic fee allowance. If empty, the grant will have no `expiration` and no `spend_limit`.
- `basic` is the instance of `BasicAllowance` which is optional for periodic fee allowance. If empty, the grant will have no `expiration` and no `spend_limit`.
- `period` is the specific period of time or blocks, after each period passes, `period_spend_limit` will be reset.
- `period` is the specific period of time, after each period passes, `period_spend_limit` will be reset.
- `period_spend_limit` specifies the maximum number of coins that can be spent in the period.

View File

@ -8,8 +8,8 @@ order: 2
Fee Allowances are identified by combining `Grantee` (the account address of fee allowance grantee) with the `Granter` (the account address of fee allowance granter).
Fee allowances are stored in the state as follows:
Fee allowance grants are stored in the state as follows:
- FeeAllowance: `0x00 | grantee_addr_len (1 byte) | grantee_addr_bytes | granter_addr_len (1 byte) | granter_addr_bytes -> ProtocolBuffer(FeeAllowance)`
- Grant: `0x00 | grantee_addr_len (1 byte) | grantee_addr_bytes | granter_addr_len (1 byte) | granter_addr_bytes -> ProtocolBuffer(Grant)`
+++ https://github.com/cosmos/cosmos-sdk/blob/d97e7907f176777ed8a464006d360bb3e1a223e4/x/feegrant/types/feegrant.pb.go#L358-L363
+++ https://github.com/cosmos/cosmos-sdk/blob/691032b8be0f7539ec99f8882caecefc51f33d1f/x/feegrant/feegrant.pb.go#L221-L229

View File

@ -4,14 +4,14 @@ order: 3
# Messages
## Msg/GrantFeeAllowance
## Msg/GrantAllowance
A fee allowance grant will be created with the `MsgGrantFeeAllowance` message.
A fee allowance grant will be created with the `MsgGrantAllowance` message.
+++ https://github.com/cosmos/cosmos-sdk/blob/d97e7907f176777ed8a464006d360bb3e1a223e4/proto/cosmos/feegrant/v1beta1/tx.proto#L22-L28
+++ https://github.com/cosmos/cosmos-sdk/blob/691032b8be0f7539ec99f8882caecefc51f33d1f/proto/cosmos/feegrant/v1beta1/tx.proto#L22-L33
## Msg/RevokeFeeAllowance
## Msg/RevokeAllowance
An allowed grant fee allowance can be removed with the `MsgRevokeFeeAllowance` message.
An allowed grant fee allowance can be removed with the `MsgRevokeAllowance` message.
+++ https://github.com/cosmos/cosmos-sdk/blob/d97e7907f176777ed8a464006d360bb3e1a223e4/proto/cosmos/feegrant/v1beta1/tx.proto#L33-L37
+++ https://github.com/cosmos/cosmos-sdk/blob/691032b8be0f7539ec99f8882caecefc51f33d1f/proto/cosmos/feegrant/v1beta1/tx.proto#L38-L45

View File

@ -8,7 +8,7 @@ The feegrant module emits the following events:
# Msg Server
### MsgGrantFeeAllowance
### MsgGrantAllowance
| Type | Attribute Key | Attribute Value |
| -------- | ------------- | ------------------ |
@ -16,7 +16,7 @@ The feegrant module emits the following events:
| message | granter | {granterAddress} |
| message | grantee | {granteeAddress} |
### MsgRevokeFeeAllowance
### MsgRevokeAllowance
| Type | Attribute Key | Attribute Value |
| -------- | ------------- | ------------------ |

View File

@ -14,20 +14,20 @@ This module allows accounts to grant fee allowances and to use fees from their a
## Contents
1. **[Concepts](01_concepts.md)**
- [FeeAllowanceGrant](01_concepts.md#feeallowancegrant)
- [Grant](01_concepts.md#grant)
- [Fee Allowance types](01_concepts.md#fee-allowance-types)
- [BasicFeeAllowance](01_concepts.md#basicfeeallowance)
- [PeriodicFeeAllowance](01_concepts.md#periodicfeeallowance)
- [BasicAllowance](01_concepts.md#basicallowance)
- [PeriodicAllowance](01_concepts.md#periodicallowance)
- [FeeAccount flag](01_concepts.md#feeaccount-flag)
- [Granted Fee Deductions](01_concepts.md#granted-fee-deductions)
- [Gas](01_concepts.md#gas)
2. **[State](02_state.md)**
- [FeeAllowance](02_state.md#feeallowance)
3. **[Messages](03_messages.md)**
- [Msg/GrantFeeAllowance](03_messages.md#msggrantfeeallowance)
- [Msg/RevokeFeeAllowance](03_messages.md#msgrevokefeeallowance)
- [Msg/GrantAllowance](03_messages.md#msggrantallowance)
- [Msg/RevokeAllowance](03_messages.md#msgrevokeallowance)
4. **[Events](04_events.md)**
- [MsgGrantFeeAllowance](04_events.md#msggrantfeeallowance)
- [MsgrevokeFeeAllowance](04_events.md#msgrevokefeeallowance)
- [MsgGrantAllowance](04_events.md#msggrantallowance)
- [MsgRevokeAllowance](04_events.md#msgrevokeallowance)
- [Exec fee allowance](04_events.md#exec-fee-allowance)

View File

@ -1,7 +1,7 @@
// Code generated by protoc-gen-gogo. DO NOT EDIT.
// source: cosmos/feegrant/v1beta1/tx.proto
package types
package feegrant
import (
context "context"
@ -234,29 +234,29 @@ func init() {
func init() { proto.RegisterFile("cosmos/feegrant/v1beta1/tx.proto", fileDescriptor_dd44ad7946dad783) }
var fileDescriptor_dd44ad7946dad783 = []byte{
// 344 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x92, 0xc1, 0x4e, 0xc2, 0x40,
0x10, 0x86, 0x59, 0x49, 0x34, 0xac, 0x51, 0x43, 0x43, 0x62, 0xa9, 0x66, 0x43, 0x7a, 0x22, 0x1a,
0x76, 0x03, 0x3c, 0x01, 0x24, 0x8a, 0x1e, 0xb8, 0xf4, 0xe8, 0xc5, 0xb4, 0x38, 0xac, 0x06, 0xe8,
0x34, 0xec, 0x82, 0xf0, 0x12, 0xc6, 0x87, 0xf1, 0x21, 0x8c, 0x27, 0x8e, 0x1e, 0x0d, 0x5c, 0x7d,
0x08, 0x43, 0xdb, 0x15, 0x03, 0xd1, 0x68, 0x3c, 0xb5, 0x93, 0xf9, 0xe6, 0xff, 0xff, 0x76, 0x86,
0x96, 0x3a, 0xa8, 0x06, 0xa8, 0x44, 0x17, 0x40, 0x0e, 0xfd, 0x50, 0x8b, 0x71, 0x35, 0x00, 0xed,
0x57, 0x85, 0x9e, 0xf0, 0x68, 0x88, 0x1a, 0xad, 0xc3, 0x84, 0xe0, 0x86, 0xe0, 0x29, 0xe1, 0x14,
0x24, 0x4a, 0x8c, 0x19, 0xb1, 0x7c, 0x4b, 0x70, 0xa7, 0x28, 0x11, 0x65, 0x1f, 0x44, 0x5c, 0x05,
0xa3, 0xae, 0xf0, 0xc3, 0xa9, 0x69, 0x25, 0x4a, 0xd7, 0xc9, 0x4c, 0x2a, 0x1b, 0x17, 0xee, 0x03,
0xa1, 0xf9, 0xb6, 0x92, 0xad, 0xa5, 0x41, 0xa3, 0xdf, 0xc7, 0x7b, 0x3f, 0xec, 0x80, 0x65, 0xd3,
0x9d, 0xd8, 0x12, 0x86, 0x36, 0x29, 0x91, 0x72, 0xce, 0x33, 0xe5, 0xaa, 0x03, 0xf6, 0xd6, 0xd7,
0x0e, 0x58, 0x67, 0x34, 0xe7, 0x1b, 0x01, 0x3b, 0x5b, 0x22, 0xe5, 0xdd, 0x5a, 0x81, 0x27, 0x99,
0xb8, 0xc9, 0xc4, 0x1b, 0xe1, 0xb4, 0x99, 0x7f, 0x79, 0xaa, 0xec, 0x9d, 0x03, 0x7c, 0xda, 0x5d,
0x7a, 0xab, 0x49, 0xf7, 0x88, 0x16, 0x37, 0xf2, 0x78, 0xa0, 0x22, 0x0c, 0x15, 0xb8, 0x17, 0xd4,
0x6a, 0x2b, 0xe9, 0xc1, 0x18, 0x7b, 0xf0, 0xaf, 0xb4, 0xee, 0x31, 0x75, 0x36, 0x95, 0x8c, 0x4f,
0xed, 0x9d, 0xd0, 0x6c, 0x5b, 0x49, 0x2b, 0xa2, 0xfb, 0x6b, 0x7f, 0xe6, 0x84, 0x7f, 0xb3, 0x15,
0xbe, 0x91, 0xda, 0xa9, 0xfd, 0x9e, 0x35, 0xce, 0x96, 0xa2, 0x07, 0xeb, 0x9f, 0x77, 0xfa, 0x93,
0xcc, 0x1a, 0xec, 0xd4, 0xff, 0x00, 0x1b, 0xd3, 0x66, 0xeb, 0x79, 0xce, 0xc8, 0x6c, 0xce, 0xc8,
0xdb, 0x9c, 0x91, 0xc7, 0x05, 0xcb, 0xcc, 0x16, 0x2c, 0xf3, 0xba, 0x60, 0x99, 0xab, 0x8a, 0xbc,
0xd3, 0xb7, 0xa3, 0x80, 0x77, 0x70, 0x90, 0xde, 0x4d, 0xfa, 0xa8, 0xa8, 0x9b, 0x9e, 0x98, 0xac,
0xae, 0x57, 0x4f, 0x23, 0x50, 0xc1, 0x76, 0xbc, 0xe8, 0xfa, 0x47, 0x00, 0x00, 0x00, 0xff, 0xff,
0x8d, 0x25, 0xe0, 0x0e, 0xdd, 0x02, 0x00, 0x00,
// 339 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x48, 0xce, 0x2f, 0xce,
0xcd, 0x2f, 0xd6, 0x4f, 0x4b, 0x4d, 0x4d, 0x2f, 0x4a, 0xcc, 0x2b, 0xd1, 0x2f, 0x33, 0x4c, 0x4a,
0x2d, 0x49, 0x34, 0xd4, 0x2f, 0xa9, 0xd0, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x87, 0xa8,
0xd0, 0x83, 0xa9, 0xd0, 0x83, 0xaa, 0x90, 0x12, 0x49, 0xcf, 0x4f, 0xcf, 0x07, 0xab, 0xd1, 0x07,
0xb1, 0x20, 0xca, 0xa5, 0x24, 0xd3, 0xf3, 0xf3, 0xd3, 0x73, 0x52, 0xf5, 0xc1, 0xbc, 0xa4, 0xd2,
0x34, 0xfd, 0xc4, 0xbc, 0x4a, 0x98, 0x14, 0xc4, 0xa4, 0x78, 0x88, 0x1e, 0xa8, 0xb1, 0x60, 0x8e,
0x52, 0x1f, 0x23, 0x97, 0xa0, 0x6f, 0x71, 0xba, 0x3b, 0xc8, 0x02, 0xc7, 0x9c, 0x9c, 0xfc, 0xf2,
0xc4, 0xbc, 0xe4, 0x54, 0x21, 0x09, 0x2e, 0x76, 0xb0, 0x95, 0xa9, 0x45, 0x12, 0x8c, 0x0a, 0x8c,
0x1a, 0x9c, 0x41, 0x30, 0x2e, 0x42, 0x26, 0x55, 0x82, 0x09, 0x59, 0x26, 0x55, 0xc8, 0x95, 0x8b,
0x33, 0x11, 0x66, 0x80, 0x04, 0xb3, 0x02, 0xa3, 0x06, 0xb7, 0x91, 0x88, 0x1e, 0xc4, 0x4d, 0x7a,
0x30, 0x37, 0xe9, 0x39, 0xe6, 0x55, 0x3a, 0x09, 0x9e, 0xda, 0xa2, 0xcb, 0xeb, 0x96, 0x9a, 0x0a,
0xb7, 0xce, 0x33, 0x08, 0xa1, 0x53, 0x49, 0x9a, 0x4b, 0x12, 0xc3, 0x3d, 0x41, 0xa9, 0xc5, 0x05,
0xf9, 0x79, 0xc5, 0xa9, 0x4a, 0x1e, 0x5c, 0x42, 0xbe, 0xc5, 0xe9, 0x41, 0xa9, 0x65, 0xf9, 0xd9,
0xa9, 0x14, 0xb9, 0x56, 0x49, 0x86, 0x4b, 0x0a, 0xd3, 0x24, 0x98, 0x3d, 0x46, 0x6f, 0x18, 0xb9,
0x98, 0x7d, 0x8b, 0xd3, 0x85, 0x0a, 0xb8, 0xf8, 0xd0, 0x42, 0x46, 0x4b, 0x0f, 0x47, 0xac, 0xe8,
0x61, 0xb8, 0x5a, 0xca, 0x88, 0x78, 0xb5, 0x30, 0x9b, 0x85, 0x8a, 0xb9, 0xf8, 0xd1, 0xbd, 0xa7,
0x8d, 0xcf, 0x18, 0x34, 0xc5, 0x52, 0xc6, 0x24, 0x28, 0x86, 0x59, 0xea, 0xe4, 0x78, 0xe2, 0x91,
0x1c, 0xe3, 0x85, 0x47, 0x72, 0x8c, 0x0f, 0x1e, 0xc9, 0x31, 0x4e, 0x78, 0x2c, 0xc7, 0x70, 0xe1,
0xb1, 0x1c, 0xc3, 0x8d, 0xc7, 0x72, 0x0c, 0x51, 0xea, 0xe9, 0x99, 0x25, 0x19, 0xa5, 0x49, 0x7a,
0xc9, 0xf9, 0xb9, 0xd0, 0x74, 0x03, 0xa5, 0x74, 0x8b, 0x53, 0xb2, 0xf5, 0x2b, 0xe0, 0xa9, 0x37,
0x89, 0x0d, 0x1c, 0xc5, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x60, 0x47, 0xc8, 0xf2, 0xd7,
0x02, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.

View File

@ -1,44 +0,0 @@
package types
import "github.com/cosmos/cosmos-sdk/codec/types"
var _ types.UnpackInterfacesMessage = GenesisState{}
// NewGenesisState creates new GenesisState object
func NewGenesisState(entries []Grant) *GenesisState {
return &GenesisState{
Allowances: entries,
}
}
// ValidateGenesis ensures all grants in the genesis state are valid
func ValidateGenesis(data GenesisState) error {
for _, f := range data.Allowances {
grant, err := f.GetGrant()
if err != nil {
return err
}
err = grant.ValidateBasic()
if err != nil {
return err
}
}
return nil
}
// DefaultGenesisState returns default state for feegrant module.
func DefaultGenesisState() *GenesisState {
return &GenesisState{}
}
// UnpackInterfaces implements UnpackInterfacesMessage.UnpackInterfaces
func (data GenesisState) UnpackInterfaces(unpacker types.AnyUnpacker) error {
for _, f := range data.Allowances {
err := f.UnpackInterfaces(unpacker)
if err != nil {
return err
}
}
return nil
}