...or the contract will outsmart you.
tl;dr: So-called smart contracts are software built into a #blockchain. The problem with that is, very few people can read and understand the precise conditions of the contract. A smart contract may not really be what you think it is. Demonstrated on the real-life example of #SmartCoins on the #BitShares blockchain.
SmartCoins in BitShares
SmartCoins, aka BitAssets or MPAs (for Market-Pegged Assets), are counterparty-free price-stable crypto-tokens implemented on the BitShares blockchain.
Invented by Daniel Larimer, the concept is elegant and simple. It consists of three basic parts:
A group of elected individuals ("Witnesses") monitor the price of BitShares (BTS) on crypto exchanges. They publish the BTS price in relation to real-world assets, e. g. USD, on the BitShares blockchain. From the individual prices published by each witness, the blockchain calculates the "price feed", which is used as the fair value of the #BitAsset, e. g. bitUSD.
Anyone can create BitAssets, e. g. bitUSD, by locking up sufficient collateral in BTS. The newly created BitAssets can be sold, which brings their creator into a short position. He owes the blockchain the BitAssets he created, and has locked up collateral. The blockchain monitors all short positions. If the value of the collateral drops below 175% of the owed BitAssets, the blockchain tries to buy the owed BitAssets on the internal exchange using the collateral, in an attempt to close the position.
Anyone holding BitAssets can request settlement. 24 hours after a settlement request, the holder will have his BitAssets exchanged for an equivalent amount of BTS.
In theory, this set of rules provides provides incentive for market participants to always push the price in the direction of the price feed:
If bitUSD trades below the feed, market participants can make profit by buying and settling, thereby driving the price up.
If bitUSD trades above the feed, market participants can create and sell in the hope for a future profit, thereby driving the price down. Note that going short always comes with a risk - being able to sell at a premium reduces that risk.
The settlement guarantee
The third of the three parts, the settlement option for holders, is the part that indirectly defines the peg. Holders can always be certain that they can get at least the equivalent amount of BTS for their BitAssets, which they can subsequently sell on an external exchange.
Every piece of documentation on BitAssets I've found mentions this settlement option, and some even call it a guarantee:
https://bitshares.org/technology/price-stable-cryptocurrencies/
SmartCoins are guaranteed to be worth at least their face value
Oookaaay... but where's the fine print?
The BitShares ecosystem is supposed to be mostly self-governing. Everyone who is holding BTS can vote on certain aspects. As mentioned above, Witnesses are elected through this voting process. There's also an elected Committee.
While Witnesses perform the grunt work, i. e. keeping the blockchain alive, the Committee is about making policy decisions. Most of the operating parameters of the blockchain can be changed at runtime, by the committee. The committee is supposed to make their decisions based on community input. Obviously, it is a difficult and time consuming job to balance everyone's interests, and I'd like to stress that I'm impressed with the work done so far by the committee members.
The parameters that can be modified by the committee are not only parameters of the blockchain in the narrow sense. The committee can also set parameters of the tokens they have issued. Formally, the committee is the issuer of most BitAssets. And this is where the fine print comes into play.
Two of the modifiable BitAsset parameters are related to the settlement option:
max_force_settle_vol defines how much (as a percentage) of the existing BitAssets can be settled per hour. It defaults to 2%, and it is supposed to prevent abuse.
force_settlement_offset modifies the price at which settlement happens! It defaults to 0, which reflects the "big print" documentation:
https://bitsharestalk.org/index.php/topic,8390.msg241324.html#msg241324
The settlement will always happen AT the feed
In other words, the smart contract which BitAssets holders have entered really goes like
SmartCoins are guaranteed to be worth at least their face value but this "guarantee" is worth less than the average piece of toilet paper because we can rip it out of your hands whenever we feel like it!
WTF???
At the time of writing, a proposal exists to change the abovementioned parameters on the bitCNY #MPA. Should the proposal be accepted, the max_force_settle_vol will be reduced to 0.5% per hour, and even worse, the force_settlement_offset will be set to 1%. This effectively devalues bitCNY by 1%. I call this robbery. The usual term in the cryptosphere is #SCAM.
Ironically, voting on the BitShares chain is only for holders of BTS, not for the holders of bitAssets. IOW only the shorters (who profit from the proposal) get to have a say in the question, but not the holders of BitAssets (who are directly damaged by it).
Astonishingly, discussion on the bitsharestalk forum shows that a large part of the BitShares community doesn't seem to have a problem with the making and breaking of guarantees. This may have something to do with the fact that members of the bitsharestalk forum are more likely to hold BTS than BitAssets.
Conclusion
The damage is done. The mere fact that the proposal exists proves that the so-called "settlement guarantee" is worthless. This applies not only for bitCNY (which is the only BitAsset to be modified by the proposal), but for all BitAssets (because the same rules apply to the other assets as well). Furthermore, the reaction of the community shows that we live in a world where you can't trust anyone.
Thanks for destroying a beautiful, working idea, you selfish bunch of scammers!
The logic in the BSIP seems good to me. And I don't think it is fair to call this change a scam or robbery. My memory is a little fuzzy, but I think I do remember discussions in plain English on the forums about small settlement offsets in favor of the shorts and how settlement should be considered a last resort mechanism. So I don't have a problem with small (< 2%) offsets, especially if they can help with the peg (although I am not convinced they will help all that much). The main reason I don't have a problem with the small offset though is because the price feed isn't supposed to be super accurate anyway and even more significantly, you could easily lose more than 2% from liquidity (and price movements in the time it takes for you to move the BTS to an exchange and sell it) just trying to sell the collateral BTS for CNY (or USD or whatever). The main idea is that you are supposed to get approximately the fair value of the BitAsset from the market, and the price feed and force settlement is there as a last resort for holders in case the market is getting really screwy for some reason (and to make the whole peg work in the first place).
It is a problem in the community's documentation and conveying of the important details of the smart contract in plain English if people didn't understand that such a change was possible before entering into the smart contract by holding BitAssets. That is something that the BitShares community should strive to improve upon.
I do however have a concern regarding these changes that I believe I share with you. There is possibly that this change could have a significant negative effect on BitShares even if it does improve the BitCNY peg (and it is dubious whether these changes would actually make any significant improvements to the peg). This would be simply because of the fact that people didn't realize that such changes were "part of the deal" and will feel upset that the rules were changed on them (from their perspective) and maybe push them to an extreme reaction of leaving the system due to fear of what else is allowed by the blockchain to change on them that they are unaware of. That could be reason enough to not support this change (personally I am mostly on-the-fence regarding this proposal but leading towards rejecting it), at least until a good education campaign has been put in place over the course of months to make sure people understand what they are getting into with various BitShares financial contracts.
Edited post to remove my original second concern which on closer inspection was actually not a risk because any waiting-for-expiration force settling longs would get paid before the committee change review period ends and other longs (who would not initiate force settling after noticing an outrageous committee change proposal submitted to the blockchain) would just hold off on any force settlements until the committee was replaced by non-malicious members.
There is an intent to maintain a peg. This proposed change is being done in an effort to make peg closer. It hurts those who understood the reason for the premium and bought it expecting to sell at a similar premium.
Just to be clear, I am not involved with this proposal.
The stated intent of the proposal is to create a closer peg, yes.
However, the proposal was created by someone who is known to be in a short position, at a time where BTS price is going down. I think it is obvious that a tighter peg may not be the only reason for the proposal.
Create bitCNY2 and let market decide what is better.
Actually another variant exists, under the name TCNY. It has been active for a couple of months now I believe.
I don't think the average user can fully understand the fine prints without reading very carefully and use a lot of time. Is there any tools available to make this process easier? This is a problem for the general public to adopt cryptocurrencies and smart contracts. Maybe there's room for "lawyers" specializing in smart contracts?
Yes, this is a general problem.
Software is complicated. Unforeseen side effects are not uncommon, as are bugs. Even deliberately placed and hard to spot side-effects are possible.
I doubt that lawyers can be a solution here, especially in situations with no real counterparty.