cryptonomex / graphene

MIT License
1.05k stars 337 forks source link

Process to Reset a SmartCoin after a Blackswan Event #664

Closed ghost closed 7 years ago

ghost commented 7 years ago

Is there a formal process to reset a SmartCoin after a blackswan event and divide the underlying collateral between the remaining SmartCoin holders?

I was under the impression that collateral would go into a settlement pool which holders can use to settle their remaining SmartCoins after this type of event.

ALTCAP.X has blackswaned and has five holders who I would like to make whole by returning the underlying bitBTC collateral.

xeroc commented 7 years ago

ALTCAP.X has blackswaned and has six holders who I would like to make whole by returning the underlying bitBTC collateral.

That should be possible by simply requesting a "settlement".

ghost commented 7 years ago

SmartCoin holders see the following using the gui

Failed to broadcast the transaction:
Cannot force settle with no price feed.

and in the cli

0 exception: unspecified
37006 insufficient_feeds: insufficient feeds
Cannot force settle with no price feed.

I cannot publish a price feed due to the blackswan.

Is global_settle_asset useful in this situation?

pmconrad commented 7 years ago

That looks like a bug. No, global_settle_asset won't help you there.

ghost commented 7 years ago

Thanks for your replies xeroc and pmconrad.

I have been using the test-net to settle smartcoins after a blackswan.

ALTCAP.X, SETTLE and SETTLE.WEEK have now all been force settled due to lack of collateral on the test net. In doing this, I have found FEED LIFETIME IN MINUTES to be very important in allowing holders to settle their smartcoins.

SETTLE.WEEK was created with a FEED LIFETIME of 10080 minutes (one week) to test settlement of the asset for up to one week after a blackswan. I will post later if this works as planned.

A 24 hour feed lifetime is insufficient time to allow holders to settle and recover collateral. I apologize to the ALTCAP.X holders for not testing this setting thoroughly and hope ALTCAP.X can be reset in the future to allow holders to recover their funds.

In light of this, I have changed FEED LIFETIME to 10080 minutes for ALTCAP on the bitshares network and recommend the committee increases FEED LIFETIME on all bitASSET smartcoins.

grctest commented 7 years ago

Relevant bitsharestalk thread: https://bitsharestalk.org/index.php/topic,23334.0.html

The GRIDCOIN MPA (in blackswan state) doesn't have the 'Force Settlement' option (gave up said permission).

pmconrad commented 7 years ago

The GRIDCOIN MPA (in blackswan state) doesn't have the 'Force Settlement' option (gave up said permission).

That doesn't matter. After a black swan, forced settlement is allowed in any case. https://github.com/cryptonomex/graphene/blob/master/libraries/chain/asset_evaluator.cpp#L436

FEED_LIFETIME shouldn't matter, because after a black swan settlement doesn't happen at the feed price but at the (fixed) settlement_price. That is a bug that needs fixing. Should be allowed here but isn't: https://github.com/cryptonomex/graphene/blob/master/libraries/chain/asset_evaluator.cpp#L439

ghost commented 7 years ago

Yes "FEED_LIFETIME shouldn't matter" but it does at the minute. Now on bitshares and the test-net you have only the "FEED_LIFETIME" to settle your smartcoins after a blackswan.

The test I mentioned above: SETTLE - I cannot settle because the 24 hour FEED_LIFETIME has passed SETTLE.WEEK can still be settled because FEED_LIFETIME is 10080 minutes (1 week)

abitmore commented 7 years ago

FEED_LIFETIME shouldn't matter, because after a black swan settlement doesn't happen at the feed price but at the (fixed) settlement_price. That is a bug that needs fixing. Should be allowed here but isn't: https://github.com/cryptonomex/graphene/blob/master/libraries/chain/asset_evaluator.cpp#L439

The code

   else if( bitasset.current_feed.settlement_price.is_null() )
      FC_THROW_EXCEPTION(insufficient_feeds, "Cannot force settle with no price feed.");

perhaps should be

   else if( bitasset.current_feed.settlement_price.is_null() || bitasset.has_settlement())
      FC_THROW_EXCEPTION(insufficient_feeds, "Cannot force settle with no price feed.");

so an asset not in black swain state shouldn't be forced settled if no enough price feed provided.

Thoughts?

pmconrad commented 7 years ago

Close... I think this would be the correct condition:

else if( bitasset.current_feed.settlement_price.is_null() && !bitasset.has_settlement())

i. e. throw an error if neither feed nor settlement are available. Settlement is possible with either feed or settlement.

vikramrajkumar commented 7 years ago

This issue was moved to bitshares/bitshares-core#216