Two years ago I got very excited by the idea that it will be possible to decentralise the handling of money in my small country Estonia. I’m not talking about geeky bitcoins, but the real Euros. I wrote this blogpost, chatted with bitcoin people this and the other side of the Atlantic. At the time it certainly felt do-able, but needed quite a bit of technical and cryptographic wizardry.
Now we have the Ethereum programmable blockchain. It took me a couple of hours on a Saturday morning to successfully implement a central mint and a monetary system using a public recipe, together with necessary enforcement controls to tackle money laundering and other bad things.
Built a central bank and a monetary system on the Ethereum programmable blockchain this morning. Magic. pic.twitter.com/YlFCBsWzmm
— Kristo Käärmann (@kaarmann) May 28, 2016
The technology is here, now it is just the matter of bringing the digital money to life.
Imagine our usual money, Euros that don’t live in banks – but are omnipresent in the ether. Where you and only you are directly in control of them. Imagine everyday banking being a public good. Imagine that money moves in real-time between any destination any time of the day. Imagine it doesn’t cost more than 1 cent to make 100 payments regardless of the size. Imagine the world where people and businesses don’t need to open bank accounts to get paid.
Wait, but why do we need it?
Banks work. They have already been built.
Banks work just barely. Payments between banks take a couple of hours in most places and won’t work in the middle of the night or over the weekends. When payments do move, they do at a cost. Some banks pass it on to customers (€0.32 in Swedbank) others subsidise from other products. Businesses are not getting off easy, card payments cost them at least 1% of the sale.
We shouldn’t complain about banks, there’s not much incentive for them to improve.
No-one knows how the technology of using money should evolve. Unfortunately we won’t find out as long as we’re relying on banks to figure it out. Hence, the first step is to create an environment, where money isn’t the monopoly of banks and where everyone can innovate.
Eventually we want our Teslas to pay for the parking themselves and fill up autonomously. We want our smart meter to pay for gas and electricity. We want our money to be safe without paying someone for keeping it safe.
Wait, but how do we get it?
It is great to play through that a new monetary scheme could exist in theory, but it is many times more exciting, when you see how it can happen in practice. What I’m suggesting below would be crazy pipe talk in most countries, but taking one small country I know well – it would be practically doable. With a small leap of faith.
Ethereum blockchain, its smart contracts and distributed truth validation do most of the work. It creates a digital token that can be mapped to fiat currency with managed supply. We need just a couple of additional components.
1. The central mint
The central mint is the trusted body, preferably the central bank, who takes fiat currency deposits and issues digital tokens in return. Technically it is a special user defined in the ethereum contract, who has the ability to increase or decrease the total supply of digital Euros. There is not much to code, it is already easily done in ethereum contracts.
2. Fiat <> crypto gateway(s)
In theory this could be the central mint, practically it would make sense if there are a few gateways available who exchange fiat to crypto and back at the 1:1 rate. Some crypto accounts should have an associated IBAN, so that every Euro sent to that IBAN from a traditional bank will naturally end up on this crypto account on the blockchain. Equally, the network API should allow crypto tokens to be sent not only to other crypto accounts but also to external IBANs so that they get seamlessly converted in flight.
In Estonia there is a convenient solution that would work for topping up personal accounts. Local banks pass the sender’s ID code with the bank transfer, so you can set up a single collection bank account for fiat EUR, which then determines the destination crypto account based on the sender’s ID.
3. Identity registry on EstID
The crucial part of a successful public cryptocurrency scheme is giving law enforcement the ability to monitor money flows and freeze accounts. The latter is easy to do on Ethereum by creating an appointed user in the blockchain contract, who has the powers to mark accounts frozen.
The monitoring part is solved with a private registry, which links crypto accounts with the ID codes of real people or registry numbers for businesses. This registry ensures, that there is a real world identity behind every crypto account and every transaction.
In practice this means that when someone generates a new crypto account, it will need to be registered before it can receive currency. That is easy to do just by signing the account with the mobile-ID. Nothing more than an API call to the registry with the valid ID signature.
Thinking a step ahead, in the similar way as we give first.last@eesti.ee email addresses to every citizen with their ID, we could easily create default cryptocurrency addresses for every single person. You would be able to set up automated forwarding to traditional IBAN.
4. Paying blockchain miners
The scheme may run on the main ethereum blockchain, but could also be run on a private blockchain. The latter would need mining infrastructure, which is readily available on the ethereum main network with the benefits of scale. Thus, at least initially, running on the main ethereum network makes sense.
Ethereum charges for mining and transaction processing in ETH – a currency of ether. Roughly at the cost of 1¢ that is not a problem, but the crypto EUR accounts are likely not going to have any ether on them. We need to arrange some ether pre-funding. Looks like this is also possible to define on these Ethereum smart contracts, but needs some more thinking.
5. SDKs and sample apps
The whole point of the scheme is to turn banking into a public good, something that everyone can innovate on. Although anyone can build their own wallets and features directly on this blockchain, we can make that easier to get going with.
It would be convenient to have an open source server-client setup, which keeps the multi-Gb blockchain on a server exposing an API and the SDKs for javascript, android or ios clients. Good to have sample implementations of apps to register accounts, check the balances and make transfers.
Then what?
This all sounds pretty easily doable. But then what? We’ll have all of this in place – who will use it?
Not much will happen on day one. Then you’ll see some apps integrate crypto Euro as a payment option. Just because they can do so at no cost and with little effort. Next you’ll find that some mass payers prefer make their payouts in crypto money. Saving €30 on every 100 payments pays back quickly.
The big change will come the day, when someone figures out to use digital money in a way that banks and us today can’t even imagine. Our job is to make that day possible.
Open problems
It is almost all quite straightforward – before you get to the trickier parts.
1. Public balances
Blockchain is public. All the transactions are on the blockchain. Hence everyone can fairly easily compute the current balances of every single account on the blockchain. You can also summarise how much have accounts paid to which other accounts over time. Sounds like all transactions on all bank accounts would be public. Doesn’t sound like a great idea.
Fortunately there are almost endless account addresses available. Perhaps there is a scheme where a new sub-address is created for every time someone asks for my account-address. Then I would end up with technically hundreds of accounts and the app presentation layer would have to bring it all together to one balance.
Equally new accounts could be generated for every payout, so that when you receive money from me, you will only know of this one account. There can also be nightly obfuscation process, which pools all money from incoming-accounts together and then redistributes to the outgoing-accounts of the same person. It is called “mixing” in the bitcoin world. In this case the “mixing” would be done by the scheme itself.
2. Pulling money (direct debit)
A lot of everyday banking is pushing money to other accounts, but the majority of transactions are “pulling” money. Largely these use cases fall into 3 groups.
- e-Invoices or payment requests: this is effectively a message sent to your bank by a retailer, a phone company, your friend, who you owe for lunch. The bank would require you to log on as normal, review the amount and authorise a push payment to the requester. It could work exactly the same with crypto Euro, nothing complex here.
- direct debit: in this scenario you would trust someone, usually a utility provider, to withdraw random amounts of money from you monthly to cover your gas bill, rubbish collection, taxes. Some countries allow you to set a velocity limit – e.g. not more than €30 per month for a phone bill and almost always are these payments non-final. This means you can always tell your bank that you didn’t mean to pay this amount and they would pull it back from the receiver. IMHO this UK/US style direct debit is a pretty expensive fraud inviting setup. There are some cases, where it does make sense – for example paying for Uber rides, having Paypal account “connected” to a hosting provider, who withdraws every month.
The ethereum contract would allow account owners to nominate a 3rd party account, who could pull money from this particular account – also with velocity limits. - debit card: in the physical world this works as a token, together with your PIN to authorise that you want to make a payment from the account. Initially the cards could work off-blockchain. I’m sure many people will happily give you debit cards against your crypto account backed by the direct debit agreement. They would make 0.2% interchange from the merchant on every Euro you spend.
The new news from Estonia
Let me know if you’re interested in making this a reality. I think we have a chance.