Brave New Ninteen Eighty-Four
Our traditional financial systems ignored, then ridiculed, and are now stepping up the pressure to regulate cryptocurrencies. And who can blame them? The current financial system works perfectly well, and may be as close to the ideal as is possible. It is important that any new upstart matches these ideals too.
The central banks behind our financial systems have also finally woken up and learned that there are properties and features of cryptocurrencies and tokens that would be highly desirable in existing money systems. Desirable for central banks, that is. Unsurprisingly, it is not the ideas of decentralized management, personal ownership, or privacy and anonymity that are of interest though.
It is the features pertaining to control. If you have programmable money, then you can code in all sorts of limitations, conditions, oversight, and tracking features.
Central banks have faced a problem since they first came into existence — they are two steps removed from the public economy. Yes, they get to kick off the process of money creation, and they have some levers and knobs that they can manipulate to influence the heat or coolness of the economy, but they have to work through the semi-permeable barrier of the retail banks to reach and influence the behaviors and habits of the people and corporations.
They are therefore somewhat like a nuclear scientist manipulating a radioactive isotope in a containment chamber through cumbersome robot arms. How they must wish they could reach in to the economy directly and just grab and move it!
Very soon they will. Smart contracts on blockchains provide the template for central banks to be able to affect each and every one of us directly, through central bank digital currencies, or CBDCs.
In this article, I am going to take a technical look at some of the controls that are available to them through smart contracts. It is surprisingly easy to produce a fungible token (or for that matter a non-fungible one) over which a small group has fascinating far-reaching powers.
Counting the money
At the moment, a central bank buys bonds off retail banks to get cash onto the balances of the banks.
They also set the percentage that banks must hold onto to back loans that they issue as part of the “fractional reserve banking system” — the loans retail banks make then act as a multiplier to the money supply.
Finally, the central bank gets to set the base interest rate that banks may not go below when lending out the money that they have effectively borrowed off the central banks through selling them bonds.
This makes it very difficult to calculate the total supply of money in the system at any given time. With a central bank controlling the minting function of the smart contract, and then delegating minting rights to other banks, the actual accurate supply of the digital currency can still be retrieved with one function call.
But what if the central bank doesn’t want the public to know what that figure actually is?
Easy! Have two functions — one for us that returns whatever number the central bank wants us to think is correct, and a second function that only they can call, which returns the actual true number.
Oh, and make sure the CBDC is implemented on a hybrid blockchain with the ability to hide certain data.
Spend and save
Central banks like to speed up the velocity of money if the economy is flagging, and slow it down if the economy is overheating. With a CBDC the central bank can directly control how much an individual can spend on a given day. A few lines of code allow the central bank to specify the maximum transfer allowed, fine-grained to different amounts for different entities.
As an added bonus, they can receive alerts when large sums are transferred, aiding in the investigation of suspected money laundering.
And finally, they can even use a CBDC to ban specific parties from transacting at all. Think of it as a specific kill switch for a person: we don’t trust you, and so you are no longer a part of our economy.
For example, the code above:
- sends a message if a large amount is being transferred,
- checks that you are not on the ban list, and
- checks that the amount you are trying to transmit today is not over your spending limit.
All this before your money actually goes out of your account.
The Lord giveth…
Sometimes, apparently, it is necessary to flood the money supply. One example is quantitative easing, in which large sums of money are created out of thin air for various economic purposes that are too complicated to discuss right now:
This simple snippet of code multiplies the money supply by ten, in mere seconds.
Of course, quantitative easing is a rather coarse methodology. How about something more fine-grained, like stimulus checks. Or just creating some money and giving it to friends and family:
Here the function takes a list of address, and mints a specified amount of coins to each of them. It goes down really well at parties on yachts.
… and the Lord taketh away
On other occasions, it may come to light that a particular person is actually not a decent upstanding member of society. They are a terrorist, or a human trafficker, or a Bitcoin miner. Through a mere three lines of code, the supreme leader can destroy their funds:
It would have been two lines of code, but to ensure that the money supply does not decrease (after all, who wants a deflationary currency — that would encourage hoarding), a third line ensures that the same amount is minted again, to the central bank address.
Remember, we want those financial charts to go up and to the right. Even if what is being charted is the price of a can of coke against time.
Automatic taxation for the people
Wouldn’t it be great if a sales tax was automatically imposed on each and every transaction? No more VAT calculations, forms to fill in, rebates to claim, and so on.
Of course, some people should be tax exempt, and some should be subject to higher taxes. And we have to decide whether the taxation is calculated based on the sender, or the receiver, or even both.
In the following example, I am calculation the amount the tax office siphons off based on the receiver’s status, with the default tax being set to 12% earlier in the code:
The first block of code is part of the transaction pre-checks, and decides whether the transaction is tax free, or not.
The second part allows the central bank to set the default tax rate.
The third part provides fine-grained taxation options — different addresses can have different taxation percentages, including 0% tax, and if the address is not on the list, the default tax is applied.
And finally, the last part allows the tax rate to be changed.
Conclusion
I could keep going, but as with everything, at some point a line has to be drawn underneath it. However, there is nothing stopping you from inventing more fantastic control systems for the centralized currency of your nation. After all, I spent more time writing this article than I did coming up with the ideas above for a CBDC, and implementing them in code.
Here is a Github repository where I’ve made all of this open source, so you can copy it and add your own authoritarian features:
https://github.com/kf106/nb-sandbox-contracts
Have fun!
About the author
Keir Finlow-Bates is a blockchain researcher, smart contract developer, inventor, and writer. He lives in Finland with his wife and eight children.
If you found this article entertaining, you’ll love his book, Move Over Brokers Here Comes The Blockchain, which explains blockchain through the use of analogies without oversimplifying the topic.