Skip to content

Commit 51c7dc6

Browse files
authored
adding skip trigger boolean (#1416)
* adding skip trigger boolean * updating logic for add collateral and close position * updating logic for add collateral and close position * updating logic for add collateral and close position
1 parent 1de376a commit 51c7dc6

27 files changed

+107
-93
lines changed

x/perpetual/keeper/add_collateral.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212
"github.com/elys-network/elys/v7/x/perpetual/types"
1313
)
1414

15-
func (k Keeper) AddCollateral(ctx sdk.Context, mtp *types.MTP, pool *types.Pool, collateral sdk.Coin, ammPool *ammtypes.Pool) (sdk.Coin, error) {
15+
func (k Keeper) AddCollateral(ctx sdk.Context, mtp *types.MTP, pool *types.Pool, collateral sdk.Coin, ammPool *ammtypes.Pool, skipTriggerCheck bool) (sdk.Coin, error) {
1616
entry, found := k.assetProfileKeeper.GetEntry(ctx, ptypes.BaseCurrency)
1717
if !found {
1818
return sdk.Coin{}, errorsmod.Wrapf(assetprofiletypes.ErrAssetProfileNotFound, "asset %s not found", ptypes.BaseCurrency)
@@ -89,7 +89,7 @@ func (k Keeper) AddCollateral(ctx sdk.Context, mtp *types.MTP, pool *types.Pool,
8989
if err := msgOpen.ValidateBasic(); err != nil {
9090
return sdk.Coin{}, err
9191
}
92-
_, err := k.Open(ctx, &msgOpen)
92+
_, err := k.Open(ctx, &msgOpen, skipTriggerCheck)
9393
if err != nil {
9494
return sdk.Coin{}, err
9595
}

x/perpetual/keeper/close_position.go

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,14 @@ func (k Keeper) ClosePosition(ctx sdk.Context, msg *types.MsgClose) (types.MTP,
1818
return types.MTP{}, math.ZeroInt(), math.LegacyZeroDec(), math.ZeroInt(), math.ZeroInt(), math.ZeroInt(), math.ZeroInt(), math.ZeroInt(), false, false, zeroPerpFees, math.LegacyZeroDec(), sdk.Coin{}, math.ZeroInt(), math.ZeroInt(), err
1919
}
2020

21+
userClosingRatio := msg.Amount.ToLegacyDec().Quo(mtp.Custody.ToLegacyDec())
22+
if mtp.Position == types.Position_SHORT {
23+
userClosingRatio = msg.Amount.ToLegacyDec().Quo(mtp.Liabilities.ToLegacyDec())
24+
}
25+
if userClosingRatio.GT(math.LegacyOneDec()) {
26+
userClosingRatio = math.LegacyOneDec()
27+
}
28+
2129
initialCollateral := sdk.NewCoin(mtp.CollateralAsset, mtp.Collateral)
2230
initialCustody := mtp.Custody
2331
initialLiabilities := mtp.Liabilities
@@ -40,17 +48,15 @@ func (k Keeper) ClosePosition(ctx sdk.Context, msg *types.MsgClose) (types.MTP,
4048
}
4149

4250
if forceClosed {
43-
return mtp, repayAmt, closingRatio, returnAmt, fundingFeeAmt, fundingAmtDistributed, interestAmt, insuranceAmt, allInterestsPaid, forceClosed, perpetualFeesCoins, closingPrice, initialCollateral, initialCustody, initialLiabilities, nil
51+
// user didn't want close position fully and it got only partially closed, we return as the value user wanted to close is different now
52+
// OR it got fully liquidated
53+
if (!userClosingRatio.Equal(math.LegacyOneDec()) && !closingRatio.Equal(math.LegacyOneDec())) || closingRatio.Equal(math.LegacyOneDec()) {
54+
return mtp, repayAmt, closingRatio, returnAmt, fundingFeeAmt, fundingAmtDistributed, interestAmt, insuranceAmt, allInterestsPaid, forceClosed, perpetualFeesCoins, closingPrice, initialCollateral, initialCustody, initialLiabilities, nil
55+
}
4456
}
4557

4658
// Should be reset after MTPTriggerChecksAndUpdates
47-
closingRatio = msg.Amount.ToLegacyDec().Quo(mtp.Custody.ToLegacyDec())
48-
if mtp.Position == types.Position_SHORT {
49-
closingRatio = msg.Amount.ToLegacyDec().Quo(mtp.Liabilities.ToLegacyDec())
50-
}
51-
if closingRatio.GT(math.LegacyOneDec()) {
52-
closingRatio = math.LegacyOneDec()
53-
}
59+
closingRatio = userClosingRatio
5460

5561
// Estimate swap and repay
5662
repayAmt, returnAmt, perpFees, closingPrice, _, err := k.EstimateAndRepay(ctx, &mtp, &pool, &ammPool, closingRatio, false)

x/perpetual/keeper/close_test.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ func (suite *PerpetualKeeperTestSuite) TestClose() {
5050
StopLossPrice: math.LegacyZeroDec(),
5151
}
5252

53-
position, err := suite.app.PerpetualKeeper.Open(suite.ctx, openPositionMsg)
53+
position, err := suite.app.PerpetualKeeper.Open(suite.ctx, openPositionMsg, false)
5454
suite.Require().NoError(err)
5555
suite.app.AssetprofileKeeper.RemoveEntry(suite.ctx, ptypes.BaseCurrency)
5656
return &types.MsgClose{
@@ -83,7 +83,7 @@ func (suite *PerpetualKeeperTestSuite) TestClose() {
8383
StopLossPrice: math.LegacyZeroDec(),
8484
}
8585

86-
position, err := suite.app.PerpetualKeeper.Open(suite.ctx, openPositionMsg)
86+
position, err := suite.app.PerpetualKeeper.Open(suite.ctx, openPositionMsg, false)
8787
suite.Require().NoError(err)
8888

8989
return &types.MsgClose{
@@ -116,7 +116,7 @@ func (suite *PerpetualKeeperTestSuite) TestClose() {
116116
StopLossPrice: math.LegacyZeroDec(),
117117
}
118118

119-
position, err := suite.app.PerpetualKeeper.Open(suite.ctx, openPositionMsg)
119+
position, err := suite.app.PerpetualKeeper.Open(suite.ctx, openPositionMsg, false)
120120
suite.Require().NoError(err)
121121

122122
suite.app.OracleKeeper.SetPrice(suite.ctx, oracletypes.Price{
@@ -155,7 +155,7 @@ func (suite *PerpetualKeeperTestSuite) TestClose() {
155155
TakeProfitPrice: tradingAssetPrice.MulInt64(4),
156156
StopLossPrice: math.LegacyZeroDec(),
157157
}
158-
position, err := suite.app.PerpetualKeeper.Open(suite.ctx, openPositionMsg)
158+
position, err := suite.app.PerpetualKeeper.Open(suite.ctx, openPositionMsg, false)
159159
suite.Require().NoError(err)
160160
return &types.MsgClose{
161161
Creator: positionCreator.String(),
@@ -184,7 +184,7 @@ func (suite *PerpetualKeeperTestSuite) TestClose() {
184184
TakeProfitPrice: math.LegacyMustNewDecFromStr("0.95"),
185185
StopLossPrice: math.LegacyZeroDec(),
186186
}
187-
position, err := suite.app.PerpetualKeeper.Open(suite.ctx, openPositionMsg)
187+
position, err := suite.app.PerpetualKeeper.Open(suite.ctx, openPositionMsg, false)
188188
suite.Require().NoError(err)
189189
return &types.MsgClose{
190190
Creator: positionCreator.String(),
@@ -218,7 +218,7 @@ func (suite *PerpetualKeeperTestSuite) TestClose() {
218218
// TakeProfitPrice: tradingAssetPrice.MulInt64(4),
219219
// StopLossPrice: math.LegacyZeroDec(),
220220
// }
221-
// position, err := suite.app.PerpetualKeeper.Open(suite.ctx, openPositionMsg)
221+
// position, err := suite.app.PerpetualKeeper.Open(suite.ctx, openPositionMsg, false)
222222
// suite.Require().NoError(err)
223223

224224
// // Increase unpaid liability
@@ -253,7 +253,7 @@ func (suite *PerpetualKeeperTestSuite) TestClose() {
253253
TakeProfitPrice: math.LegacyMustNewDecFromStr("0.95"),
254254
StopLossPrice: math.LegacyZeroDec(),
255255
}
256-
position, err := suite.app.PerpetualKeeper.Open(suite.ctx, openPositionMsg)
256+
position, err := suite.app.PerpetualKeeper.Open(suite.ctx, openPositionMsg, false)
257257
suite.Require().NoError(err)
258258

259259
suite.app.AmmKeeper.SetDenomLiquidity(suite.ctx, ammtypes.DenomLiquidity{

x/perpetual/keeper/force_close.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ func (k Keeper) ForceClose(ctx sdk.Context, mtp *types.MTP, pool *types.Pool, am
3434
}
3535

3636
if addCollateral && !collateralToAdd.IsNil() && collateralToAdd.IsPositive() {
37-
_, err = k.AddCollateral(ctx, mtp, pool, collateralToAdd, ammPool)
37+
_, err = k.AddCollateral(ctx, mtp, pool, collateralToAdd, ammPool, true)
3838
if err != nil {
3939
return math.Int{}, math.Int{}, types.PerpetualFees{}, math.LegacyZeroDec(), math.LegacyZeroDec(), err
4040
}

x/perpetual/keeper/force_close_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ func (suite *PerpetualKeeperTestSuite) TestForceCloseShort_Successful() {
5151
StopLossPrice: math.LegacyZeroDec(),
5252
}
5353

54-
position, err := k.Open(ctx, openPositionMsg)
54+
position, err := k.Open(ctx, openPositionMsg, false)
5555

5656
suite.Require().Nil(err)
5757

x/perpetual/keeper/msg_server_add_collateral.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,8 @@ func (k msgServer) AddCollateral(goCtx context.Context, msg *types.MsgAddCollate
5555
return &types.MsgAddCollateralResponse{}, nil
5656
}
5757

58-
finalCollateralCoin, err := k.Keeper.AddCollateral(ctx, &mtp, &pool, msg.AddCollateral, &ammPool)
58+
// trigger check happened just above
59+
finalCollateralCoin, err := k.Keeper.AddCollateral(ctx, &mtp, &pool, msg.AddCollateral, &ammPool, true)
5960
if err != nil {
6061
return nil, err
6162
}

x/perpetual/keeper/msg_server_add_collateral_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ func (suite *PerpetualKeeperTestSuite) TestAddCollateral() {
7474
StopLossPrice: math.LegacyZeroDec(),
7575
}
7676

77-
position, err := suite.app.PerpetualKeeper.Open(suite.ctx, openPositionMsg)
77+
position, err := suite.app.PerpetualKeeper.Open(suite.ctx, openPositionMsg, false)
7878
suite.Require().NoError(err)
7979
suite.app.AssetprofileKeeper.RemoveEntry(suite.ctx, ptypes.BaseCurrency)
8080
return &types.MsgAddCollateral{
@@ -109,7 +109,7 @@ func (suite *PerpetualKeeperTestSuite) TestAddCollateral() {
109109
StopLossPrice: math.LegacyZeroDec(),
110110
}
111111

112-
position, err := suite.app.PerpetualKeeper.Open(suite.ctx, openPositionMsg)
112+
position, err := suite.app.PerpetualKeeper.Open(suite.ctx, openPositionMsg, false)
113113
suite.Require().NoError(err)
114114

115115
return &types.MsgAddCollateral{
@@ -144,7 +144,7 @@ func (suite *PerpetualKeeperTestSuite) TestAddCollateral() {
144144
StopLossPrice: math.LegacyZeroDec(),
145145
}
146146

147-
position, err := suite.app.PerpetualKeeper.Open(suite.ctx, openPositionMsg)
147+
position, err := suite.app.PerpetualKeeper.Open(suite.ctx, openPositionMsg, false)
148148
suite.Require().NoError(err)
149149

150150
initialPoolBankBalance = suite.app.BankKeeper.GetAllBalances(suite.ctx, sdk.MustAccAddressFromBech32(ammPool.Address))
@@ -190,7 +190,7 @@ func (suite *PerpetualKeeperTestSuite) TestAddCollateral() {
190190
StopLossPrice: math.LegacyZeroDec(),
191191
}
192192

193-
position, err := suite.app.PerpetualKeeper.Open(suite.ctx, openPositionMsg)
193+
position, err := suite.app.PerpetualKeeper.Open(suite.ctx, openPositionMsg, false)
194194
suite.Require().NoError(err)
195195

196196
initialPoolBankBalance = suite.app.BankKeeper.GetAllBalances(suite.ctx, sdk.MustAccAddressFromBech32(ammPool.Address))
@@ -239,7 +239,7 @@ func (suite *PerpetualKeeperTestSuite) TestAddCollateral() {
239239
StopLossPrice: math.LegacyZeroDec(),
240240
}
241241

242-
position, err := suite.app.PerpetualKeeper.Open(suite.ctx, openPositionMsg)
242+
position, err := suite.app.PerpetualKeeper.Open(suite.ctx, openPositionMsg, false)
243243
suite.Require().NoError(err)
244244

245245
initialPoolBankBalance = suite.app.BankKeeper.GetAllBalances(suite.ctx, sdk.MustAccAddressFromBech32(ammPool.Address))

x/perpetual/keeper/msg_server_close_positions_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ func (suite *PerpetualKeeperTestSuite) TestClosePositions() {
5858
StopLossPrice: math.LegacyZeroDec(),
5959
}
6060

61-
firstPosition, err := suite.app.PerpetualKeeper.Open(suite.ctx, firstOpenPositionMsg)
61+
firstPosition, err := suite.app.PerpetualKeeper.Open(suite.ctx, firstOpenPositionMsg, false)
6262
suite.Require().NoError(err)
6363

6464
secondOpenPositionMsg := &types.MsgOpen{
@@ -71,7 +71,7 @@ func (suite *PerpetualKeeperTestSuite) TestClosePositions() {
7171
StopLossPrice: math.LegacyZeroDec(),
7272
}
7373

74-
secondPosition, err := suite.app.PerpetualKeeper.Open(suite.ctx, secondOpenPositionMsg)
74+
secondPosition, err := suite.app.PerpetualKeeper.Open(suite.ctx, secondOpenPositionMsg, false)
7575
suite.Require().NoError(err)
7676

7777
suite.app.PerpetualKeeper.RemovePool(suite.ctx, firstPool)
@@ -151,7 +151,7 @@ func (suite *PerpetualKeeperTestSuite) TestClosePositions() {
151151
StopLossPrice: math.LegacyZeroDec(),
152152
}
153153

154-
firstPosition, err := suite.app.PerpetualKeeper.Open(suite.ctx, firstOpenPositionMsg)
154+
firstPosition, err := suite.app.PerpetualKeeper.Open(suite.ctx, firstOpenPositionMsg, false)
155155
suite.Require().NoError(err)
156156

157157
// Increase unpaid liability to reduce the MTP health
@@ -201,7 +201,7 @@ func (suite *PerpetualKeeperTestSuite) TestClosePositions() {
201201
StopLossPrice: math.LegacyMustNewDecFromStr("2.00"),
202202
}
203203

204-
firstPosition, err := suite.app.PerpetualKeeper.Open(suite.ctx, firstOpenPositionMsg)
204+
firstPosition, err := suite.app.PerpetualKeeper.Open(suite.ctx, firstOpenPositionMsg, false)
205205
suite.Require().NoError(err)
206206

207207
suite.app.OracleKeeper.SetPrice(suite.ctx, oracletypes.Price{
@@ -253,7 +253,7 @@ func (suite *PerpetualKeeperTestSuite) TestClosePositions() {
253253
StopLossPrice: math.LegacyMustNewDecFromStr("2.00"),
254254
}
255255

256-
firstPosition, err := suite.app.PerpetualKeeper.Open(suite.ctx, firstOpenPositionMsg)
256+
firstPosition, err := suite.app.PerpetualKeeper.Open(suite.ctx, firstOpenPositionMsg, false)
257257
suite.Require().NoError(err)
258258

259259
suite.app.OracleKeeper.SetPrice(suite.ctx, oracletypes.Price{

x/perpetual/keeper/msg_server_open.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,5 @@ func (k msgServer) Open(goCtx context.Context, msg *types.MsgOpen) (*types.MsgOp
1919
return nil, errorsmod.Wrap(types.ErrPoolNotEnabled, fmt.Sprintf("poolId: %d", msg.PoolId))
2020
}
2121

22-
return k.Keeper.Open(ctx, msg)
22+
return k.Keeper.Open(ctx, msg, false)
2323
}

x/perpetual/keeper/msg_server_update_stop_loss_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ func (suite *PerpetualKeeperTestSuite) TestUpdateStopLossPrice() {
4848
StopLossPrice: math.LegacyZeroDec(),
4949
}
5050

51-
position, err := suite.app.PerpetualKeeper.Open(suite.ctx, openPositionMsg)
51+
position, err := suite.app.PerpetualKeeper.Open(suite.ctx, openPositionMsg, false)
5252
suite.Require().NoError(err)
5353
suite.app.PerpetualKeeper.RemovePool(suite.ctx, ammPool.PoolId)
5454
return &types.MsgUpdateStopLoss{
@@ -80,7 +80,7 @@ func (suite *PerpetualKeeperTestSuite) TestUpdateStopLossPrice() {
8080
StopLossPrice: math.LegacyZeroDec(),
8181
}
8282

83-
position, err := suite.app.PerpetualKeeper.Open(suite.ctx, openPositionMsg)
83+
position, err := suite.app.PerpetualKeeper.Open(suite.ctx, openPositionMsg, false)
8484
suite.Require().NoError(err)
8585
suite.app.OracleKeeper.RemoveAssetInfo(suite.ctx, ptypes.ATOM)
8686
return &types.MsgUpdateStopLoss{
@@ -111,7 +111,7 @@ func (suite *PerpetualKeeperTestSuite) TestUpdateStopLossPrice() {
111111
StopLossPrice: math.LegacyZeroDec(),
112112
}
113113

114-
position, err := suite.app.PerpetualKeeper.Open(suite.ctx, openPositionMsg)
114+
position, err := suite.app.PerpetualKeeper.Open(suite.ctx, openPositionMsg, false)
115115
suite.Require().NoError(err)
116116

117117
return &types.MsgUpdateStopLoss{
@@ -142,7 +142,7 @@ func (suite *PerpetualKeeperTestSuite) TestUpdateStopLossPrice() {
142142
StopLossPrice: math.LegacyZeroDec(),
143143
}
144144

145-
position, err := suite.app.PerpetualKeeper.Open(suite.ctx, openPositionMsg)
145+
position, err := suite.app.PerpetualKeeper.Open(suite.ctx, openPositionMsg, false)
146146
suite.Require().NoError(err)
147147

148148
suite.app.OracleKeeper.SetPrice(suite.ctx, oracletypes.Price{
@@ -178,7 +178,7 @@ func (suite *PerpetualKeeperTestSuite) TestUpdateStopLossPrice() {
178178
TakeProfitPrice: math.LegacyMustNewDecFromStr("2.9"),
179179
StopLossPrice: math.LegacyZeroDec(),
180180
}
181-
position, err := suite.app.PerpetualKeeper.Open(suite.ctx, openPositionMsg)
181+
position, err := suite.app.PerpetualKeeper.Open(suite.ctx, openPositionMsg, false)
182182
suite.Require().NoError(err)
183183

184184
suite.app.OracleKeeper.SetPrice(suite.ctx, oracletypes.Price{
@@ -221,7 +221,7 @@ func (suite *PerpetualKeeperTestSuite) TestUpdateStopLossPrice() {
221221
TakeProfitPrice: math.LegacyMustNewDecFromStr("2.9"),
222222
StopLossPrice: math.LegacyZeroDec(),
223223
}
224-
position, err := suite.app.PerpetualKeeper.Open(suite.ctx, openPositionMsg)
224+
position, err := suite.app.PerpetualKeeper.Open(suite.ctx, openPositionMsg, false)
225225
suite.Require().NoError(err)
226226

227227
suite.app.OracleKeeper.SetPrice(suite.ctx, oracletypes.Price{

0 commit comments

Comments
 (0)