bsip35: rounding rules when call bigger than limit
This commit is contained in:
parent
d6c7fdc785
commit
e22fe0e2d3
1 changed files with 16 additions and 6 deletions
22
bsip0035.md
22
bsip0035.md

@ 262,14 +262,19 @@ The detailed rules proposed by this BSIP with new rules highlighted:


* When matching a limit order with a call order,


* **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, round down its paying amount.**


* **In the latter case, if the limit order would receive nothing, cancel it


(it's smaller, so safe to cancel).**


paying amount; otherwise,** round down its paying amount.


* **In the latter case,**


* **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.**




* When matching a settle order with a call order,


* **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, round down its paying amount.**


paying amount; otherwise,** round down its paying amount.


* **In the latter case,**


* **if the settle order would receive nothing,**


* **if the settle order would be completely filled, cancel it;**



@ 280,6 +285,7 @@ The detailed rules proposed by this BSIP with new rules highlighted:


* **otherwise (if the settle order would not receive nothing), calculate


the amount that the settle order would pay as


`round_up(receiving_amount * match_price)`. After filled both orders,


if the settle order still exists,


match the settle order with the call order again. In the new match, either


the settle order will be cancelled due to too small, or we will stop


matching due to hitting `maximum_force_settlement_volume`.**



@ 349,6 +355,7 @@ Process:


for example `$27`, then Alice would get


* `round_up(27 * 3 / 8) = round_up(10.125) = 11 CORE` as a maker, or


* `round_up(27 * 19 / 50) = round_up(10.26) = 11 CORE` as a taker.




However, since the collateral is only `10 CORE`, this match will fail and


trigger a black swan event.





@ 401,8 +408,11 @@ In `check_call_orders(...)` function of `database` class,


if the call order is smaller, round up `order_receives`,


otherwise round down `order_receives`.




In the latter case, if `order_receives` is zero, skip filling and cancel the


limit order.


In the latter case,


* if `order_receives` is zero, skip filling and cancel the limit order.


* otherwise, calculate `order_pays` as


`round_up(order_receives * match_price)`, then the limit order will be


either completely filled, or culled due to too small after partially filled.




## When Matching A Settle Order With A Call Order






Loading…
Reference in a new issue