2018-02-16 22:01:13 +00:00
|
|
|
BSIP: 0031
|
|
|
|
Title: Update Short Position's Margin Call Price After Partially Called Or Settled
|
|
|
|
Author: Abit More <https://github.com/abitmore>
|
|
|
|
Status: Draft
|
|
|
|
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: To be done
|
|
|
|
|
|
|
|
# Abstract
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
|
|
# Motivation
|
|
|
|
|
|
|
|
Make the exchange system more user-friendly.
|
|
|
|
|
2018-02-18 13:23:02 +00:00
|
|
|
# Rationale
|
2018-02-16 22:01:13 +00:00
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
|
|
# Specifications
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
|
|
# Discussion
|
|
|
|
|
|
|
|
[to be added if any]
|
|
|
|
|
|
|
|
# Summary for Shareholders
|
|
|
|
|
|
|
|
[to be added if any]
|
|
|
|
|
|
|
|
# Copyright
|
|
|
|
|
|
|
|
This document is placed in the public domain.
|
|
|
|
|
|
|
|
# See Also
|
|
|
|
|
|
|
|
* https://github.com/bitshares/bitshares-core/issues/343
|
|
|
|
* https://github.com/bitshares/bitshares-core/issues/649
|
|
|
|
* https://bitsharestalk.org/index.php?topic=25926.0
|