fix(x/authz,x/feegrant): check blocked address (#20102)
This commit is contained in:
@@ -20,4 +20,5 @@ type AccountKeeper interface {
|
||||
type BankKeeper interface {
|
||||
SpendableCoins(ctx context.Context, addr sdk.AccAddress) sdk.Coins
|
||||
IsSendEnabledCoins(ctx context.Context, coins ...sdk.Coin) error
|
||||
BlockedAddr(addr sdk.AccAddress) bool
|
||||
}
|
||||
|
||||
@@ -34,6 +34,7 @@ type Keeper struct {
|
||||
cdc codec.Codec
|
||||
router baseapp.MessageRouter
|
||||
authKeeper authz.AccountKeeper
|
||||
bankKeeper authz.BankKeeper
|
||||
}
|
||||
|
||||
// NewKeeper constructs a message authorization Keeper
|
||||
@@ -46,6 +47,13 @@ func NewKeeper(storeService corestoretypes.KVStoreService, cdc codec.Codec, rout
|
||||
}
|
||||
}
|
||||
|
||||
// Super ugly hack to not be breaking in v0.50 and v0.47
|
||||
// DO NOT USE.
|
||||
func (k Keeper) SetBankKeeper(bk authz.BankKeeper) Keeper {
|
||||
k.bankKeeper = bk
|
||||
return k
|
||||
}
|
||||
|
||||
// Logger returns a module-specific logger.
|
||||
func (k Keeper) Logger(ctx context.Context) log.Logger {
|
||||
sdkCtx := sdk.UnwrapSDKContext(ctx)
|
||||
|
||||
@@ -68,14 +68,14 @@ 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)
|
||||
s.bankKeeper.EXPECT().BlockedAddr(gomock.Any()).Return(false).AnyTimes()
|
||||
|
||||
s.authzKeeper = authzkeeper.NewKeeper(storeService, s.encCfg.Codec, s.baseApp.MsgServiceRouter(), s.accountKeeper)
|
||||
s.authzKeeper = authzkeeper.NewKeeper(storeService, s.encCfg.Codec, s.baseApp.MsgServiceRouter(), s.accountKeeper).SetBankKeeper(s.bankKeeper)
|
||||
|
||||
queryHelper := baseapp.NewQueryServerTestHelper(s.ctx, s.encCfg.InterfaceRegistry)
|
||||
authz.RegisterQueryServer(queryHelper, s.authzKeeper)
|
||||
|
||||
@@ -38,6 +38,10 @@ func (k Keeper) Grant(goCtx context.Context, msg *authz.MsgGrant) (*authz.MsgGra
|
||||
ctx := sdk.UnwrapSDKContext(goCtx)
|
||||
granteeAcc := k.authKeeper.GetAccount(ctx, grantee)
|
||||
if granteeAcc == nil {
|
||||
if k.bankKeeper.BlockedAddr(grantee) {
|
||||
return nil, sdkerrors.ErrUnauthorized.Wrapf("%s is not allowed to receive funds", grantee)
|
||||
}
|
||||
|
||||
granteeAcc = k.authKeeper.NewAccountWithAddress(ctx, grantee)
|
||||
k.authKeeper.SetAccount(ctx, granteeAcc)
|
||||
}
|
||||
|
||||
@@ -113,7 +113,7 @@ type AppModule struct {
|
||||
func NewAppModule(cdc codec.Codec, keeper keeper.Keeper, ak authz.AccountKeeper, bk authz.BankKeeper, registry cdctypes.InterfaceRegistry) AppModule {
|
||||
return AppModule{
|
||||
AppModuleBasic: AppModuleBasic{cdc: cdc, ac: ak.AddressCodec()},
|
||||
keeper: keeper,
|
||||
keeper: keeper.SetBankKeeper(bk), // Super ugly hack to not be api breaking in v0.50 and v0.47
|
||||
accountKeeper: ak,
|
||||
bankKeeper: bk,
|
||||
registry: registry,
|
||||
|
||||
@@ -113,6 +113,20 @@ func (m *MockBankKeeper) EXPECT() *MockBankKeeperMockRecorder {
|
||||
return m.recorder
|
||||
}
|
||||
|
||||
// BlockedAddr mocks base method.
|
||||
func (m *MockBankKeeper) BlockedAddr(addr types.AccAddress) bool {
|
||||
m.ctrl.T.Helper()
|
||||
ret := m.ctrl.Call(m, "BlockedAddr", addr)
|
||||
ret0, _ := ret[0].(bool)
|
||||
return ret0
|
||||
}
|
||||
|
||||
// BlockedAddr indicates an expected call of BlockedAddr.
|
||||
func (mr *MockBankKeeperMockRecorder) BlockedAddr(addr interface{}) *gomock.Call {
|
||||
mr.mock.ctrl.T.Helper()
|
||||
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BlockedAddr", reflect.TypeOf((*MockBankKeeper)(nil).BlockedAddr), addr)
|
||||
}
|
||||
|
||||
// IsSendEnabledCoins mocks base method.
|
||||
func (m *MockBankKeeper) IsSendEnabledCoins(ctx context.Context, coins ...types.Coin) error {
|
||||
m.ctrl.T.Helper()
|
||||
|
||||
Reference in New Issue
Block a user