This is to understand ASA functionality - like in case of stable coins.
Like with USDT or USDC, whenever the amount in bank reserve updates, during on-ramp and off-ramp.
How can the supply be modified on Algorand Blockchain?
Manage Address can re-configure the asset circulation? Change it let’s say from 10k to 15k?
As the asset Total cannot be changed once an asset is created, how does this minting is done?
I mean how to bring in more supply in form of digital USD on blockchain.
And how to burn the asset, when the amount in bank reserve decrease, can happen during off-ramp?
The total amount of tokens cannot change, once the asset is created.
But you can keep non-circulating tokens in the
Minting is done by moving tokens from the
reserve address to the address of your choice.
Burning is the opposite operation and is reversible (once burnt, an asset can be minted again).
If you want to burn tokens in a way that is non-reversible, you can send them to a special ASC1 contract address (to be designed by you). Note that block explorer may not realize that the smart contract actually burns the tokens, and may not display the right circulation. I think you can work around this issue by making the reserve address a smartly designed contract account that allows non-reversible burning.
Note that the
reserve address does not have extra “power” in Algorand, it is purely informational. It just provides a way for block explorers to know the circulation (i.e.,
total - reserve) of an asset.
The only fields that the
manager address can change are the ones specified in https://developer.algorand.org/docs/features/asa/#mutable-asset-parameters
Thanks @fabrice for sharing the details.
I have one more question about increasing the total amount of asset. As this is immutable field, how can increase in reserve be handled.
I mean currently USDC has $1.1B in bank reserve and they have issued USDC asset on Algorand with their Reserve Address holding this $1.1B. They can be minted and burned as you explained.
Also this USDC is a verified asset by Algorand and different accounts have opt-in the verified USDC and is using the benefit of underlying Algorand network for instantaneous (5 seconds) Authorisation, Clearning and Settlement.
Lets say, in 2021, USDC increased its bank reserve by $5B due to demand, the same need to be issued on Algorand for circulation. How can I increase the existing USDC, considering it is already opt-in by multiple accounts and is verified by Algorand.
It can only happend by issuing another USDC asset with a different asset id on top of Algorand with $5B supply. And this again need to go through same Algorand asset verification, and opt-in for users to use it. And in this case users will be holding two different USDC in the same account.
Could you please explain more about this and how existing stablecoins on top of Algorand are handling this issue. I am asking this from CBDC (Central Bank Digital Currency) intiative, where they be will increasing the reserve and printing(minting) more money into circulation.
I don’t know how USDC plans to do it, but I think of the following potential solution:
- Create a new ASA, USDC2 with $5B
- Create a contract account SWAP that allows to swap USDC1 (the original USDC) and USDC2 (in both directions).
- Move $1.1B of USDC2 to this contract account.
Now, people can upgrade their USDC1 to USDC2 using the contract account at any time.
In case, some old contracts / accounts only support USDC1, you can always use the contract account SWAP to change USDC2 to USDC1.
I also think specifying an arbitrary total amount of in asset at creation would be cool. Such as creating USDC with total owing to say 200BN. The reserve account will control how the coin is released into circulation. Any asset balance sitting in the reserve is seen as non-existent in the real sense.
Can you just leave the remaining non circulating coins in the issuing wallet till needed?
Yes, just set the reserve address to be the creator/issuing account.