Skip to content

Commit bc03b9f

Browse files
suefaykeithsue
authored andcommitted
improve liquidation params
1 parent d2958e9 commit bc03b9f

7 files changed

Lines changed: 294 additions & 178 deletions

File tree

api/side/liquidation/params.pulsar.go

Lines changed: 147 additions & 87 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

proto/side/liquidation/params.proto

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,30 @@ syntax = "proto3";
22
package side.liquidation;
33

44
import "gogoproto/gogo.proto";
5+
import "cosmos_proto/cosmos.proto";
56

67
option go_package = "github.com/sideprotocol/side/x/liquidation/types";
78

89
// Params defines the parameters for the module.
910
message Params {
10-
// minimum liquidation factor permille
11-
uint32 min_liquidation_factor = 1;
12-
// liquidation bonus factor permille
13-
uint32 liquidation_bonus_factor = 2;
14-
// protocol liquidation fee factor permille
15-
uint32 protocol_liquidation_fee_factor = 3;
11+
// minimum liquidation factor
12+
string min_liquidation_factor = 1 [
13+
(cosmos_proto.scalar) = "cosmos.Dec",
14+
(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec",
15+
(gogoproto.nullable) = false
16+
];
17+
// liquidation bonus factor
18+
string liquidation_bonus_factor = 2 [
19+
(cosmos_proto.scalar) = "cosmos.Dec",
20+
(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec",
21+
(gogoproto.nullable) = false
22+
];
23+
// protocol liquidation fee factor
24+
string protocol_liquidation_fee_factor = 3 [
25+
(cosmos_proto.scalar) = "cosmos.Dec",
26+
(gogoproto.customtype) = "cosmossdk.io/math.LegacyDec",
27+
(gogoproto.nullable) = false
28+
];
1629
// protocol liquidation fee collector
1730
string protocol_liquidation_fee_collector = 4;
1831
}

x/liquidation/keeper/liquidation.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ func (k Keeper) HandleLiquidation(ctx sdk.Context, liquidator string, liquidatio
3535
}
3636

3737
// minimum liquidation debt amount if the remaining debt amount is sufficient
38-
minLiquidationDebtAmount := liquidation.DebtAmount.Amount.Mul(sdkmath.NewInt(int64(k.MinLiquidationFactor(ctx)))).Quo(sdkmath.NewInt(1000))
38+
minLiquidationDebtAmount := liquidation.DebtAmount.Amount.ToLegacyDec().Mul(k.MinLiquidationFactor(ctx)).TruncateInt()
3939

4040
// check remaining debt amount
4141
if remainingDebtAmount.Amount.GTE(minLiquidationDebtAmount) && debtAmount.Amount.LT(minLiquidationDebtAmount) {
@@ -75,7 +75,7 @@ func (k Keeper) HandleLiquidation(ctx sdk.Context, liquidator string, liquidatio
7575
remainingCollateralAmount = remainingCollateralAmount.SubAmount(collateralAmount)
7676

7777
// calculate bonus
78-
bonusAmountInDebt := debtAmount.Amount.Mul(sdkmath.NewInt(int64(k.LiquidationBonusFactor(ctx)))).Quo(sdkmath.NewInt(1000))
78+
bonusAmountInDebt := debtAmount.Amount.ToLegacyDec().Mul(k.LiquidationBonusFactor(ctx)).TruncateInt()
7979
bonusAmount := types.GetCollateralAmount(bonusAmountInDebt, debtDecimals, collateralDecimals, currentPrice, collateralIsBaseAsset)
8080

8181
// check if there is left collateral for bonus
@@ -88,7 +88,7 @@ func (k Keeper) HandleLiquidation(ctx sdk.Context, liquidator string, liquidatio
8888
return nil, errorsmod.Wrapf(types.ErrInvalidAmount, "dust collateral amount %s", collateralAmount)
8989
}
9090

91-
protocolLiquidationFee := bonusAmount.Mul(sdkmath.NewInt(int64(k.ProtocolLiquidationFeeFactor(ctx)))).Quo(sdkmath.NewInt(1000))
91+
protocolLiquidationFee := bonusAmount.ToLegacyDec().Mul(k.ProtocolLiquidationFeeFactor(ctx)).TruncateInt()
9292

9393
liquidation.LiquidatedCollateralAmount = liquidation.LiquidatedCollateralAmount.AddAmount(collateralAmount).AddAmount(bonusAmount)
9494
liquidation.LiquidatedDebtAmount = liquidation.LiquidatedDebtAmount.Add(debtAmount)

x/liquidation/keeper/params.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,22 @@
11
package keeper
22

33
import (
4+
sdkmath "cosmossdk.io/math"
45
sdk "github.com/cosmos/cosmos-sdk/types"
56
)
67

78
// MinLiquidationFactor returns the minimum liquidation factor
8-
func (k Keeper) MinLiquidationFactor(ctx sdk.Context) uint32 {
9+
func (k Keeper) MinLiquidationFactor(ctx sdk.Context) sdkmath.LegacyDec {
910
return k.GetParams(ctx).MinLiquidationFactor
1011
}
1112

1213
// LiquidationBonusFactor returns the liquidation bonus factor
13-
func (k Keeper) LiquidationBonusFactor(ctx sdk.Context) uint32 {
14+
func (k Keeper) LiquidationBonusFactor(ctx sdk.Context) sdkmath.LegacyDec {
1415
return k.GetParams(ctx).LiquidationBonusFactor
1516
}
1617

1718
// ProtocolLiquidationFeeFactor returns the protocol liquidation fee factor
18-
func (k Keeper) ProtocolLiquidationFeeFactor(ctx sdk.Context) uint32 {
19+
func (k Keeper) ProtocolLiquidationFeeFactor(ctx sdk.Context) sdkmath.LegacyDec {
1920
return k.GetParams(ctx).ProtocolLiquidationFeeFactor
2021
}
2122

x/liquidation/module/abci.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package liquidation
22

33
import (
4-
sdkmath "cosmossdk.io/math"
54
sdk "github.com/cosmos/cosmos-sdk/types"
65

76
"github.com/sideprotocol/side/x/liquidation/keeper"
@@ -47,7 +46,7 @@ func handlePendingLiquidations(ctx sdk.Context, k keeper.Keeper) {
4746
continue
4847
}
4948

50-
minLiquidationDebtAmount := liquidation.DebtAmount.Amount.Mul(sdkmath.NewInt(int64(k.MinLiquidationFactor(ctx)))).Quo(sdkmath.NewInt(1000))
49+
minLiquidationDebtAmount := liquidation.DebtAmount.Amount.ToLegacyDec().Mul(k.MinLiquidationFactor(ctx)).TruncateInt()
5150
if remainingDebtAmount.Amount.GTE(minLiquidationDebtAmount) {
5251
continue
5352
}

x/liquidation/types/params.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,21 @@ package types
22

33
import (
44
errorsmod "cosmossdk.io/errors"
5+
sdkmath "cosmossdk.io/math"
56
sdk "github.com/cosmos/cosmos-sdk/types"
67
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
78
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
89
)
910

1011
var (
1112
// default minimum liquidation factor
12-
DefaultMinLiquidationFactor = uint32(20) // 2%
13+
DefaultMinLiquidationFactor = sdkmath.LegacyMustNewDecFromStr("0.02") // 2%
1314

1415
// default liquidation bonus factor
15-
DefaultLiquidationBonusFactor = uint32(50) // 5%
16+
DefaultLiquidationBonusFactor = sdkmath.LegacyMustNewDecFromStr("0.05") // 5%
1617

1718
// default protocol liquidation fee factor
18-
DefaultProtocolLiquidationFeeFactor = uint32(100) // 10%
19+
DefaultProtocolLiquidationFeeFactor = sdkmath.LegacyMustNewDecFromStr("0.1") // 10%
1920
)
2021

2122
// NewParams creates a new Params instance
@@ -35,15 +36,15 @@ func DefaultParams() Params {
3536

3637
// Validate validates the set of params
3738
func (p Params) Validate() error {
38-
if p.MinLiquidationFactor == 0 || p.MinLiquidationFactor >= 1000 {
39+
if !p.MinLiquidationFactor.IsPositive() || p.MinLiquidationFactor.GT(sdkmath.LegacyOneDec()) {
3940
return errorsmod.Wrap(ErrInvalidParams, "invalid minimum liquidation factor")
4041
}
4142

42-
if p.LiquidationBonusFactor == 0 || p.LiquidationBonusFactor >= 1000 {
43+
if !p.LiquidationBonusFactor.IsPositive() || p.LiquidationBonusFactor.GTE(sdkmath.LegacyOneDec()) {
4344
return errorsmod.Wrap(ErrInvalidParams, "invalid liquidation bonus factor")
4445
}
4546

46-
if p.ProtocolLiquidationFeeFactor >= 1000 {
47+
if p.ProtocolLiquidationFeeFactor.GTE(sdkmath.LegacyOneDec()) {
4748
return errorsmod.Wrap(ErrInvalidParams, "invalid protocol liquidation fee factor")
4849
}
4950

0 commit comments

Comments
 (0)