Nxt’s Monetary System allows users to create new decentralized currencies on top of the secured Nxt blockchain. New coins are highly customisable, with a wide range of parameters that can be set to govern their properties and use.
The Nxt Monetary System (MS) enables the launch of altcoins without going through the trouble of bootstrapping the currency with its own blockchain and network,
thereby removing a major impediment to easy, real-world adoption and use of different customized cryptocurrencies.
The ultimate value of a new coin is determined by the market, depending on adoption and demand, and by the parameters set by the issuer. However, coins may also be created by ‘locking’ a certain amount of NXT, thereby giving a floor value to the issued currency at which they can be redeemed for NXT if desired.
With Nxt, new coins are highly customisable, with a wide range of parameters that can be set to govern their properties and use. It is possible to launch an MS coin that is distributed by proof-of-work, but secured by Nxt’s PoS algorithm. It is also possible to create fiat- and commodity-backed tokens for particular real-world applications.
These allow for the creation of bespoke and niche currencies for highly specific applications, crowdfunding coins, ‘regular’ altcoins, reward points, coins pegged to fiat currencies or precious metals, while also being a stepping stone to new future Nxt features, such as p2p loans, meaning that Nxt can become the underlying tech for a completely decentralized banking system.
MS can be explored in the Nxt testnet, ask for testNXT here.
The main net NRS release that will implement the MS System has also been released. Monetary System will be activated with block 330000, and nodes not running 1.4.5 or later will be on a fork.
A guide to the NRS Client interface can be found here.
Potential impact and significance
Monetary System offers greater exposure to NXT as the machinery that powers financial transactions, over and above its utility as a currency; however, this does not imply that NXT itself will become worthless. NXT remains a ‘decentralised store of value’, with fixed supply. MS currencies may become something akin to a decentralised credit system, meaning that users transact with MS coins but all of them depend on NXT for their ultimate utility.
Of course, this does not mean that MS will not catalyse a shake-up of the NXT ecosystem, providing an impetus for the redistribution of existing NXT wealth, as Come-from-Beyond writes:
‘In the beginning we will have an epoch of instability when hundreds of currencies will pop up every day. After a while some currencies will become more and more popular, but the whales will have their wealth dispersed among thousands and they will get only a fraction of initial wealth in the most popular currency.’
The Monetary System is necessary because different currency properties are suited to different applications. Having a series of currencies that fit the needs of the market are the obvious solution to the one-size-fits-all problems of both fiat and any single cryptocurrency. For example, as Come-from-Beyond also writes:
‘Having a fixed currency supply (like Bitcoin and NXT) isn’t ideal for all situations. Fixed currency supplies make a great ‘store of value’, but they make lousy credit systems. The Monetary System is simply another tool to allow people to create local currencies to break free of centrally controlled fiat.’
NXT will be bought by those looking to create currencies – it will not be used to purchase alternative currencies (as is presently the case).
‘NXT will have one specific use case only: to enable transactions. Nxt Monetary System is about separating power from economy. So, we can basically move the NXT Economy from this platform to another one if something is wrong with NXT or to penalize forgers if they misbehave.’
MS enables a series of far-reaching developments, including:
- Coin shuffling. Claimable currency units can be shuffled and returned at the same exchange rate, allowing for anonymous transactions without potential loss of value in the process.
- Fiat-backed tokens. Once USD, GBP, EUR or other fiat currency-backed coins are trading, it will be possible to send fiat money using the NXT infrastructure. This brings the benefits of speed and very low transaction costs to international money transfers. Unlike with Bitcoin and other cryptocurrency transactions at the moment, there would be no volatility, and exchange rates would be negligible (or zero, since these tokens could simply trade internally within the NXT system indefinitely, until the recipient wanted to redeem them against fiat).
- Local currencies and exchange trading systems to benefit specific economies.
- Niche loyalty tokens issued by businesses to reward customers. These tokens would also be freely and globally tradeable, meaning the market would set their value beyond what they could be redeemed for within the business in question.
The NRS Client exchange, testnet screenshot
Monetary System: specifications
The following descriptions are taken directly from MS documentation as it stands at the time of writing. Documentation may change without notice. Latest version can be found here: https://bitbucket.org/JeanLucPicard/nxt/issue/205/monetary-system-documenation
The ‘Currency’ entity is the basic building block of the NXT Monetary System, currency has a unique name and code and uniqueness is guaranteed by the protocol, currencies can be deleted and their code can be reused under certain conditions.
The total currency supply is divisible into currency units. Like assets, currency units support decimal positions implemented as a client side feature. The maximum number of currency units which can be issued per currency is similar to NXT: i.e. 10^9 * 10^8. The actual maximum units supply is set by the currency issuer. The currency issuer is the account which issues the currency and pays the issuance fee. The issuer is responsible for setting the currency properties and in some configurations has additional control over the currency usage. Like asset balance, currency units can be transferred between accounts.
The currency entity supports several properties. Properties can be mixed and matched in various ways to compose the currency type. The currency type then controls the inner workings of the currency. The list of available currency properties is as follows:
EXCHANGEABLE – the currency can be exchanged with NXT. Holders of the currency can publish an exchange offer specifying the buy and sell rate of the currency, in much the same way as banks or currency exchanges publish their exchange rates. Each account can publish only a single exchange offer at any given time. Exchange offers have an expiry block after which they are no longer in effect.
Buyers and sellers can issue exchange requests to match published exchange offers. Unlike asset bid/ask orders, exchange requests are not saved, they are either executed immediately (fully or partially) or not executed at all. A match of exchange offer with a buy or sell exchange request creates an exchange entity which represents the transfer of currency units, in return, to NXT balance and causes the relevant account balances to update. Issuing an exchange offer reduces the NXT and currency balance of the offering account temporarily until the offer expires. Exchange offers also specify a limit on the number of exchanged units which can be larger than the number of units offered. When a buy exchange request matches an exchange offer the number of units offered for sell is reduced and the number of units offered for buy is increased as long as the limit has not been reached. Once the exchange limit of an exchange offer has been reached, this exchange offer can no longer be used.
CONTROLLABLE – currency property suitable for currencies which need to track an external entity. It imposes the following limitations on the currency: (1) Currency can be transferred only to/from the issuer account (2) only the issuer account can publish exchange offers. The issuer account can issue a large (practically infinite) supply of units in advance, then transfer units to accounts, or offer to exchange units, to reflect actual transactions which take place in an external system. The large supply of units in the issuer account can be used to mimic the effect of creating units out of nowhere to support features such as creating new units and interest payments.
RESERVABLE – currency units are not issued immediately. Instead the currency issuer sets a block height by which the currency is to be issued and a limit of NXT per unit needed in order to issue the currency. Currency ‘founders’ then spend their NXT to reserve their currency stake. If the amount of NXT per unit needed in order to issue the currency is not reserved before reaching the block height the issuance is cancelled and funds are returned minus fees. If the required reserve is allocated, the currency is issued and units are split between founders according to their proportional stake of invested NXT. In case of rounding, leftovers are sent to the issuer account. See below for a discussion of usage scenarios for Reservable currency.
CLAIMABLE – currency units of reservable currency can later be claimed at the same NXT per unit rate reached when reserving the currency. The ability to claim a currency at a certain rate imposes some practical limits on the rates at which users would want to exchange it. However claimable currency can also be exchanged if only for the purpose of exchanging the whole currency supply, so that the currency can be deleted.
MINTABLE – currency can be minted using proof of work algorithms in much the same way as Bitcoin. Unlike Bitcoin mining, minting currency does not secure the network (this is done by NXT). Minting is used solely for creating new currency units and serves as the only mechanism to increase the number of available units after the currency issuance.
NON_SHUFFLEABLE – this property indicates that in the future this currency cannot participate in coin shuffling. By default currencies are allowed to participate in shuffling.
Properties are combined into an Integer bit mask designated as the Currency type.
For exchangeable currency, each currency holder account, can publish a single exchange offer specifying the buy rate and sell rate vs NXT and the number of units she is willing to exchange (which cannot exceed her available currency units and NXT balance). Users can observe all currency exchange offers (intuitively similar to fiat exchange offices) and try to match them with buy/sell exchange requests. An exchange offer has an expiration height, as well as a limit on the total number of units which can be exchanged. When units are bought from an exchange offer the number of units to sell increases automatically and vise versa. The publisher can also limit the total transaction volume of currency units traded for a specific exchange offer.
Deleting a Currency
Since the available currency codes are limited to 3, 4 or 5 uppercase letters, the total number of codes is limited to 26^3 + 26^4 + 26^5 – 1 = 12355927 unique values (The code “NXT” is reserved), it is likely that some of these codes will have value in themselves. Therefore deleting a currency is possible under certain conditions depending on the currency type. Users may re-issue a currency, or delete a currency and then issue a new currency, with the same code but with different properties. In order to delete or re-issue a currency an account must poses all the currency units (and additional conditions apply based on the currency type)
Creating new Currency Units
The only way to create new currency units after issuing a currency is using proof of work minting. Other methods of creating units are susceptible to denial of service attacks and/or sock puppets and are therefore not allowed. The controllable currency type provides a partial solution for creating new units, by allowing the currency issuer account to treat her supply as a treasury and only consider units outside of this account as the total currency supply. This approach requires users to trust the currency issuer which can increase the currency supply at any time.
Users can issue minting requests in order to mint additional currency units. Each minting request triggers a hash calculation based on the submitted data and the currency hash algorithm. The resulting hash code is compared to the target value derived from the current currency difficulty. Minimal and maximal currency difficulty values and minting algorithm are specified when issuing the currency and cannot be changed later. The expected number of hash calculations (i.e. difficulty) of minting the first unit is 2^minDifficulty while the difficulty of minting the last unit is 2^maxDifficulty. Difficulty increases linearly from min to max based on the ratio between the current number of units and the total supply. Difficulty increases linearly with the number of units minted per CurrencyMint request, small minters can mint only a few units per request while large minters can mint large number of units per request.
The number of units per minting request is limited to 1/10000 of the total unit supply. Minting is limited to a single minting transaction per block/account/currency. Currency issuers can specify initial supply of units as a ‘pre-mint’ supply assigned to the issuer account then use crowd funding by making the currency RESERVABLE and EXCHANGEABLE.
Once the currency becomes active the delta between the current supply (reserved supply) and total supply can be minted. The NRS provides a Java based, reference implementation minter, which can be used for minting. In practice we expect users to enhance this minter to calculate hash codes using their Asics or GPUs, trying to match the current target, and when solving a hash, to submit a currency mint transaction (thus paying a fee).
However the hash code is smaller than the target, the currency units are credited to the sender account.
See the documentation for the reference implementation ‘Mint Worker’ utility here #207
Store of Value
The combination of RESERVABLE and CLAIMABLE properties can be used to allocate initial value for a currency by locking NXT. Once the currency is activated the reserved NXT are locked and the only way to release them is to claim back the currency units in return
for NXT. This provides the currency with a value based on the locked NXT balance. Note: locked NXT do not participate in forging, therefore, in theory its possible that a large amount of NXT becomes locked as a currency store of value thus reducing the amount of NXT used for securing the network; we are aware of this problem and will monitor it closely. We do not expect this to become a major problem any time soon.
The combination of RESERVABLE and EXCHANGEABLE properties can be used for crowd funding; in this configuration the NXT balance reserved by founders is not locked, instead it is sent to the currency issuer account once the currency becomes active. The issuer can use these NXT for its operations and the founders cannot claim back their currency units, only exchange
them based on the published exchange offers. Currency issuers can specify the initial supply as ‘pre mine’ and the founders get to share the difference between the reserve supply (also named ‘pre-activation’ supply) and the initial supply.
Currency issuance fee is based on the length of the currency code:
3 Letters – 25000 NXT
4 Letters – 1000 NXT
5 Letters – 40 NXT
Re-issuing an existing currency with different properties costs 40 NXT regardless of
the currency code length. All other currency transactions (as of today) have a fee of 1 NXT.
Currency is measured in units and like assets has decimal positions, however the blockchain maintains currency balances as a whole number (QNT). Therefore, for example, in the case of a currency which has 2 decimal positions and the client has reserved 123.45 units, the ‘units’ value submitted in the API call should be 12345. APIs using NXT balances should send the value measured in NQT as usual. When specifying ‘rate’ in the API, it calculates the ratio between NXT balance in NQT and currency balance in QNT.
Example: For a currency with 2 decimal positions. When submitting a buy exchange request for 12.34 units at a rate of 5.6 [NXT/Unit] the values submitted to the currencyBuy transaction should be: units = 1234 i.e. units without decimal position or 12.34 * 10^2 rateNQT = 5600000 i.e. rate converted to NQT then divided by decimal position or 5.6 * 10^8 / 10^2
In order to prevent rounding problems when submitting information to the server, the UI enforces the following rule: If a currency has D decimal positions. Unit values cannot have more than D decimal positions and rate values cannot have more than (8-D) decimal positions. Therefore when issuing a currency, we do not recommend specifying more than 4 decimal digits so that conversion rates are also divisible to at least 4 decimal digits.
- Before issuing a currency we recommend issuing a currency with the same properties on the testnet and experimenting with all parameters since these cannot be changed without deleting the currency.
- This documentation reflects the actual code implemented as of this date.
This section is relevant to API and client developers.
Nxt Monetary System is only one Nxt CORE feature.
Read other articles from the Nxt [CORE] article series.
Also see: Nxt – The Economy Platform – Usecases for everybody