Add rounding rule for bsip 38

This commit is contained in:
abitmore 2018-04-10 05:18:11 -04:00
parent 98d712ece6
commit 17dd78b6c7
2 changed files with 31 additions and 4 deletions

View file

@ -7,7 +7,7 @@
Discussion: https://github.com/bitshares/bitshares-core/issues/132, Discussion: https://github.com/bitshares/bitshares-core/issues/132,
https://github.com/bitshares/bitshares-core/issues/184, https://github.com/bitshares/bitshares-core/issues/184,
https://github.com/bitshares/bitshares-core/issues/342 https://github.com/bitshares/bitshares-core/issues/342
Replaces: - Superseded-By: 0038 (partly)
Worker: 1.14.96 Worker: 1.14.96
# Abstract # Abstract
@ -261,7 +261,8 @@ The detailed rules proposed by this BSIP with new rules highlighted:
amount remaining), check the remaining amount, if the amount is too small amount remaining), check the remaining amount, if the amount is too small
so the order would receive nothing on next match, cancel the order.** so the order would receive nothing on next match, cancel the order.**
* When matching a limit order with a call order, * When matching a limit order with a call order (**note: this rule has changed
in [BSIP 38](bsip-0038.md)**),
* **if the call order is receiving the whole debt amount, which means it's * **if the call order is receiving the whole debt amount, which means it's
smaller and the short position will be closed after the match, round up its smaller and the short position will be closed after the match, round up its
paying amount; otherwise,** round down its paying amount. paying amount; otherwise,** round down its paying amount.

View file

@ -6,7 +6,7 @@
Created: 2018-03-05 Created: 2018-03-05
Discussion: https://bitsharestalk.org/index.php?topic=25924.0, Discussion: https://bitsharestalk.org/index.php?topic=25924.0,
https://github.com/bitshares/bsips/issues/51 https://github.com/bitshares/bsips/issues/51
Replaces: - Replaces: 0035 (partly)
Worker: To be done Worker: To be done
# Abstract # Abstract
@ -30,7 +30,7 @@ black swan, thus hurts the BTS ecosystem. Many participants in the discussion
agree that usually it's not really required to cover all debt (thus selling more agree that usually it's not really required to cover all debt (thus selling more
collateral) when being margin called. collateral) when being margin called.
After [BSIP 31](https://github.com/bitshares/bsips/blob/master/bsip-0031.md) is After [BSIP 31](bsip-0031.md) is
in place, shorters will have more chance to not cover all debt on margin call, in place, shorters will have more chance to not cover all debt on margin call,
but it's not 100% guaranteed, and they can only accept the result passively. but it's not 100% guaranteed, and they can only accept the result passively.
@ -131,6 +131,32 @@ After a call order get matched with a limit order and about to fill,
* if `target_collateral_ratio` is set, calculate maximum amount of collateral * if `target_collateral_ratio` is set, calculate maximum amount of collateral
for sale according to the equation described above, then process as before. for sale according to the equation described above, then process as before.
### Rounding
Rules about rounding are defined in [BSIP 35](bsip-0035.md).
The rule for matching a limit order with a call order need to be revised as
(new rules **in bold**):
* if the call order is receiving the whole debt amount, which means it's
smaller and the short position will be closed after the match, round up its
paying amount;
* **otherwise,**
* **if `target_collateral_ratio` is set and it's receiving the maximum debt
amount calculated with `target_collateral_ratio`, see this order is smaller,
try to round up its paying amount;**
* **for edge cases, if its collateral ratio would not increase after being
partially filled due to the round-up (which may even cause a black swan
event in an extreme scenario), see `target_collateral_ratio` as not set for
this time, re-apply the filling rules for this match.**
* otherwise, round down its paying amount.
* if the limit order would receive nothing, cancel it (it's smaller,
so safe to cancel);
* otherwise, calculate the amount that the limit order would pay as
`round_up(receiving_amount * match_price)`. After filled both orders,
if the limit order still exists, the remaining amount might be too small,
so cancel it.
## UI/UX ## UI/UX
The new option need to be presented and can be used in UI after the hard fork. The new option need to be presented and can be used in UI after the hard fork.