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

fix(perp): Block users from opening infinite leverage positions #776

Merged
merged 9 commits into from
Aug 3, 2022

Conversation

matthiasmatt
Copy link
Contributor

On the latest demo branch synced with master, we can open positions with 100k leverage:

>>> echo "guard cream sadness conduct invite crumble clock pudding hole grit liar hotel maid produce squeeze return argue turtle know drive eight casino maze host" | nibid keys add val --recover --keyring-backend test
>>> nibid tx perp open-position buy ubtc:unusd 100000 20 0 --from val --keyring-backend test --chain-id nibiru-localnet-0  --broadcast-mode block -y --gas 99999999999

This is not ideal. In the code we were not checking the validity of the margin ratio if the position is new.

@matthiasmatt matthiasmatt requested a review from a team as a code owner August 1, 2022 21:01
@matthiasmatt matthiasmatt changed the title (Perp) Fix: Block users from opening infinite leverage positions fix(perp): Block users from opening infinite leverage positions Aug 1, 2022
// startingBalance = 1_000_000
// perpEFBalance = startingBalance + openPositionDelta + liquidateDelta
expectedPerpEFBalance: sdk.NewInt64Coin("NUSD", 975_550),
expectedPerpEFBalance: sdk.NewInt64Coin("NUSD", 1000025),
expectedBadDebt: sdk.MustNewDecFromStr("24950"),
Copy link
Contributor

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?

Copy link
Contributor Author

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

Copy link
Contributor

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.

CHANGELOG.md Outdated Show resolved Hide resolved
@AgentSmithMatrix
Copy link
Contributor

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.

@matthiasmatt
Copy link
Contributor Author

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

// startingBalance = 1_000_000
// perpEFBalance = startingBalance + openPositionDelta + liquidateDelta
expectedPerpEFBalance: sdk.NewInt64Coin("NUSD", 975_550),
expectedPerpEFBalance: sdk.NewInt64Coin("NUSD", 1000025),
expectedBadDebt: sdk.MustNewDecFromStr("24950"),
Copy link
Contributor

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.

@matthiasmatt matthiasmatt merged commit 8c6e971 into master Aug 3, 2022
@matthiasmatt matthiasmatt deleted the mat/fix-infinite-leverage branch August 3, 2022 09:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants