-
Notifications
You must be signed in to change notification settings - Fork 193
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
fix(perp): Block users from opening infinite leverage positions #776
Conversation
x/perp/keeper/liquidate_test.go
Outdated
// startingBalance = 1_000_000 | ||
// perpEFBalance = startingBalance + openPositionDelta + liquidateDelta | ||
expectedPerpEFBalance: sdk.NewInt64Coin("NUSD", 975_550), | ||
expectedPerpEFBalance: sdk.NewInt64Coin("NUSD", 1000025), | ||
expectedBadDebt: sdk.MustNewDecFromStr("24950"), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you double-check this test? How can the bad debt be positive but the PerpEF balance go up?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There's no bad debt created there. Changing the liquidation ratio from 100 to 10 removed it. To create bad debt I need to change the mark price after opening the position so the margin ratio is below the liquidation fee.
In this case, that means mocking the vpool GetSpotPrice function, which is exactly what's being done in the liquidate_unit_test.go functions
Should we remove those 2 bad debt tests? Since they are already checked there: liquidate_unit_test.go:374 / TestLiquidateIntoFullLiquidationWithBadDebt
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ah I see, yeah in that case these two tests are redundant since TestLiquidateIntoFullLiquidationWithBadDebt
should be covering them.
I am not really a fan of using the leverage based on the margin ratio, but more into having a separate value for every pool. As in Binance, some pools allow you to open bigger leverage than others, and that is independent of the margin ratio. |
I created an issue for that there: #781 |
x/perp/keeper/liquidate_test.go
Outdated
// startingBalance = 1_000_000 | ||
// perpEFBalance = startingBalance + openPositionDelta + liquidateDelta | ||
expectedPerpEFBalance: sdk.NewInt64Coin("NUSD", 975_550), | ||
expectedPerpEFBalance: sdk.NewInt64Coin("NUSD", 1000025), | ||
expectedBadDebt: sdk.MustNewDecFromStr("24950"), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ah I see, yeah in that case these two tests are redundant since TestLiquidateIntoFullLiquidationWithBadDebt
should be covering them.
On the latest demo branch synced with master, we can open positions with 100k leverage:
This is not ideal. In the code we were not checking the validity of the margin ratio if the position is new.