BSIP: <BSIP number>
Title: Add flag to prevent asset's max supply from being changed
Authors: Fabian Schuh <https://github.com/xeroc>
Dmitrij Vinokour <https://github.com/Dimfred>
Status: Draft
Type: Protocol
Created: 2018-10-14
Discussion: <url>
Worker: <Id of worker proposal> (optional)
The possibility of creating assets on the BitShares Blockchain is a core feature of our platform. However some things are too malleable when they should not be. Other things are not flexible when they should be.
Asset creators can create an asset with a maximum supply. However this maximum supply can be changed by the asset creator (issuer) anytime. This exposes token holders to the risk of their purchased asset losing value.
With this BSIP a flag will be introduced which forbids the modification of the maximum supply of an issuer created asset.
In addition, another new flag will be introduced that prevents any more tokens from being issued in the future.
And finally, the ability to change the precision of an asset will now be available as long as current supply is zero.
A flag to disable the modification of the maximum supply for an asset will be implemented. This has benefits for both the participants and the asset creator. Asset holders are assured the value of their assets (tokens) will not be diluted by issuers creating more tokens. Asset creators are able to market the fact that the maximum supply is fixed.
This can be very important in the case of Initial Coin Offerings (ICOs). Investors are assured by the network that their investment will not be diluted by new supply of that coin.
A flag to disable issuing allows asset holders to be assured that the current supply will not increase, even if there are unissued tokens.
The ability to change the precision of a created asset adds flexibility in the asset creation process.
enable_modify_max_supply will be added to asset_issuer_permissions. The permission can be activated to permit the modification of the max_supply (asset_object.options).
enable_issue will be added to asset_issuer_permissions. The permission can be set to false to permit the related flag to be set to false, which will not permit issuance of tokens. Once the flag is set to false, it can not be changed.
Changing the precision of an asset should be easily accomplished with an asset_update_operation. This causes no harm while the asset is not issued.
This BSIP comes with changes to the protocol, hence requires a propotocol upgrade. However the changes to the code are minor.
For enable_modify_max_supply:
- Add
enable_modify_max_supplyto the issuer permissions - Set
enable_modify_max_supplytotruefor existing assets at hardfork time - Add a
can_modify_max_supply()to theasset_object - Change the
asset_update_evaluator::do_evaluatemethod to assert false when- the setting of the
enable_modify_max_supplyflag totrueifcurrent_supplyis not zero or - the modification of the
max_supplywhen theenable_modify_max_supplyisfalse
- the setting of the
For enable_issue:
- Add
enable_issueto the issuer permissions - Set
enable_issuetotruefor existing assets at hardfork time - Add a
can_issue()to theasset_object - Change the
asset_update_evaluator::do_evaluatemethod to assert false for the setting of theenable_issueflag totrueif it is currentlyfalse - Change the
asset_issue_evaluator::do_evaluatemethod to assert false ifcan_issue()returns false - Change the
call_order_update_evalutator::do_evaluatemethod to assert false ifcan_issue()returns false
To change the precision:
- Add the
fc::optional<uint8_t> new_precisionto a newasset_update_operation.extensionsstruct. - Change the
asset_update_evaluator::do_evaluatemethod to assert false ifnew_precisionexists and is not equal toasset_object.precisionandcurrent_supplyis not zeronew_precisioncausesmax_supplyto be an invalid number
It is believed that the addition of enable_modify_max_supply and enable_issue will add security for asset holders.
There is the risk to parties interested in acquiring the asset if the precision is changed after due diligence and before issuance.
Using disable_ as names for boolean values is not advisable and can lead to confusion. See the comments of a similar situation here. Rather than continue the legacy behavior, this BSIP will take a different tack and use positive logic. While it may be confusing for a time, future permissions and flags will use positive logic, and previous negative logic permissions will be changed to use positive logic (not part of this BSIP).
This BSIP proposes a way to improve the financial security of users against the dilution of a held asset. It also provides a mechanism for asset creators to modify the precision of their asset.
This document is placed in the public domain.