What Actually is Programmable Money?
Everyone seems to be interested in programmable money (and assets), but what exactly does this mean? This post explores the concept of programmable money – what is possible today, and what is possible with the help of smart contracts on blockchains.
Is it automated payments?
- If I click on “make a payment” in my bank’s online banking website, and the bank’s computers move the money, is this programmable money?
- If I run an app on my computer which does some stuff then logs in to my bank’s online banking website and clicks on “make a payment”, is this programmable money?
- What if my program does the same thing using the bank’s API?
It feels like simply instructing a bank to make a payment doesn’t count as programmable money, whether that instruction comes from a human or a computer program. Here’s a primer on how payments are made today.
This means that programmable money can’t just be the ability to write arbitrary code that can move money. Even if it includes complex business logic and external data as part of the decision making. Because businesses already do this today: payment instructions sent to banks typically come from computer programs running on corporate servers.
So is it more to do with automation of payments at the bank’s side (as opposed to on the customer’s side)?
- If I instruct my bank to make an automated monthly payment of $4,000 to my landlord, is that programmable money?
- If I authorise a utilities provider (eg electricity, gas, phone etc) to take different amounts of money from my bank account every month, is that programmable money?
- What about if I upload a file to my bank to pay 350 staff their monthly salary, is that programmability? (This is how payroll works; you don’t usually have someone manually typing in each and every payment)
Well, we have all of this already. Banks already perform client-instructed automated tasks, with rudimentary if/then logic:
IF it's the first day of the month THEN pay rent UNLESS I don't have enough money THEN don't make the payment AND send a notification AND charge a fee.
If banks saw demand, I suppose they could let you upload code, and they would run the code, and they would treat the result of the code as a payment instruction from you. But the result is no different to if you ran your own code then instructed the bank, as discussed earlier. And this would create liability headaches for the banks if and when the code goes wrong…
If not automated payments then what?
Well, in each of the above cases, of course the bank could actually hold back the payment, even after they have received the payment instruction. (And in many cases they are required by regulators to not tell customers why they have withheld the payment!)
So you are not guaranteed that the payment will work end to end.
Does programmable money mean that no matter what, the code’s instructions will be carried out, and no bank or intermediary can stop it?
If that’s the aim, then this can only happen if customers can hold and control money (or something representing money) outside of the banking system.
Stablecoins, on a public or permissioned ledger, get us closer. You can upload programs called smart contracts that are guaranteed to run. But even these smart contracts result in an instruction to the smart contract that defines the money. And the smart contract that defines the money can decide not to make the payment, for example if the payment instruction is to a blacklisted account.
It’s designer money
I think then the answer is designer money. Money that is created by someone – an issuer – that behaves a certain way, and has certain constraints no matter who “owns” it at any point in time.
Banks can’t do this, because money in banks is all different. My USD at Citibank is different to your USD at JP Morgan. It’s different in two ways:
- My Citibank-dollars are controlled by Citibank, and your JP Morgan-dollars are controlled by JP Morgan. This means if the money should behave a certain way, both banks have to implement exactly the same logic and constraints.
- My Citibank-dollars are legally, and practically, a different instrument to your JP Morgan-dollars. My Citibank-dollars are a legal agreement that Citibank owes me dollars; your JP Morgan-dollars are a legal agreement that JP Morgan owes you dollars.
The result is that money, controlled by all of these different entities, is all different and behaves in different ways. Think how hard it is to implement anti-money-laundering rules across the board. Every participant has to attempt to apply the same logic. Every. Single. Participant. No wonder it’s ridiculously expensive, and has many gaps.
Why is this the case? It’s because there is no ledger for money that can be referenced to while transactions are made.
- Money that was intended for some specific thing ends up somewhere else (corruption).
- Loans can be spent on items other than what the borrower told their lender they would use it for (fraud).
- Grants can be used to pay for things the grant was not intended for (misuse, corruption, or fraud).
Benefits of designer money
Now you can create money where the money itself has control logic built into it. This is done at the smart contract level. A smart contract is typically a bunch of code that is run by all participants in a blockchain network. It that defines:
- The characteristics of the money (how many units there are, who initially owns it, etc)
- How users can interact with the money (ask for a balance, make a payment, etc).
The constraints are coded into the second part of the smart contract, so that all payment requests are subject to those constraints – no matter who is in control of the money at the time.
In this way, money can only go to intended destinations. Once this special purpose money has arrived at the destination, it can be “redeemed” for general purpose money, if needed. (As analogy, think about how food stamps work)
You can create certain types of money that can’t be sent without additional data, eg proof that the payment is to support an export or import.
You can even put constraints on wallet balances or money flows. For example a recipient’s balance can’t exceed $2,500, or any payment can only be made up to $50, or any account can only send or receive a total of $1,500 per day, or whatever.
With designer money, the possibilities are practically endless. Yes, special purpose money reduces the ‘fungability’ of money, but that’s the point. There are so many cases today where money has special uses and should not be fungible with general purpose money, but the current system messes this up.
During Covid-19, governments are experimenting with grants that should only be spent in certain ways. Blockchains provide a platform for building designer money in a repeatable and scalable way.
What do you think? What’s your definition of programmable money?
Note: Special thanks to Henning Diedrich, author of “Ethereum: Blockchains, Digital Assets, Smart Contracts, Decentralized Autonomous Organizations” for feedback and inputs on this piece.