BSIP: 0031
Title: Update Short Position's Margin Call Price After Partially Called Or Settled
Author: Abit More <https://github.com/abitmore>
Status: Installed
Type: Protocol
Created: 2018-02-16
Discussion: https://github.com/bitshares/bitshares-core/issues/343,
https://github.com/bitshares/bitshares-core/issues/649
Replaces: -
Worker: 1.14.92
Currently, when a short position get partially called or settled, the call price won't change, that said, even if its actual collateral ratio is higher than others, higher than minimum required, it will still be selling collateral at a low price, taking precedence over other short positions.
This behavior is causing several issues:
- it's somehow unfair, thus brought bad experience to shorters, and
- it prevents black swan event from being triggered in time when needed, because the collateral ratio of the 2nd even overall short positions may be too low but not being checked, thus risks the pegging system.
This BSIP proposes a mechanism to improve this situation.
Make the exchange system more user-friendly.
To attract more users, the system should be fair, should be well balanced.
It's common sense that short positions with least collateral ratio should get margin called first. This can be achieved if always update the margin call price after every fill.
In fill_order( const call_order_object& ...)
function of database
class,
update call_price
field of call_order_object
after debt or collateral
changed to a non-zero value.
In addtion, after call_price
get updated, the iterators initialized with
by_price
index may be invalidated, so need to review / revise involved code,
E.G. check_call_orders(...)
function of database
class.
[to be added if any]
[to be added if any]
This document is placed in the public domain.