fix!: allow safe leverage operations during partial oracle outages#1821
fix!: allow safe leverage operations during partial oracle outages#1821mergify[bot] merged 21 commits intomainfrom
Conversation
Codecov Report
📣 This organization is not using Codecov’s GitHub App Integration. We recommend you install it so Codecov can continue to function properly for your repositories. Learn more @@ Coverage Diff @@
## main #1821 +/- ##
==========================================
+ Coverage 57.53% 58.13% +0.60%
==========================================
Files 79 80 +1
Lines 8111 8213 +102
==========================================
+ Hits 4667 4775 +108
+ Misses 3104 3097 -7
- Partials 340 341 +1
|
There was a problem hiding this comment.
I'm not sure if this is a right solution.
I'm worried about borrowed value will skip borrowed tokens with unknown oracle prices, treating them as zero value -- this can prevent liquidations, which normally should happen.
Also,
- proper error checks are missing.
- let's add a follow up task to test new edge cases
- document or make a task to solve panic in case of missing collateral price when we try to liquidate a position.
- probably, this will also block uncollaterize operations. Make sure we can decolaterize asset with "zero" price
robert-zaremba
left a comment
There was a problem hiding this comment.
pre-approving to make the planned released sooner.
I've updated the previous review note: #1821 (review)
Let's make sure we add all relevant tasks, and follow ups in the task board.
This is an intended error return - we can't declare a borrower unhealthy (liquidation eligible) without knowing the value of all their collateral.
Decollateralize and withdraw both use I'll check off the other two comments as they are done |
We should enable a user to decollaterize the asset with zero price. |
…1821) ## Description This one does a lot of things: - Allows `account_summary` to work during price outages, treating all unknown prices as zero. - In such cases, supplied value and other fields will appear lower than it really is, since some assets were skipped - Liquidation threshold will be null when it can't be computed, since there's no safe way to do that with missing prices - `borrow_limit` in queries as well as messages is computed using only collateral with known prices - If the portion of your collateral with known prices is enough to cover a borrow, then it still works. - Same for withdraw and decollateralize - `MaxWithdraw` and `MaxBorrow` (both queries and messages) now function with missing collateral prices, respecting the borrow limit policy above. The queries return zero on missing borrow prices, or a missing price for the specific token being asked for. - `liquidation_targets` query skips addresses where liquidation threshold cannot be computed, instead of returning an error for the whole query - `MsgLiquidate` will be able to function with some missing prices on the target's borrowed assets, if their other borrows are high enough to still put them above their liquidation threshold API Breaking: - `liquidation_threshold` field in `account_summary` field can now be null --- ### Author Checklist _All items are required. Please add a note to the item if the item is not applicable and please add links to any relevant follow up issues._ I have... - [x] included the correct [type prefix](https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json) in the PR title - [x] added `!` to the type prefix if API or client breaking change - [x] added appropriate labels to the PR - [x] targeted the correct branch (see [PR Targeting](https://github.com/umee-network/umee/blob/main/CONTRIBUTING.md#pr-targeting)) - [ ] provided a link to the relevant issue or specification - [x] added a changelog entry to `CHANGELOG.md` - [x] included comments for [documenting Go code](https://blog.golang.org/godoc) - [ ] updated the relevant documentation or specification - [x] reviewed "Files changed" and left comments if necessary - [ ] confirmed all CI checks have passed ### Reviewers Checklist _All items are required. Please add a note if the item is not applicable and please add your handle next to the items reviewed if you only reviewed selected items._ I have... - [ ] confirmed the correct [type prefix](https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json) in the PR title - [ ] confirmed all author checklist items have been addressed - [ ] reviewed state machine logic - [ ] reviewed API design and naming - [ ] reviewed documentation is accurate - [ ] reviewed tests and test coverage - [ ] manually tested (if applicable) (cherry picked from commit 87b9ed4) # Conflicts: # proto/umee/leverage/v1/query.proto # swagger/swagger.yaml # x/leverage/types/query.pb.go
…ackport #1821) (#1828) * fix!: allow safe leverage operations during partial oracle outages (#1821) ## Description This one does a lot of things: - Allows `account_summary` to work during price outages, treating all unknown prices as zero. - In such cases, supplied value and other fields will appear lower than it really is, since some assets were skipped - Liquidation threshold will be null when it can't be computed, since there's no safe way to do that with missing prices - `borrow_limit` in queries as well as messages is computed using only collateral with known prices - If the portion of your collateral with known prices is enough to cover a borrow, then it still works. - Same for withdraw and decollateralize - `MaxWithdraw` and `MaxBorrow` (both queries and messages) now function with missing collateral prices, respecting the borrow limit policy above. The queries return zero on missing borrow prices, or a missing price for the specific token being asked for. - `liquidation_targets` query skips addresses where liquidation threshold cannot be computed, instead of returning an error for the whole query - `MsgLiquidate` will be able to function with some missing prices on the target's borrowed assets, if their other borrows are high enough to still put them above their liquidation threshold API Breaking: - `liquidation_threshold` field in `account_summary` field can now be null --- ### Author Checklist _All items are required. Please add a note to the item if the item is not applicable and please add links to any relevant follow up issues._ I have... - [x] included the correct [type prefix](https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json) in the PR title - [x] added `!` to the type prefix if API or client breaking change - [x] added appropriate labels to the PR - [x] targeted the correct branch (see [PR Targeting](https://github.com/umee-network/umee/blob/main/CONTRIBUTING.md#pr-targeting)) - [ ] provided a link to the relevant issue or specification - [x] added a changelog entry to `CHANGELOG.md` - [x] included comments for [documenting Go code](https://blog.golang.org/godoc) - [ ] updated the relevant documentation or specification - [x] reviewed "Files changed" and left comments if necessary - [ ] confirmed all CI checks have passed ### Reviewers Checklist _All items are required. Please add a note if the item is not applicable and please add your handle next to the items reviewed if you only reviewed selected items._ I have... - [ ] confirmed the correct [type prefix](https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json) in the PR title - [ ] confirmed all author checklist items have been addressed - [ ] reviewed state machine logic - [ ] reviewed API design and naming - [ ] reviewed documentation is accurate - [ ] reviewed tests and test coverage - [ ] manually tested (if applicable) (cherry picked from commit 87b9ed4) # Conflicts: # proto/umee/leverage/v1/query.proto # swagger/swagger.yaml # x/leverage/types/query.pb.go * fix conflict * fix --------- Co-authored-by: Adam Moser <63419657+toteki@users.noreply.github.com>
Description
This one does a lot of things:
account_summaryto work during price outages, treating all unknown prices as zero.borrow_limitin queries as well as messages is computed using only collateral with known pricesMaxWithdrawandMaxBorrow(both queries and messages) now function with missing collateral prices, respecting the borrow limit policy above. The queries return zero on missing borrow prices, or a missing price for the specific token being asked for.liquidation_targetsquery skips addresses where liquidation threshold cannot be computed, instead of returning an error for the whole queryMsgLiquidatewill be able to function with some missing prices on the target's borrowed assets, if their other borrows are high enough to still put them above their liquidation thresholdAPI Breaking:
liquidation_thresholdfield inaccount_summaryfield can now be nullAuthor Checklist
All items are required. Please add a note to the item if the item is not applicable and
please add links to any relevant follow up issues.
I have...
!to the type prefix if API or client breaking changeCHANGELOG.mdReviewers Checklist
All items are required. Please add a note if the item is not applicable and please add
your handle next to the items reviewed if you only reviewed selected items.
I have...