Skip to content

Commit

Permalink
fix(x/escrow): properly send fees to pool
Browse files Browse the repository at this point in the history
  • Loading branch information
boz committed Jun 26, 2023
1 parent f434c88 commit fc1a41c
Show file tree
Hide file tree
Showing 5 changed files with 162 additions and 7 deletions.
1 change: 1 addition & 0 deletions app/app_configure.go
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@ func (app *AkashApp) setAkashKeepers() {
app.keys[escrow.StoreKey],
app.Keepers.Cosmos.Bank,
app.Keepers.Akash.Take,
app.Keepers.Cosmos.Distr,
)

app.Keepers.Akash.Deployment = deployment.NewKeeper(
Expand Down
13 changes: 12 additions & 1 deletion testutil/state/suite.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"testing"

sdk "github.com/cosmos/cosmos-sdk/types"
distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types"
"github.com/stretchr/testify/mock"
tmproto "github.com/tendermint/tendermint/proto/tendermint/types"

Expand Down Expand Up @@ -46,6 +47,7 @@ type Keepers struct {
Deployment dkeeper.IKeeper
Provider pkeeper.IKeeper
Bank *emocks.BankKeeper
Distr *emocks.DistrKeeper
}

// SetupTestSuite provides toolkit for accessing stores and keepers
Expand All @@ -66,6 +68,15 @@ func SetupTestSuiteWithKeepers(t testing.TB, keepers Keepers) *TestSuite {
keepers.Bank = bkeeper
}

if keepers.Distr == nil {
dkeeper := &emocks.DistrKeeper{}
dkeeper.
On("GetFeePool", mock.Anything).
Return(distrtypes.FeePool{})
dkeeper.On("SetFeePool", mock.Anything, mock.Anything).
Return()
}

app := app.Setup(false)

if keepers.Audit == nil {
Expand All @@ -77,7 +88,7 @@ func SetupTestSuiteWithKeepers(t testing.TB, keepers Keepers) *TestSuite {
}

if keepers.Escrow == nil {
keepers.Escrow = ekeeper.NewKeeper(etypes.ModuleCdc, app.GetKey(etypes.StoreKey), keepers.Bank, keepers.Take)
keepers.Escrow = ekeeper.NewKeeper(etypes.ModuleCdc, app.GetKey(etypes.StoreKey), keepers.Bank, keepers.Take, keepers.Distr)
}
if keepers.Market == nil {
keepers.Market = mkeeper.NewKeeper(mtypes.ModuleCdc, app.GetKey(mtypes.StoreKey), app.GetSubspace(mtypes.ModuleName), keepers.Escrow)
Expand Down
7 changes: 7 additions & 0 deletions x/escrow/keeper/external.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package keeper

import (
sdk "github.com/cosmos/cosmos-sdk/types"
distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types"
)

//go:generate mockery --name BankKeeper --output ./mocks
Expand All @@ -15,3 +16,9 @@ type BankKeeper interface {
type TakeKeeper interface {
SubtractFees(ctx sdk.Context, amt sdk.Coin) (sdk.Coin, sdk.Coin, error)
}

//go:generate mockery --name DistrKeeper --output ./mocks
type DistrKeeper interface {
GetFeePool(ctx sdk.Context) distrtypes.FeePool
SetFeePool(ctx sdk.Context, pool distrtypes.FeePool)
}
33 changes: 27 additions & 6 deletions x/escrow/keeper/keeper.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
sdk "github.com/cosmos/cosmos-sdk/types"

types "github.com/akash-network/akash-api/go/node/escrow/v1beta3"
distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types"
)

type AccountHook func(sdk.Context, types.Account)
Expand Down Expand Up @@ -34,12 +35,13 @@ type Keeper interface {
SavePayment(sdk.Context, types.FractionalPayment)
}

func NewKeeper(cdc codec.BinaryCodec, skey sdk.StoreKey, bkeeper BankKeeper, tkeeper TakeKeeper) Keeper {
func NewKeeper(cdc codec.BinaryCodec, skey sdk.StoreKey, bkeeper BankKeeper, tkeeper TakeKeeper, dkeeper DistrKeeper) Keeper {
return &keeper{
cdc: cdc,
skey: skey,
bkeeper: bkeeper,
tkeeper: tkeeper,
dkeeper: dkeeper,
}
}

Expand All @@ -48,6 +50,7 @@ type keeper struct {
skey sdk.StoreKey
bkeeper BankKeeper
tkeeper TakeKeeper
dkeeper DistrKeeper

hooks struct {
onAccountClosed []AccountHook
Expand Down Expand Up @@ -545,11 +548,9 @@ func (k *keeper) paymentWithdraw(ctx sdk.Context, obj *types.FractionalPayment)
return err
}

if !fee.IsZero() {
if err := k.bkeeper.SendCoinsFromModuleToModule(ctx, types.ModuleName, "community", sdk.NewCoins(fee)); err != nil {
ctx.Logger().Error("payment withdraw - fees", "err", err, "account", obj.AccountID, "payment", obj.PaymentID)
return err
}
if err := k.sendFeeToCommunityPool(ctx, fee); err != nil {
ctx.Logger().Error("payment withdraw - fees", "err", err, "account", obj.AccountID, "payment", obj.PaymentID)
return err
}

if !earnings.IsZero() {
Expand All @@ -568,6 +569,26 @@ func (k *keeper) paymentWithdraw(ctx sdk.Context, obj *types.FractionalPayment)
return nil
}

func (k keeper) sendFeeToCommunityPool(ctx sdk.Context, fee sdk.Coin) error {

if fee.IsZero() {
return nil
}

// see https://github.com/cosmos/cosmos-sdk/blob/c2a07cea272a7878b5bc2ec160eb58ca83794214/x/distribution/keeper/keeper.go#L251-L263

if err := k.bkeeper.SendCoinsFromModuleToModule(ctx, types.ModuleName, distrtypes.ModuleName, sdk.NewCoins(fee)); err != nil {
return err
}

pool := k.dkeeper.GetFeePool(ctx)

pool.CommunityPool = pool.CommunityPool.Add(sdk.NewDecCoinFromCoin(fee))
k.dkeeper.SetFeePool(ctx, pool)

return nil
}

func accountSettleFullblocks(
account types.Account,
payments []types.FractionalPayment,
Expand Down
115 changes: 115 additions & 0 deletions x/escrow/keeper/mocks/distr_keeper.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit fc1a41c

Please sign in to comment.