diff --git a/x/auction/keeper/auction.go b/x/auction/keeper/auction.go index 66cdc1a8..a1ef9509 100644 --- a/x/auction/keeper/auction.go +++ b/x/auction/keeper/auction.go @@ -102,10 +102,7 @@ func (k Keeper) ExtractBid(ctx sdk.Context, bidder sdk.AccAddress, bid sdk.Coin) var proposerReward sdk.Coins if params.ProposerFee.IsZero() { - // send the entire bid to the escrow account when no proposer fee is set - if err := k.bankKeeper.SendCoins(ctx, bidder, escrowAddress, sdk.NewCoins(bid)); err != nil { - return err - } + return k.SendBid(ctx, bidder, escrowAddress, sdk.NewCoins(bid)) } else { rewardsAddress, err := k.rewardsAddressProvider.GetRewardsAddress(ctx) if err != nil { @@ -118,7 +115,7 @@ func (k Keeper) ExtractBid(ctx sdk.Context, bidder sdk.AccAddress, bid sdk.Coin) bid := sdk.NewDecCoinsFromCoins(bid) proposerReward, _ = bid.MulDecTruncate(params.ProposerFee).TruncateDecimal() - if err := k.bankKeeper.SendCoins(ctx, bidder, rewardsAddress, proposerReward); err != nil { + if err := k.SendBid(ctx, bidder, rewardsAddress, proposerReward); err != nil { return err } @@ -127,7 +124,7 @@ func (k Keeper) ExtractBid(ctx sdk.Context, bidder sdk.AccAddress, bid sdk.Coin) escrowTotal := bid.Sub(sdk.NewDecCoinsFromCoins(proposerReward...)) escrowReward, _ := escrowTotal.TruncateDecimal() - if err := k.bankKeeper.SendCoins(ctx, bidder, escrowAddress, escrowReward); err != nil { + if err := k.SendBid(ctx, bidder, escrowAddress, escrowReward); err != nil { return err } } @@ -206,6 +203,16 @@ func (k Keeper) ValidateBundleTimeouts(bidInfo *types.BidInfo) error { return nil } +// SendBid sends the bid from the bidder to the relevant address. +func (k Keeper) SendBid(ctx sdk.Context, from, to sdk.AccAddress, bid sdk.Coins) error { + moduleAddress := k.accountKeeper.GetModuleAddress(types.ModuleName) + if moduleAddress.Equals(to) { + return k.bankKeeper.SendCoinsFromAccountToModule(ctx, from, types.ModuleName, bid) + } + + return k.bankKeeper.SendCoins(ctx, from, to, bid) +} + // filterSigners removes any signers from the currentSigners map that are not in the txSigners map. func filterSigners(currentSigners, txSigners map[string]struct{}) { for signer := range currentSigners { diff --git a/x/auction/keeper/keeper.go b/x/auction/keeper/keeper.go index 97812c82..4599ed46 100644 --- a/x/auction/keeper/keeper.go +++ b/x/auction/keeper/keeper.go @@ -18,6 +18,7 @@ type Keeper struct { cdc codec.BinaryCodec storeKey storetypes.StoreKey + accountKeeper types.AccountKeeper bankKeeper types.BankKeeper rewardsAddressProvider types.RewardsAddressProvider @@ -73,6 +74,7 @@ func NewKeeperWithRewardsAddressProvider( return Keeper{ cdc: cdc, storeKey: storeKey, + accountKeeper: accountKeeper, bankKeeper: bankKeeper, rewardsAddressProvider: rewardsAddressProvider, authority: authority, diff --git a/x/auction/types/expected_keepers.go b/x/auction/types/expected_keepers.go index c02d6b00..a04f49be 100644 --- a/x/auction/types/expected_keepers.go +++ b/x/auction/types/expected_keepers.go @@ -1,7 +1,7 @@ package types import ( - context "context" + "context" sdk "github.com/cosmos/cosmos-sdk/types" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" @@ -18,7 +18,8 @@ type AccountKeeper interface { // //go:generate mockery --name BankKeeper --output ./mocks --outpkg mocks --case underscore type BankKeeper interface { - SendCoins(ctx context.Context, fromAddr, toAddr sdk.AccAddress, amt sdk.Coins) error + SendCoinsFromAccountToModule(ctx context.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error + SendCoins(ctx context.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) error GetBalance(ctx context.Context, addr sdk.AccAddress, denom string) sdk.Coin } diff --git a/x/auction/types/mocks/account_keeper.go b/x/auction/types/mocks/account_keeper.go index 45c7b8ee..a98ff41b 100644 --- a/x/auction/types/mocks/account_keeper.go +++ b/x/auction/types/mocks/account_keeper.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.40.1. DO NOT EDIT. +// Code generated by mockery v2.30.1. DO NOT EDIT. package mocks @@ -16,10 +16,6 @@ type AccountKeeper struct { func (_m *AccountKeeper) GetModuleAddress(moduleName string) types.AccAddress { ret := _m.Called(moduleName) - if len(ret) == 0 { - panic("no return value specified for GetModuleAddress") - } - var r0 types.AccAddress if rf, ok := ret.Get(0).(func(string) types.AccAddress); ok { r0 = rf(moduleName) @@ -37,8 +33,7 @@ func (_m *AccountKeeper) GetModuleAddress(moduleName string) types.AccAddress { func NewAccountKeeper(t interface { mock.TestingT Cleanup(func()) -}, -) *AccountKeeper { +}) *AccountKeeper { mock := &AccountKeeper{} mock.Mock.Test(t) diff --git a/x/auction/types/mocks/bank_keeper.go b/x/auction/types/mocks/bank_keeper.go index 3047c6f0..d5019b58 100644 --- a/x/auction/types/mocks/bank_keeper.go +++ b/x/auction/types/mocks/bank_keeper.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.40.1. DO NOT EDIT. +// Code generated by mockery v2.30.1. DO NOT EDIT. package mocks @@ -18,10 +18,6 @@ type BankKeeper struct { func (_m *BankKeeper) GetBalance(ctx context.Context, addr types.AccAddress, denom string) types.Coin { ret := _m.Called(ctx, addr, denom) - if len(ret) == 0 { - panic("no return value specified for GetBalance") - } - var r0 types.Coin if rf, ok := ret.Get(0).(func(context.Context, types.AccAddress, string) types.Coin); ok { r0 = rf(ctx, addr, denom) @@ -36,10 +32,6 @@ func (_m *BankKeeper) GetBalance(ctx context.Context, addr types.AccAddress, den func (_m *BankKeeper) SendCoins(ctx context.Context, fromAddr types.AccAddress, toAddr types.AccAddress, amt types.Coins) error { ret := _m.Called(ctx, fromAddr, toAddr, amt) - if len(ret) == 0 { - panic("no return value specified for SendCoins") - } - var r0 error if rf, ok := ret.Get(0).(func(context.Context, types.AccAddress, types.AccAddress, types.Coins) error); ok { r0 = rf(ctx, fromAddr, toAddr, amt) @@ -50,13 +42,26 @@ func (_m *BankKeeper) SendCoins(ctx context.Context, fromAddr types.AccAddress, return r0 } +// SendCoinsFromAccountToModule provides a mock function with given fields: ctx, senderAddr, recipientModule, amt +func (_m *BankKeeper) SendCoinsFromAccountToModule(ctx context.Context, senderAddr types.AccAddress, recipientModule string, amt types.Coins) error { + ret := _m.Called(ctx, senderAddr, recipientModule, amt) + + var r0 error + if rf, ok := ret.Get(0).(func(context.Context, types.AccAddress, string, types.Coins) error); ok { + r0 = rf(ctx, senderAddr, recipientModule, amt) + } else { + r0 = ret.Error(0) + } + + return r0 +} + // NewBankKeeper creates a new instance of BankKeeper. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. // The first argument is typically a *testing.T value. func NewBankKeeper(t interface { mock.TestingT Cleanup(func()) -}, -) *BankKeeper { +}) *BankKeeper { mock := &BankKeeper{} mock.Mock.Test(t) diff --git a/x/auction/types/mocks/distribution_keeper.go b/x/auction/types/mocks/distribution_keeper.go index fbe703aa..b64864ad 100644 --- a/x/auction/types/mocks/distribution_keeper.go +++ b/x/auction/types/mocks/distribution_keeper.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.40.1. DO NOT EDIT. +// Code generated by mockery v2.30.1. DO NOT EDIT. package mocks @@ -18,10 +18,6 @@ type DistributionKeeper struct { func (_m *DistributionKeeper) GetPreviousProposerConsAddr(ctx context.Context) (types.ConsAddress, error) { ret := _m.Called(ctx) - if len(ret) == 0 { - panic("no return value specified for GetPreviousProposerConsAddr") - } - var r0 types.ConsAddress var r1 error if rf, ok := ret.Get(0).(func(context.Context) (types.ConsAddress, error)); ok { @@ -49,8 +45,7 @@ func (_m *DistributionKeeper) GetPreviousProposerConsAddr(ctx context.Context) ( func NewDistributionKeeper(t interface { mock.TestingT Cleanup(func()) -}, -) *DistributionKeeper { +}) *DistributionKeeper { mock := &DistributionKeeper{} mock.Mock.Test(t) diff --git a/x/auction/types/mocks/rewards_address_provider.go b/x/auction/types/mocks/rewards_address_provider.go index fe56604e..5c740bc1 100644 --- a/x/auction/types/mocks/rewards_address_provider.go +++ b/x/auction/types/mocks/rewards_address_provider.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.40.1. DO NOT EDIT. +// Code generated by mockery v2.30.1. DO NOT EDIT. package mocks @@ -16,10 +16,6 @@ type RewardsAddressProvider struct { func (_m *RewardsAddressProvider) GetRewardsAddress(context types.Context) (types.AccAddress, error) { ret := _m.Called(context) - if len(ret) == 0 { - panic("no return value specified for GetRewardsAddress") - } - var r0 types.AccAddress var r1 error if rf, ok := ret.Get(0).(func(types.Context) (types.AccAddress, error)); ok { @@ -47,8 +43,7 @@ func (_m *RewardsAddressProvider) GetRewardsAddress(context types.Context) (type func NewRewardsAddressProvider(t interface { mock.TestingT Cleanup(func()) -}, -) *RewardsAddressProvider { +}) *RewardsAddressProvider { mock := &RewardsAddressProvider{} mock.Mock.Test(t) diff --git a/x/auction/types/mocks/staking_keeper.go b/x/auction/types/mocks/staking_keeper.go index eda1f9c5..81a2905a 100644 --- a/x/auction/types/mocks/staking_keeper.go +++ b/x/auction/types/mocks/staking_keeper.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.40.1. DO NOT EDIT. +// Code generated by mockery v2.30.1. DO NOT EDIT. package mocks @@ -20,10 +20,6 @@ type StakingKeeper struct { func (_m *StakingKeeper) GetValidatorByConsAddr(_a0 context.Context, _a1 types.ConsAddress) (stakingtypes.Validator, error) { ret := _m.Called(_a0, _a1) - if len(ret) == 0 { - panic("no return value specified for GetValidatorByConsAddr") - } - var r0 stakingtypes.Validator var r1 error if rf, ok := ret.Get(0).(func(context.Context, types.ConsAddress) (stakingtypes.Validator, error)); ok { @@ -49,8 +45,7 @@ func (_m *StakingKeeper) GetValidatorByConsAddr(_a0 context.Context, _a1 types.C func NewStakingKeeper(t interface { mock.TestingT Cleanup(func()) -}, -) *StakingKeeper { +}) *StakingKeeper { mock := &StakingKeeper{} mock.Mock.Test(t)