BSIP: 71
Title: Add "Prevent Global Settlement" Flag for Smartcoin
Authors: Jerry Liu bitcrab@qq.com
Status: Draft
Type: Protocol
Created: 2019-07-02
Discussion: https://github.com/bitshares/bsips/issues/179
This BSIP proposes a new solution to handle bad debt: the core idea is, while bad debt appears, the system does not take over the bad debt positions; instead, it accepts the smartcoin devaluation caused by bad debt and it lets borrowing, margin call, and force settlement all operate referring to the BTS/devaluated smartcoin price. This solution avoids any global/partial settlement, and keeps the borrowing, margin calls and force settlement features to continue and allow the market to decide how to finally remove bad debt, either by BTS price restoration or by debt position adjustment/ margin call order filling/force settlement.
BitShares has a mechanism to handle debt positions whose collateral is valued less than the debt itself ("bad debt"). This mechanism is called global settlement ("black swan") and is triggered when the published feed price (FP) is less than or equal to the product of the global settlement price (Pgs) and the maximum short-squeeze ratio (MSSR).
FP ≤ Pgs × MSSR
If this does occur it means that the collateral ratio (CR) of at least one debt position is less than the MSSR.
Global settlement is not a good way to handle bad debt, as can be seen to what happened to bitUSD. After global settlement was triggered for bitUSD in December 2018:
- traders could no longer borrow bitUSD;
- the price of bitUSD dropped below USD because of insufficient collateral; and,
- it will take a long time for bitUSD to be revived.
The community has had extensive discussions about how to handle the bad debt in a better way in the future. However an easy way, BSIP58, has been implemented for smartcoins like bitCNY and bitUSD; it has worked successfully to prevent GS from happening with no other obvious impact. However, BSIP58 has some issues - it is suspected of market manipulation and it risks witnesses independence. Moving forward, this BSIP will be built based on BSIP58 and eliminate all its disadvantages.
We now have several choices on handling bad debt:
- Global Settlement
- Global Settlement Protection via Price Feeding
- Convert Bad Debt Positions to Limit Orders
- Take Over only Under-Collateralized Debt Positions without GS (aka Partial GS)
- Prevent Global Settlement
We need to do a deep review on bad debt before evaluating above solutions.
Bad debt means in some debt positions the debt cannot be fully paid by selling the collaterals via margin call/force settlement at the market price. In other words, the relevant smartcoin loses sufficient collateral to back the value and will possibly devalue.
At this moment, the system should accept the fact that the smartcoin will possibly devalue, find ways to minimize the impact to different parties in the market and the time to revive.
In my view, a good way to handle bad debt need to follow below principles:
- Do not punish good traders who have managed to maintain their collateral ratio well.
- Do not stop the smartcoin features, including borrowing, margin call and force settlement.
- Ensure the debt positions/margin call orders be settled in the order from lower CR to higher CR.
In above mentioned 5 solutions, only "5. Prevent Global Settlement" fulfills all 3 principles.
Partial GS is another attractive solution: it is similar to Global Settlement but differs in that (a) only takes over the bad debt positions and moves them to a settlement pool without touching the debt positions with CR>1, and (b) users can issue force settlement from the pool, from the margin call orders, or from the good debt position depending on which has the lowest CR.
The problem of Partial GS is that it does not resolve itself automatically when the price recovers.
The "Prevent Global Settlement" solution adopts a new idea to handle bad debt: while bad debt appears, the smartcoin will be devaluated at a ratio of the lowest CR from among the bad debt positions, yet all the smartcoin trading features, including borrowing, margin call and force settlement, will all switch to refer to GS price to ensure the continuity and fairness of all the features.
Add one flag "Prevent Global Settlement" to each smartcoin asset.
Introduce new parameters: settlement price and call execution price. They shall be calculated as:
if flag "Prevent Global Settlement" is enabled
settlement price = max(FP_M * (1 - settlement_offset), P_gs)
call execution price = max(FP_M * (1 + MSSR), P_gs)
else
settlement price = FP_M * (1 - settlement_offset)
call execution price = FP_M * (1 + MSSR)
where FPM is the median of the prices published by witnesses, MSSR is the maximum short-squeeze ratio and settlement offset is the force settlement offset; witnesses should always feed the real market price.
The settlement price is the price that is used when executing forced settlements. Note that when a large forced settlement fills up a debt position completely, Pgs is likely to change. The resulting new settlement price will be used when settling against the next debt position. The call execution price is the price that is used when matching margin calls against limit orders or settlement requests. Again, when a large match fills up a debt position completely, Pgs is likely to change. The resulting new call execution price will be used when settling against the next debt position. FPM is still used for determining if a debt position is margin called, as before, at FPM × (1 + MCR).
Note: when comparing prices, max
is to be understood in terms of debt %div; collateral.
- New mechanism to handle bad debt (black swan)
- New BSIP:GS protection via core code
- New BSIP: Add "Prevent Global Settlement" Flag for Smartcoin (old title: Global Settlement Protection via core code)
- New BSIP: Add "Prevent Global Settlement" Flag for Smartcoin
Some may perceive it as confusing or unfair that borrowing and force settlement may refer to different prices. However, in a period where the least collateralized short position has insufficient collateral in terms of FP_m, it would be dangerous to use the resulting settlement_price for borrowing as well, because that would allow creation of short positions that are undercollateralized from the start.
Two variants for the call execution price have been discussed.
Variant A (as specified here) prefers to match the bad debt positions first, hoping that this way the bad debt will be resolved quickly. This also means that if Pgs moves away from the market price, no margin calls will be filled, not even those with a collateral ratio that would allow them being matched with market orders. This can lead to more bad debt piling up instead of resolving at least some debt positions through margin calls.
Variant B would have let bad debt positions matched at their own collateral ratio while matching other margin calls as before at FPM × MSSR, hoping to improve the overall collateralization. This also means that debt positions with better collateral ratio would have been preferred over bad debt, meaning that bad debt positions will remain sitting on the market for a longer time.
It is important to eliminate concerns about global settlement. This is currently achieved with the technical options that are available to the witnesses. A more advanced solution as proposed here is needed.
This document is placed in the public domain.