chore(x/authz)!: Remove account keeper dependency (#21632)

This commit is contained in:
Facundo Medica 2024-10-01 09:29:56 +02:00 committed by GitHub
parent c44683d49f
commit 8763d8d99f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
14 changed files with 96 additions and 202 deletions

View File

@ -398,7 +398,7 @@ func NewSimApp(
app.CircuitKeeper = circuitkeeper.NewKeeper(runtime.NewEnvironment(runtime.NewKVStoreService(keys[circuittypes.StoreKey]), logger.With(log.ModuleKey, "x/circuit")), appCodec, govModuleAddr, app.AuthKeeper.AddressCodec())
app.BaseApp.SetCircuitBreaker(&app.CircuitKeeper)
app.AuthzKeeper = authzkeeper.NewKeeper(runtime.NewEnvironment(runtime.NewKVStoreService(keys[authzkeeper.StoreKey]), logger.With(log.ModuleKey, "x/authz"), runtime.EnvWithMsgRouterService(app.MsgServiceRouter()), runtime.EnvWithQueryRouterService(app.GRPCQueryRouter())), appCodec, app.AuthKeeper)
app.AuthzKeeper = authzkeeper.NewKeeper(runtime.NewEnvironment(runtime.NewKVStoreService(keys[authzkeeper.StoreKey]), logger.With(log.ModuleKey, "x/authz"), runtime.EnvWithMsgRouterService(app.MsgServiceRouter()), runtime.EnvWithQueryRouterService(app.GRPCQueryRouter())), appCodec, signingCtx.AddressCodec())
groupConfig := group.DefaultConfig()
/*

View File

@ -37,6 +37,7 @@ Ref: https://keepachangelog.com/en/1.0.0/
### API Breaking Changes
* [#21632](https://github.com/cosmos/cosmos-sdk/pull/21632) `NewKeeper` now takes `address.Codec` instead of `authKeeper`.
* [#21044](https://github.com/cosmos/cosmos-sdk/pull/21044) `k.DispatchActions` returns a slice of byte slices of proto marshaled anys instead of a slice of byte slices of `sdk.Result.Data`.
* [#20502](https://github.com/cosmos/cosmos-sdk/pull/20502) `Accept` on the `Authorization` interface now expects the authz environment in the `context.Context`. This is already done when `Accept` is called by `k.DispatchActions`, but should be done manually if `Accept` is called directly.
* [#19783](https://github.com/cosmos/cosmos-sdk/pull/19783) Removes the use of Accounts String() method

View File

@ -3,18 +3,9 @@ package authz
import (
"context"
"cosmossdk.io/core/address"
sdk "github.com/cosmos/cosmos-sdk/types"
)
// AccountKeeper defines the expected account keeper (noalias)
type AccountKeeper interface {
AddressCodec() address.Codec
GetAccount(ctx context.Context, addr sdk.AccAddress) sdk.AccountI
NewAccountWithAddress(ctx context.Context, addr sdk.AccAddress) sdk.AccountI
}
// BankKeeper defines the expected interface needed to retrieve account balances.
type BankKeeper interface {
SpendableCoins(ctx context.Context, addr sdk.AccAddress) sdk.Coins

View File

@ -18,11 +18,11 @@ func (k Keeper) InitGenesis(ctx context.Context, data *authz.GenesisState) error
continue
}
grantee, err := k.authKeeper.AddressCodec().StringToBytes(entry.Grantee)
grantee, err := k.addrCdc.StringToBytes(entry.Grantee)
if err != nil {
return err
}
granter, err := k.authKeeper.AddressCodec().StringToBytes(entry.Granter)
granter, err := k.addrCdc.StringToBytes(entry.Granter)
if err != nil {
return err
}
@ -44,11 +44,11 @@ func (k Keeper) InitGenesis(ctx context.Context, data *authz.GenesisState) error
func (k Keeper) ExportGenesis(ctx context.Context) (*authz.GenesisState, error) {
var entries []authz.GrantAuthorization
err := k.IterateGrants(ctx, func(granter, grantee sdk.AccAddress, grant authz.Grant) (bool, error) {
granterAddr, err := k.authKeeper.AddressCodec().BytesToString(granter)
granterAddr, err := k.addrCdc.BytesToString(granter)
if err != nil {
return false, err
}
granteeAddr, err := k.authKeeper.AddressCodec().BytesToString(grantee)
granteeAddr, err := k.addrCdc.BytesToString(grantee)
if err != nil {
return false, err
}

View File

@ -4,7 +4,6 @@ import (
"testing"
"time"
"github.com/golang/mock/gomock"
"github.com/stretchr/testify/suite"
"cosmossdk.io/core/header"
@ -14,11 +13,10 @@ import (
storetypes "cosmossdk.io/store/types"
"cosmossdk.io/x/authz/keeper"
authzmodule "cosmossdk.io/x/authz/module"
authztestutil "cosmossdk.io/x/authz/testutil"
bank "cosmossdk.io/x/bank/types"
"github.com/cosmos/cosmos-sdk/baseapp"
"github.com/cosmos/cosmos-sdk/codec/address"
addresscodec "github.com/cosmos/cosmos-sdk/codec/address"
codectestutil "github.com/cosmos/cosmos-sdk/codec/testutil"
"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
"github.com/cosmos/cosmos-sdk/runtime"
@ -37,11 +35,10 @@ var (
type GenesisTestSuite struct {
suite.Suite
ctx sdk.Context
keeper keeper.Keeper
baseApp *baseapp.BaseApp
accountKeeper *authztestutil.MockAccountKeeper
encCfg moduletestutil.TestEncodingConfig
ctx sdk.Context
keeper keeper.Keeper
baseApp *baseapp.BaseApp
encCfg moduletestutil.TestEncodingConfig
}
func (suite *GenesisTestSuite) SetupTest() {
@ -52,11 +49,6 @@ func (suite *GenesisTestSuite) SetupTest() {
suite.encCfg = moduletestutil.MakeTestEncodingConfig(codectestutil.CodecOptions{}, authzmodule.AppModule{})
// gomock initializations
ctrl := gomock.NewController(suite.T())
suite.accountKeeper = authztestutil.NewMockAccountKeeper(ctrl)
suite.accountKeeper.EXPECT().AddressCodec().Return(address.NewBech32Codec("cosmos")).AnyTimes()
suite.baseApp = baseapp.NewBaseApp(
"authz",
log.NewNopLogger(),
@ -71,7 +63,8 @@ func (suite *GenesisTestSuite) SetupTest() {
msr.SetInterfaceRegistry(suite.encCfg.InterfaceRegistry)
env := runtime.NewEnvironment(storeService, coretesting.NewNopLogger(), runtime.EnvWithMsgRouterService(msr))
suite.keeper = keeper.NewKeeper(env, suite.encCfg.Codec, suite.accountKeeper)
addrCdc := addresscodec.NewBech32Codec("cosmos")
suite.keeper = keeper.NewKeeper(env, suite.encCfg.Codec, addrCdc)
}
func (suite *GenesisTestSuite) TestImportExportGenesis() {

View File

@ -25,12 +25,12 @@ func (k Keeper) Grants(ctx context.Context, req *authz.QueryGrantsRequest) (*aut
return nil, status.Errorf(codes.InvalidArgument, "empty request")
}
granter, err := k.authKeeper.AddressCodec().StringToBytes(req.Granter)
granter, err := k.addrCdc.StringToBytes(req.Granter)
if err != nil {
return nil, err
}
grantee, err := k.authKeeper.AddressCodec().StringToBytes(req.Grantee)
grantee, err := k.addrCdc.StringToBytes(req.Grantee)
if err != nil {
return nil, err
}
@ -95,7 +95,7 @@ func (k Keeper) GranterGrants(ctx context.Context, req *authz.QueryGranterGrants
return nil, status.Errorf(codes.InvalidArgument, "empty request")
}
granter, err := k.authKeeper.AddressCodec().StringToBytes(req.Granter)
granter, err := k.addrCdc.StringToBytes(req.Granter)
if err != nil {
return nil, err
}
@ -116,7 +116,7 @@ func (k Keeper) GranterGrants(ctx context.Context, req *authz.QueryGranterGrants
grantee := firstAddressFromGrantStoreKey(key)
granteeAddr, err := k.authKeeper.AddressCodec().BytesToString(grantee)
granteeAddr, err := k.addrCdc.BytesToString(grantee)
if err != nil {
return nil, err
}
@ -146,7 +146,7 @@ func (k Keeper) GranteeGrants(ctx context.Context, req *authz.QueryGranteeGrants
return nil, status.Errorf(codes.InvalidArgument, "empty request")
}
grantee, err := k.authKeeper.AddressCodec().StringToBytes(req.Grantee)
grantee, err := k.addrCdc.StringToBytes(req.Grantee)
if err != nil {
return nil, err
}
@ -169,7 +169,7 @@ func (k Keeper) GranteeGrants(ctx context.Context, req *authz.QueryGranteeGrants
return nil, status.Error(codes.Internal, err.Error())
}
granterAddr, err := k.authKeeper.AddressCodec().BytesToString(granter)
granterAddr, err := k.addrCdc.BytesToString(granter)
if err != nil {
return nil, err
}

View File

@ -21,9 +21,9 @@ func (suite *TestSuite) TestGRPCQueryAuthorization() {
expAuthorization authz.Authorization
)
addr0, err := suite.accountKeeper.AddressCodec().BytesToString(addrs[0])
addr0, err := suite.addrCdc.BytesToString(addrs[0])
suite.Require().NoError(err)
addr1, err := suite.accountKeeper.AddressCodec().BytesToString(addrs[1])
addr1, err := suite.addrCdc.BytesToString(addrs[1])
suite.Require().NoError(err)
testCases := []struct {
@ -137,7 +137,7 @@ func (suite *TestSuite) TestGRPCQueryGranterGrants() {
require := suite.Require()
queryClient, addrs := suite.queryClient, suite.addrs
addr0, err := suite.accountKeeper.AddressCodec().BytesToString(addrs[0])
addr0, err := suite.addrCdc.BytesToString(addrs[0])
suite.Require().NoError(err)
testCases := []struct {
@ -209,9 +209,9 @@ func (suite *TestSuite) TestGRPCQueryGranteeGrants() {
require := suite.Require()
queryClient, addrs := suite.queryClient, suite.addrs
addr0, err := suite.accountKeeper.AddressCodec().BytesToString(addrs[0])
addr0, err := suite.addrCdc.BytesToString(addrs[0])
suite.Require().NoError(err)
addr2, err := suite.accountKeeper.AddressCodec().BytesToString(addrs[2])
addr2, err := suite.addrCdc.BytesToString(addrs[2])
suite.Require().NoError(err)
testCases := []struct {
@ -299,7 +299,7 @@ func (suite *TestSuite) createSendAuthorization(grantee, granter sdk.AccAddress)
func (suite *TestSuite) createSendAuthorizationWithAllowList(grantee, granter sdk.AccAddress) authz.Authorization {
exp := suite.ctx.HeaderInfo().Time.Add(time.Hour)
newCoins := sdk.NewCoins(sdk.NewInt64Coin("steak", 100))
addr, err := suite.accountKeeper.AddressCodec().BytesToString(suite.addrs[5])
addr, err := suite.addrCdc.BytesToString(suite.addrs[5])
suite.Require().NoError(err)
authorization := &banktypes.SendAuthorization{SpendLimit: newCoins, AllowList: []string{addr}}
err = suite.authzKeeper.SaveGrant(suite.ctx, grantee, granter, authorization, &exp)

View File

@ -9,6 +9,7 @@ import (
gogoproto "github.com/cosmos/gogoproto/proto"
gogoprotoany "github.com/cosmos/gogoproto/types/any"
"cosmossdk.io/core/address"
"cosmossdk.io/core/appmodule"
corecontext "cosmossdk.io/core/context"
errorsmod "cosmossdk.io/errors"
@ -30,16 +31,16 @@ const gasCostPerIteration = uint64(20)
type Keeper struct {
appmodule.Environment
cdc codec.Codec
authKeeper authz.AccountKeeper
cdc codec.Codec
addrCdc address.Codec
}
// NewKeeper constructs a message authorization Keeper
func NewKeeper(env appmodule.Environment, cdc codec.Codec, ak authz.AccountKeeper) Keeper {
func NewKeeper(env appmodule.Environment, cdc codec.Codec, addrCdc address.Codec) Keeper {
return Keeper{
Environment: env,
cdc: cdc,
authKeeper: ak,
addrCdc: addrCdc,
}
}
@ -206,11 +207,11 @@ func (k Keeper) SaveGrant(ctx context.Context, grantee, granter sdk.AccAddress,
return err
}
granterAddr, err := k.authKeeper.AddressCodec().BytesToString(granter)
granterAddr, err := k.addrCdc.BytesToString(granter)
if err != nil {
return err
}
granteeAddr, err := k.authKeeper.AddressCodec().BytesToString(grantee)
granteeAddr, err := k.addrCdc.BytesToString(grantee)
if err != nil {
return err
}
@ -229,12 +230,12 @@ func (k Keeper) DeleteGrant(ctx context.Context, grantee, granter sdk.AccAddress
skey := grantStoreKey(grantee, granter, msgType)
grant, found := k.getGrant(ctx, skey)
if !found {
granterAddr, err := k.authKeeper.AddressCodec().BytesToString(granter)
granterAddr, err := k.addrCdc.BytesToString(granter)
if err != nil {
return errorsmod.Wrapf(authz.ErrNoAuthorizationFound,
"could not convert granter address to string")
}
granteeAddr, err := k.authKeeper.AddressCodec().BytesToString(grantee)
granteeAddr, err := k.addrCdc.BytesToString(grantee)
if err != nil {
return errorsmod.Wrapf(authz.ErrNoAuthorizationFound,
"could not convert grantee address to string")
@ -255,11 +256,11 @@ func (k Keeper) DeleteGrant(ctx context.Context, grantee, granter sdk.AccAddress
return err
}
granterAddr, err := k.authKeeper.AddressCodec().BytesToString(granter)
granterAddr, err := k.addrCdc.BytesToString(granter)
if err != nil {
return err
}
granteeAddr, err := k.authKeeper.AddressCodec().BytesToString(grantee)
granteeAddr, err := k.addrCdc.BytesToString(grantee)
if err != nil {
return err
}
@ -291,7 +292,7 @@ func (k Keeper) DeleteAllGrants(ctx context.Context, granter sdk.AccAddress) err
}
}
grantAddr, err := k.authKeeper.AddressCodec().BytesToString(granter)
grantAddr, err := k.addrCdc.BytesToString(granter)
if err != nil {
return err
}

View File

@ -9,6 +9,7 @@ import (
"github.com/golang/mock/gomock"
"github.com/stretchr/testify/suite"
"cosmossdk.io/core/address"
"cosmossdk.io/core/header"
coretesting "cosmossdk.io/core/testing"
"cosmossdk.io/log"
@ -20,7 +21,7 @@ import (
banktypes "cosmossdk.io/x/bank/types"
"github.com/cosmos/cosmos-sdk/baseapp"
"github.com/cosmos/cosmos-sdk/codec/address"
addresscodec "github.com/cosmos/cosmos-sdk/codec/address"
codectestutil "github.com/cosmos/cosmos-sdk/codec/testutil"
"github.com/cosmos/cosmos-sdk/runtime"
"github.com/cosmos/cosmos-sdk/testutil"
@ -39,15 +40,15 @@ var (
type TestSuite struct {
suite.Suite
ctx sdk.Context
addrs []sdk.AccAddress
authzKeeper authzkeeper.Keeper
accountKeeper *authztestutil.MockAccountKeeper
bankKeeper *authztestutil.MockBankKeeper
baseApp *baseapp.BaseApp
encCfg moduletestutil.TestEncodingConfig
queryClient authz.QueryClient
msgSrvr authz.MsgServer
ctx sdk.Context
addrs []sdk.AccAddress
authzKeeper authzkeeper.Keeper
bankKeeper *authztestutil.MockBankKeeper
baseApp *baseapp.BaseApp
encCfg moduletestutil.TestEncodingConfig
queryClient authz.QueryClient
msgSrvr authz.MsgServer
addrCdc address.Codec
}
func (s *TestSuite) SetupTest() {
@ -70,16 +71,13 @@ func (s *TestSuite) SetupTest() {
// gomock initializations
ctrl := gomock.NewController(s.T())
s.accountKeeper = authztestutil.NewMockAccountKeeper(ctrl)
s.accountKeeper.EXPECT().AddressCodec().Return(address.NewBech32Codec("cosmos")).AnyTimes()
s.bankKeeper = authztestutil.NewMockBankKeeper(ctrl)
banktypes.RegisterInterfaces(s.encCfg.InterfaceRegistry)
banktypes.RegisterMsgServer(s.baseApp.MsgServiceRouter(), s.bankKeeper)
env := runtime.NewEnvironment(storeService, coretesting.NewNopLogger(), runtime.EnvWithQueryRouterService(s.baseApp.GRPCQueryRouter()), runtime.EnvWithMsgRouterService(s.baseApp.MsgServiceRouter()))
s.authzKeeper = authzkeeper.NewKeeper(env, s.encCfg.Codec, s.accountKeeper)
s.addrCdc = addresscodec.NewBech32Codec("cosmos")
s.authzKeeper = authzkeeper.NewKeeper(env, s.encCfg.Codec, s.addrCdc)
queryHelper := baseapp.NewQueryServerTestHelper(s.ctx, s.encCfg.InterfaceRegistry)
authz.RegisterQueryServer(queryHelper, s.authzKeeper)
@ -183,7 +181,7 @@ func (s *TestSuite) TestKeeperIter() {
granteeAddr := addrs[1]
granter2Addr := addrs[2]
e := ctx.HeaderInfo().Time.AddDate(1, 0, 0)
sendAuthz := banktypes.NewSendAuthorization(coins100, nil, s.accountKeeper.AddressCodec())
sendAuthz := banktypes.NewSendAuthorization(coins100, nil, s.addrCdc)
err := s.authzKeeper.SaveGrant(ctx, granteeAddr, granterAddr, sendAuthz, &e)
s.Require().NoError(err)
@ -207,7 +205,7 @@ func (s *TestSuite) TestKeeperGranterGrantsIter() {
grantee2Addr := addrs[3]
grantee3Addr := addrs[4]
e := ctx.HeaderInfo().Time.AddDate(1, 0, 0)
sendAuthz := banktypes.NewSendAuthorization(coins100, nil, s.accountKeeper.AddressCodec())
sendAuthz := banktypes.NewSendAuthorization(coins100, nil, s.addrCdc)
err := s.authzKeeper.SaveGrant(ctx, granteeAddr, granterAddr, sendAuthz, &e)
s.Require().NoError(err)
@ -238,13 +236,13 @@ func (s *TestSuite) TestDispatchAction() {
granterAddr := addrs[0]
granteeAddr := addrs[1]
granterStrAddr, err := s.accountKeeper.AddressCodec().BytesToString(addrs[0])
granterStrAddr, err := s.addrCdc.BytesToString(addrs[0])
s.Require().NoError(err)
granteeStrAddr, err := s.accountKeeper.AddressCodec().BytesToString(addrs[1])
granteeStrAddr, err := s.addrCdc.BytesToString(addrs[1])
s.Require().NoError(err)
recipientStrAddr, err := s.accountKeeper.AddressCodec().BytesToString(addrs[2])
recipientStrAddr, err := s.addrCdc.BytesToString(addrs[2])
s.Require().NoError(err)
a := banktypes.NewSendAuthorization(coins100, nil, s.accountKeeper.AddressCodec())
a := banktypes.NewSendAuthorization(coins100, nil, s.addrCdc)
testCases := []struct {
name string
@ -402,11 +400,11 @@ func (s *TestSuite) TestDispatchedEvents() {
addrs := s.addrs
granterAddr := addrs[0]
granteeAddr := addrs[1]
granterStrAddr, err := s.accountKeeper.AddressCodec().BytesToString(addrs[0])
granterStrAddr, err := s.addrCdc.BytesToString(addrs[0])
s.Require().NoError(err)
granteeStrAddr, err := s.accountKeeper.AddressCodec().BytesToString(addrs[1])
granteeStrAddr, err := s.addrCdc.BytesToString(addrs[1])
s.Require().NoError(err)
recipientStrAddr, err := s.accountKeeper.AddressCodec().BytesToString(addrs[2])
recipientStrAddr, err := s.addrCdc.BytesToString(addrs[2])
s.Require().NoError(err)
expiration := s.ctx.HeaderInfo().Time.Add(1 * time.Second) // must be in the future
@ -505,7 +503,7 @@ func (s *TestSuite) TestGetAuthorization() {
genAuthMulti := authz.NewGenericAuthorization(sdk.MsgTypeURL(&banktypes.MsgMultiSend{}))
genAuthSend := authz.NewGenericAuthorization(sdk.MsgTypeURL(&banktypes.MsgSend{}))
sendAuth := banktypes.NewSendAuthorization(coins10, nil, s.accountKeeper.AddressCodec())
sendAuth := banktypes.NewSendAuthorization(coins10, nil, s.addrCdc)
start := s.ctx.HeaderInfo().Time
expired := start.Add(time.Duration(1) * time.Second)

View File

@ -20,12 +20,12 @@ func (k Keeper) Grant(ctx context.Context, msg *authz.MsgGrant) (*authz.MsgGrant
return nil, authz.ErrGranteeIsGranter
}
grantee, err := k.authKeeper.AddressCodec().StringToBytes(msg.Grantee)
grantee, err := k.addrCdc.StringToBytes(msg.Grantee)
if err != nil {
return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid grantee address: %s", err)
}
granter, err := k.authKeeper.AddressCodec().StringToBytes(msg.Granter)
granter, err := k.addrCdc.StringToBytes(msg.Granter)
if err != nil {
return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid granter address: %s", err)
}
@ -64,12 +64,12 @@ func (k Keeper) Revoke(ctx context.Context, msg *authz.MsgRevoke) (*authz.MsgRev
return nil, authz.ErrGranteeIsGranter
}
grantee, err := k.authKeeper.AddressCodec().StringToBytes(msg.Grantee)
grantee, err := k.addrCdc.StringToBytes(msg.Grantee)
if err != nil {
return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid grantee address: %s", err)
}
granter, err := k.authKeeper.AddressCodec().StringToBytes(msg.Granter)
granter, err := k.addrCdc.StringToBytes(msg.Granter)
if err != nil {
return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid granter address: %s", err)
}
@ -87,7 +87,7 @@ func (k Keeper) Revoke(ctx context.Context, msg *authz.MsgRevoke) (*authz.MsgRev
// RevokeAll implements the MsgServer.RevokeAll method.
func (k Keeper) RevokeAll(ctx context.Context, msg *authz.MsgRevokeAll) (*authz.MsgRevokeAllResponse, error) {
granter, err := k.authKeeper.AddressCodec().StringToBytes(msg.Granter)
granter, err := k.addrCdc.StringToBytes(msg.Granter)
if err != nil {
return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid granter address: %s", err)
}
@ -105,7 +105,7 @@ func (k Keeper) Exec(ctx context.Context, msg *authz.MsgExec) (*authz.MsgExecRes
return nil, errors.New("empty address string is not allowed")
}
grantee, err := k.authKeeper.AddressCodec().StringToBytes(msg.Grantee)
grantee, err := k.addrCdc.StringToBytes(msg.Grantee)
if err != nil {
return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid grantee address: %s", err)
}

View File

@ -3,23 +3,17 @@ package keeper_test
import (
"time"
"github.com/golang/mock/gomock"
"cosmossdk.io/core/header"
sdkmath "cosmossdk.io/math"
"cosmossdk.io/x/authz"
banktypes "cosmossdk.io/x/bank/types"
"github.com/cosmos/cosmos-sdk/codec/address"
simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims"
sdk "github.com/cosmos/cosmos-sdk/types"
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
)
func (suite *TestSuite) createAccounts() []sdk.AccAddress {
addrs := simtestutil.CreateIncrementalAccounts(2)
suite.accountKeeper.EXPECT().GetAccount(gomock.Any(), suite.addrs[0]).Return(authtypes.NewBaseAccountWithAddress(suite.addrs[0])).AnyTimes()
suite.accountKeeper.EXPECT().GetAccount(gomock.Any(), suite.addrs[1]).Return(authtypes.NewBaseAccountWithAddress(suite.addrs[1])).AnyTimes()
return addrs
}
@ -28,17 +22,15 @@ func (suite *TestSuite) TestGrant() {
addrs := suite.createAccounts()
curBlockTime := ctx.HeaderInfo().Time
suite.accountKeeper.EXPECT().AddressCodec().Return(address.NewBech32Codec("cosmos")).AnyTimes()
oneHour := curBlockTime.Add(time.Hour)
oneYear := curBlockTime.AddDate(1, 0, 0)
coins := sdk.NewCoins(sdk.NewCoin("steak", sdkmath.NewInt(10)))
grantee, granter := addrs[0], addrs[1]
granterStrAddr, err := suite.accountKeeper.AddressCodec().BytesToString(granter)
granterStrAddr, err := suite.addrCdc.BytesToString(granter)
suite.Require().NoError(err)
granteeStrAddr, err := suite.accountKeeper.AddressCodec().BytesToString(grantee)
granteeStrAddr, err := suite.addrCdc.BytesToString(grantee)
suite.Require().NoError(err)
testCases := []struct {
@ -50,7 +42,7 @@ func (suite *TestSuite) TestGrant() {
{
name: "identical grantee and granter",
malleate: func() *authz.MsgGrant {
grant, err := authz.NewGrant(curBlockTime, banktypes.NewSendAuthorization(coins, nil, suite.accountKeeper.AddressCodec()), &oneYear)
grant, err := authz.NewGrant(curBlockTime, banktypes.NewSendAuthorization(coins, nil, suite.addrCdc), &oneYear)
suite.Require().NoError(err)
return &authz.MsgGrant{
Granter: granteeStrAddr,
@ -64,7 +56,7 @@ func (suite *TestSuite) TestGrant() {
{
name: "invalid granter",
malleate: func() *authz.MsgGrant {
grant, err := authz.NewGrant(curBlockTime, banktypes.NewSendAuthorization(coins, nil, suite.accountKeeper.AddressCodec()), &oneYear)
grant, err := authz.NewGrant(curBlockTime, banktypes.NewSendAuthorization(coins, nil, suite.addrCdc), &oneYear)
suite.Require().NoError(err)
return &authz.MsgGrant{
Granter: "invalid",
@ -78,7 +70,7 @@ func (suite *TestSuite) TestGrant() {
{
name: "invalid grantee",
malleate: func() *authz.MsgGrant {
grant, err := authz.NewGrant(curBlockTime, banktypes.NewSendAuthorization(coins, nil, suite.accountKeeper.AddressCodec()), &oneYear)
grant, err := authz.NewGrant(curBlockTime, banktypes.NewSendAuthorization(coins, nil, suite.addrCdc), &oneYear)
suite.Require().NoError(err)
return &authz.MsgGrant{
Granter: granterStrAddr,
@ -107,7 +99,7 @@ func (suite *TestSuite) TestGrant() {
name: "invalid grant, past time",
malleate: func() *authz.MsgGrant {
pTime := curBlockTime.Add(-time.Hour)
grant, err := authz.NewGrant(curBlockTime, banktypes.NewSendAuthorization(coins, nil, suite.accountKeeper.AddressCodec()), &oneHour) // we only need the authorization
grant, err := authz.NewGrant(curBlockTime, banktypes.NewSendAuthorization(coins, nil, suite.addrCdc), &oneHour) // we only need the authorization
suite.Require().NoError(err)
return &authz.MsgGrant{
Granter: granterStrAddr,
@ -125,14 +117,10 @@ func (suite *TestSuite) TestGrant() {
name: "grantee account does not exist on chain: valid grant",
malleate: func() *authz.MsgGrant {
newAcc := sdk.AccAddress("valid")
suite.accountKeeper.EXPECT().GetAccount(gomock.Any(), newAcc).Return(nil).AnyTimes()
acc := authtypes.NewBaseAccountWithAddress(newAcc)
suite.accountKeeper.EXPECT().NewAccountWithAddress(gomock.Any(), newAcc).Return(acc).AnyTimes()
grant, err := authz.NewGrant(curBlockTime, banktypes.NewSendAuthorization(coins, nil, suite.accountKeeper.AddressCodec()), &oneYear)
grant, err := authz.NewGrant(curBlockTime, banktypes.NewSendAuthorization(coins, nil, suite.addrCdc), &oneYear)
suite.Require().NoError(err)
addr, err := suite.accountKeeper.AddressCodec().BytesToString(newAcc)
addr, err := suite.addrCdc.BytesToString(newAcc)
suite.Require().NoError(err)
return &authz.MsgGrant{
@ -145,7 +133,7 @@ func (suite *TestSuite) TestGrant() {
{
name: "valid grant",
malleate: func() *authz.MsgGrant {
grant, err := authz.NewGrant(curBlockTime, banktypes.NewSendAuthorization(coins, nil, suite.accountKeeper.AddressCodec()), &oneYear)
grant, err := authz.NewGrant(curBlockTime, banktypes.NewSendAuthorization(coins, nil, suite.addrCdc), &oneYear)
suite.Require().NoError(err)
return &authz.MsgGrant{
Granter: granterStrAddr,
@ -157,7 +145,7 @@ func (suite *TestSuite) TestGrant() {
{
name: "valid grant, same grantee, granter pair but different msgType",
malleate: func() *authz.MsgGrant {
g, err := authz.NewGrant(curBlockTime, banktypes.NewSendAuthorization(coins, nil, suite.accountKeeper.AddressCodec()), &oneHour)
g, err := authz.NewGrant(curBlockTime, banktypes.NewSendAuthorization(coins, nil, suite.addrCdc), &oneHour)
suite.Require().NoError(err)
_, err = suite.msgSrvr.Grant(suite.ctx, &authz.MsgGrant{
Granter: granterStrAddr,
@ -178,7 +166,7 @@ func (suite *TestSuite) TestGrant() {
{
name: "valid grant with allow list",
malleate: func() *authz.MsgGrant {
grant, err := authz.NewGrant(curBlockTime, banktypes.NewSendAuthorization(coins, []sdk.AccAddress{granter}, suite.accountKeeper.AddressCodec()), &oneYear)
grant, err := authz.NewGrant(curBlockTime, banktypes.NewSendAuthorization(coins, []sdk.AccAddress{granter}, suite.addrCdc), &oneYear)
suite.Require().NoError(err)
return &authz.MsgGrant{
Granter: granterStrAddr,
@ -190,7 +178,7 @@ func (suite *TestSuite) TestGrant() {
{
name: "valid grant with nil expiration time",
malleate: func() *authz.MsgGrant {
grant, err := authz.NewGrant(curBlockTime, banktypes.NewSendAuthorization(coins, nil, suite.accountKeeper.AddressCodec()), nil)
grant, err := authz.NewGrant(curBlockTime, banktypes.NewSendAuthorization(coins, nil, suite.addrCdc), nil)
suite.Require().NoError(err)
return &authz.MsgGrant{
Granter: granterStrAddr,
@ -232,9 +220,9 @@ func (suite *TestSuite) TestRevoke() {
addrs := suite.createAccounts()
grantee, granter := addrs[0], addrs[1]
granterStrAddr, err := suite.accountKeeper.AddressCodec().BytesToString(granter)
granterStrAddr, err := suite.addrCdc.BytesToString(granter)
suite.Require().NoError(err)
granteeStrAddr, err := suite.accountKeeper.AddressCodec().BytesToString(grantee)
granteeStrAddr, err := suite.addrCdc.BytesToString(grantee)
suite.Require().NoError(err)
testCases := []struct {
@ -334,9 +322,9 @@ func (suite *TestSuite) TestExec() {
addrs := suite.createAccounts()
grantee, granter := addrs[0], addrs[1]
granterStrAddr, err := suite.accountKeeper.AddressCodec().BytesToString(granter)
granterStrAddr, err := suite.addrCdc.BytesToString(granter)
suite.Require().NoError(err)
granteeStrAddr, err := suite.accountKeeper.AddressCodec().BytesToString(grantee)
granteeStrAddr, err := suite.addrCdc.BytesToString(grantee)
suite.Require().NoError(err)
coins := sdk.NewCoins(sdk.NewCoin("steak", sdkmath.NewInt(10)))
@ -402,15 +390,15 @@ func (suite *TestSuite) TestExec() {
func (suite *TestSuite) TestPruneExpiredGrants() {
addrs := suite.createAccounts()
addr0, err := suite.accountKeeper.AddressCodec().BytesToString(addrs[0])
addr0, err := suite.addrCdc.BytesToString(addrs[0])
suite.Require().NoError(err)
addr1, err := suite.accountKeeper.AddressCodec().BytesToString(addrs[1])
addr1, err := suite.addrCdc.BytesToString(addrs[1])
suite.Require().NoError(err)
timeNow := suite.ctx.BlockTime()
expiration := timeNow.Add(time.Hour)
coins := sdk.NewCoins(sdk.NewCoin("steak", sdkmath.NewInt(10)))
grant, err := authz.NewGrant(timeNow, banktypes.NewSendAuthorization(coins, nil, suite.accountKeeper.AddressCodec()), &expiration)
grant, err := authz.NewGrant(timeNow, banktypes.NewSendAuthorization(coins, nil, suite.addrCdc), &expiration)
suite.Require().NoError(err)
_, err = suite.msgSrvr.Grant(suite.ctx, &authz.MsgGrant{
@ -454,7 +442,7 @@ func (suite *TestSuite) TestRevokeAllGrants() {
addrs := simtestutil.CreateIncrementalAccounts(3)
grantee, grantee2, granter := addrs[0], addrs[1], addrs[2]
granterStrAddr, err := suite.accountKeeper.AddressCodec().BytesToString(granter)
granterStrAddr, err := suite.addrCdc.BytesToString(granter)
suite.Require().NoError(err)
testCases := []struct {

View File

@ -4,7 +4,6 @@ import (
"testing"
"time"
"github.com/golang/mock/gomock"
"github.com/stretchr/testify/require"
"cosmossdk.io/core/header"
@ -14,7 +13,6 @@ import (
"cosmossdk.io/x/authz"
"cosmossdk.io/x/authz/keeper"
authzmodule "cosmossdk.io/x/authz/module"
authztestutil "cosmossdk.io/x/authz/testutil"
banktypes "cosmossdk.io/x/bank/types"
"github.com/cosmos/cosmos-sdk/baseapp"
@ -25,7 +23,6 @@ import (
simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims"
sdk "github.com/cosmos/cosmos-sdk/types"
moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil"
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
)
func TestExpiredGrantsQueue(t *testing.T) {
@ -57,22 +54,13 @@ func TestExpiredGrantsQueue(t *testing.T) {
smallCoins := sdk.NewCoins(sdk.NewInt64Coin("stake", 10))
sendAuthz := banktypes.NewSendAuthorization(smallCoins, nil, codectestutil.CodecOptions{}.GetAddressCodec())
ctrl := gomock.NewController(t)
accountKeeper := authztestutil.NewMockAccountKeeper(ctrl)
accountKeeper.EXPECT().GetAccount(gomock.Any(), granter).Return(authtypes.NewBaseAccountWithAddress(granter)).AnyTimes()
accountKeeper.EXPECT().GetAccount(gomock.Any(), grantee1).Return(authtypes.NewBaseAccountWithAddress(grantee1)).AnyTimes()
accountKeeper.EXPECT().GetAccount(gomock.Any(), grantee2).Return(authtypes.NewBaseAccountWithAddress(grantee2)).AnyTimes()
accountKeeper.EXPECT().GetAccount(gomock.Any(), grantee3).Return(authtypes.NewBaseAccountWithAddress(grantee3)).AnyTimes()
accountKeeper.EXPECT().GetAccount(gomock.Any(), grantee4).Return(authtypes.NewBaseAccountWithAddress(grantee4)).AnyTimes()
accountKeeper.EXPECT().AddressCodec().Return(address.NewBech32Codec("cosmos")).AnyTimes()
addrCdc := address.NewBech32Codec("cosmos")
env := runtime.NewEnvironment(storeService, coretesting.NewNopLogger(), runtime.EnvWithQueryRouterService(baseApp.GRPCQueryRouter()), runtime.EnvWithMsgRouterService(baseApp.MsgServiceRouter()))
authzKeeper := keeper.NewKeeper(env, encCfg.Codec, accountKeeper)
authzKeeper := keeper.NewKeeper(env, encCfg.Codec, addrCdc)
save := func(grantee sdk.AccAddress, exp *time.Time) {
err := authzKeeper.SaveGrant(ctx, grantee, granter, sendAuthz, exp)
addr, _ := accountKeeper.AddressCodec().BytesToString(grantee)
addr, _ := addrCdc.BytesToString(grantee)
require.NoError(t, err, "Grant from %s", addr)
}
save(grantee1, &expiration)
@ -88,7 +76,7 @@ func TestExpiredGrantsQueue(t *testing.T) {
err := authzmodule.BeginBlocker(ctx, authzKeeper)
require.NoError(t, err)
addr, err := accountKeeper.AddressCodec().BytesToString(granter)
addr, err := addrCdc.BytesToString(granter)
require.NoError(t, err)
res, err := queryClient.GranterGrants(ctx.Context(), &authz.QueryGranterGrantsRequest{
Granter: addr,

View File

@ -2,10 +2,10 @@ package module
import (
modulev1 "cosmossdk.io/api/cosmos/authz/module/v1"
"cosmossdk.io/core/address"
"cosmossdk.io/core/appmodule"
"cosmossdk.io/depinject"
"cosmossdk.io/depinject/appconfig"
"cosmossdk.io/x/authz"
"cosmossdk.io/x/authz/keeper"
"github.com/cosmos/cosmos-sdk/codec"
@ -27,10 +27,10 @@ func init() {
type ModuleInputs struct {
depinject.In
Cdc codec.Codec
AccountKeeper authz.AccountKeeper
Registry cdctypes.InterfaceRegistry
Environment appmodule.Environment
Cdc codec.Codec
AddressCodec address.Codec
Registry cdctypes.InterfaceRegistry
Environment appmodule.Environment
}
type ModuleOutputs struct {
@ -41,7 +41,7 @@ type ModuleOutputs struct {
}
func ProvideModule(in ModuleInputs) ModuleOutputs {
k := keeper.NewKeeper(in.Environment, in.Cdc, in.AccountKeeper)
k := keeper.NewKeeper(in.Environment, in.Cdc, in.AddressCodec)
m := NewAppModule(in.Cdc, k, in.Registry)
return ModuleOutputs{AuthzKeeper: k, Module: m}
}

View File

@ -8,76 +8,10 @@ import (
context "context"
reflect "reflect"
address "cosmossdk.io/core/address"
types "github.com/cosmos/cosmos-sdk/types"
gomock "github.com/golang/mock/gomock"
)
// MockAccountKeeper is a mock of AccountKeeper interface.
type MockAccountKeeper struct {
ctrl *gomock.Controller
recorder *MockAccountKeeperMockRecorder
}
// MockAccountKeeperMockRecorder is the mock recorder for MockAccountKeeper.
type MockAccountKeeperMockRecorder struct {
mock *MockAccountKeeper
}
// NewMockAccountKeeper creates a new mock instance.
func NewMockAccountKeeper(ctrl *gomock.Controller) *MockAccountKeeper {
mock := &MockAccountKeeper{ctrl: ctrl}
mock.recorder = &MockAccountKeeperMockRecorder{mock}
return mock
}
// EXPECT returns an object that allows the caller to indicate expected use.
func (m *MockAccountKeeper) EXPECT() *MockAccountKeeperMockRecorder {
return m.recorder
}
// AddressCodec mocks base method.
func (m *MockAccountKeeper) AddressCodec() address.Codec {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "AddressCodec")
ret0, _ := ret[0].(address.Codec)
return ret0
}
// AddressCodec indicates an expected call of AddressCodec.
func (mr *MockAccountKeeperMockRecorder) AddressCodec() *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddressCodec", reflect.TypeOf((*MockAccountKeeper)(nil).AddressCodec))
}
// GetAccount mocks base method.
func (m *MockAccountKeeper) GetAccount(ctx context.Context, addr types.AccAddress) types.AccountI {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "GetAccount", ctx, addr)
ret0, _ := ret[0].(types.AccountI)
return ret0
}
// GetAccount indicates an expected call of GetAccount.
func (mr *MockAccountKeeperMockRecorder) GetAccount(ctx, addr interface{}) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetAccount", reflect.TypeOf((*MockAccountKeeper)(nil).GetAccount), ctx, addr)
}
// NewAccountWithAddress mocks base method.
func (m *MockAccountKeeper) NewAccountWithAddress(ctx context.Context, addr types.AccAddress) types.AccountI {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "NewAccountWithAddress", ctx, addr)
ret0, _ := ret[0].(types.AccountI)
return ret0
}
// NewAccountWithAddress indicates an expected call of NewAccountWithAddress.
func (mr *MockAccountKeeperMockRecorder) NewAccountWithAddress(ctx, addr interface{}) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NewAccountWithAddress", reflect.TypeOf((*MockAccountKeeper)(nil).NewAccountWithAddress), ctx, addr)
}
// MockBankKeeper is a mock of BankKeeper interface.
type MockBankKeeper struct {
ctrl *gomock.Controller