-
Notifications
You must be signed in to change notification settings - Fork 91
/
liquidations_config.go
80 lines (71 loc) · 2.59 KB
/
liquidations_config.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package types
import (
errorsmod "cosmossdk.io/errors"
"github.com/dydxprotocol/v4-chain/protocol/lib"
)
// Validate validates each individual field of the liquidations config for validity.
// It returns an error if any of the liquidation config fields fail the following validation:
// - `maxLiquidationFee == 0 || maxLiquidationFee > 1_000_000`.
// - `bankruptcyAdjustmentPpm < 1_000_000`.
// - `spreadToMaintenanceMarginRatioPpm == 0.
// - `maxPositionPortionLiquidatedPpm == 0 || maxPositionPortionLiquidatedPpm > 1_000_000`.
// - `maxNotionalLiquidated == 0`.
// - `maxQuantumsInsuranceLost == 0`.
//
// Note that `minPositionNotionalLiquidated` is intentionally not validated.
func (lc *LiquidationsConfig) Validate() error {
// Validate the BankruptcyAdjustmentPpm.
bankruptcyAdjustmentPpm := lc.FillablePriceConfig.BankruptcyAdjustmentPpm
if bankruptcyAdjustmentPpm < lib.OneMillion {
return errorsmod.Wrapf(
ErrInvalidLiquidationsConfig,
"%v is not a valid BankruptcyAdjustmentPpm",
bankruptcyAdjustmentPpm,
)
}
// Validate the SpreadToMaintenanceMarginRatioPpm.
spreadToMaintenanceMarginRatioPpm := lc.FillablePriceConfig.SpreadToMaintenanceMarginRatioPpm
if spreadToMaintenanceMarginRatioPpm == 0 {
return errorsmod.Wrapf(
ErrInvalidLiquidationsConfig,
"%v is not a valid SpreadToMaintenanceMarginRatioPpm",
spreadToMaintenanceMarginRatioPpm,
)
}
// Validate the MaxLiquidationFeePpm.
if lc.MaxLiquidationFeePpm == 0 || lc.MaxLiquidationFeePpm > lib.OneMillion {
return errorsmod.Wrapf(
ErrInvalidLiquidationsConfig,
"%v is not a valid MaxLiquidationFeePpm",
lc.MaxLiquidationFeePpm,
)
}
// Validate the MaxPositionPortionLiquidatedPpm.
maxPositionPortionLiquidatedPpm := lc.PositionBlockLimits.MaxPositionPortionLiquidatedPpm
if maxPositionPortionLiquidatedPpm == 0 || maxPositionPortionLiquidatedPpm > lib.OneMillion {
return errorsmod.Wrapf(
ErrInvalidLiquidationsConfig,
"%v is not a valid MaxPositionPortionLiquidatedPpm",
maxPositionPortionLiquidatedPpm,
)
}
// Validate the MaxNotionalLiquidated.
maxNotionalLiquidated := lc.SubaccountBlockLimits.MaxNotionalLiquidated
if maxNotionalLiquidated == 0 {
return errorsmod.Wrapf(
ErrInvalidLiquidationsConfig,
"%v is not a valid MaxNotionalLiquidated",
maxNotionalLiquidated,
)
}
// Validate the MaxQuantumsInsuranceLost.
maxQuantumsInsuranceLost := lc.SubaccountBlockLimits.MaxQuantumsInsuranceLost
if maxQuantumsInsuranceLost == 0 {
return errorsmod.Wrapf(
ErrInvalidLiquidationsConfig,
"%v is not a valid MaxQuantumsInsuranceLost",
maxQuantumsInsuranceLost,
)
}
return nil
}