Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

adding changes for burn functionality on spread fee #389

Closed
wants to merge 3 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions proto/terra/market/v1beta1/market.proto
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,9 @@ message Params {
(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec",
(gogoproto.nullable) = false
];
bytes fee_burn_ratio = 4 [
(gogoproto.moretags) = "yaml:\"fee_burn_ratio\"",
(gogoproto.customtype) = "github.com/cosmos/cosmos-sdk/types.Dec",
(gogoproto.nullable) = false
];
}
23 changes: 18 additions & 5 deletions x/market/keeper/msg_server.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package keeper

import (
"context"

Check failure on line 4 in x/market/keeper/msg_server.go

View workflow job for this annotation

GitHub Actions / golangci-lint

File is not `gofumpt`-ed (gofumpt)
treasury "github.com/classic-terra/core/v2/x/treasury/types"

sdk "github.com/cosmos/cosmos-sdk/types"

Expand Down Expand Up @@ -121,12 +122,24 @@
return nil, err
}

// Send swap fee to oracle account
// Send swap fee to oracle account based on percentage, burn the rest
if feeCoin.IsPositive() {
feeCoins := sdk.NewCoins(feeCoin)
err = k.BankKeeper.SendCoinsFromModuleToModule(ctx, types.ModuleName, oracletypes.ModuleName, feeCoins)
if err != nil {
return nil, err
var sendCoins sdk.Coins
burnCoins := sdk.NewCoins(sdk.NewCoin(feeCoin.GetDenom(), sdk.NewDec(feeCoin.Amount.Int64()).Mul(k.FeeBurnRatio(ctx)).TruncateInt()))
if !burnCoins.IsZero() {
sendCoins = sdk.NewCoins(feeCoin.Sub(burnCoins[0]))
err = k.BankKeeper.SendCoinsFromModuleToModule(ctx, types.ModuleName, treasury.BurnModuleName, burnCoins)
if err != nil {
return nil, err
}
} else {
sendCoins = sdk.NewCoins(feeCoin)
}
if !sendCoins.IsZero() {
err = k.BankKeeper.SendCoinsFromModuleToModule(ctx, types.ModuleName, oracletypes.ModuleName, sendCoins)
if err != nil {
return nil, err
}
}
}

Expand Down
6 changes: 6 additions & 0 deletions x/market/keeper/params.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,12 @@ func (k Keeper) MinStabilitySpread(ctx sdk.Context) (res sdk.Dec) {
return
}

// FeeBurnRatio represents the percentage of spread fee burnt during swaps to / from Luna.
func (k Keeper) FeeBurnRatio(ctx sdk.Context) (res sdk.Dec) {
k.paramSpace.Get(ctx, types.KeyFeeBurnRatio, &res)
return
}

// PoolRecoveryPeriod is the period required to recover Terra&Luna Pools to the MintBasePool & BurnBasePool
func (k Keeper) PoolRecoveryPeriod(ctx sdk.Context) (res uint64) {
k.paramSpace.Get(ctx, types.KeyPoolRecoveryPeriod, &res)
Expand Down
66 changes: 53 additions & 13 deletions x/market/types/genesis_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,63 @@
import (
"testing"

"github.com/stretchr/testify/require"

sdk "github.com/cosmos/cosmos-sdk/types"
)

func TestGenesisValidation(t *testing.T) {
genState := DefaultGenesisState()
require.NoError(t, ValidateGenesis(genState))

genState.Params.BasePool = sdk.NewDec(-1)
require.Error(t, ValidateGenesis(genState))

Check failure on line 10 in x/market/types/genesis_test.go

View workflow job for this annotation

GitHub Actions / golangci-lint

File is not `gofumpt`-ed (gofumpt)
genState = DefaultGenesisState()
genState.Params.PoolRecoveryPeriod = 0
require.Error(t, ValidateGenesis(genState))
tests := []struct {
name string
GenState func() *GenesisState
wantErr bool
}{
{
name: "valid state",
GenState: DefaultGenesisState,
wantErr: false,
},
{
name: "invalid BasePool state",
GenState: func() *GenesisState {
genState := DefaultGenesisState()
genState.Params.BasePool = sdk.NewDec(-1)
return genState
},
wantErr: true,
},
{
name: "invalid PoolRecoveryPeriod state",
GenState: func() *GenesisState {
genState := DefaultGenesisState()
genState.Params.PoolRecoveryPeriod = 0
return genState
},
wantErr: true,
},
{
name: "invalid MinStabilitySpread state",
GenState: func() *GenesisState {
genState := DefaultGenesisState()
genState.Params.MinStabilitySpread = sdk.NewDec(-1)
return genState
},
wantErr: true,
},
{
name: "invalid FeeBurnRatio state",
GenState: func() *GenesisState {
genState := DefaultGenesisState()
genState.Params.FeeBurnRatio = sdk.NewDec(-1)
return genState
},
wantErr: true,
},
}

genState = DefaultGenesisState()
genState.Params.MinStabilitySpread = sdk.NewDec(-1)
require.Error(t, ValidateGenesis(genState))
for _, tt := range tests {
genState := tt.GenState()
if err := ValidateGenesis(genState); (err != nil) != tt.wantErr {
t.Errorf("expected wantErr = %v got %v", tt.wantErr, err != nil)
}
}
}
121 changes: 80 additions & 41 deletions x/market/types/market.pb.go

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

Loading
Loading