You might be thinking – auto payments! And you are right. Indeed, if Alex had a bank account, this is a straightforward process. All Alex needs to do is set up recurring payments on her Visa card to automatically pay for her recurring bills. However, this is not as straightforward to execute on a blockchain. To see why this is the case, let us consider the Ethereum network. We will begin by setting up some terminology that will help us better understand the issue at hand.
As part of Visa’s internal Crypto Hackathon challenge earlier this year, we took on the opportunity to explore the above scenario using a novel technique. The example described is a common everyday use case that can be solved by existing means today such as cheque or Automated Clearing House (ACH). We also provide a fast and efficient option today for billers – through Visa acceptance, merchants can opt to accept Visa by setting up automatic payments for recurring bills or by taking card information for individual payments over the phone or online. However, as we are looking to utilize blockchain technology for payments, this takes a new turn when it comes to building out the solution through smart contract.
Accounts on Ethereum
There are two types of accounts on the Ethereum network today: Externally Owned Accounts (EOA), more commonly referred to as user accounts, and Contract Accounts (CA), referred to as smart contracts. A user account, controlled by a private key, can send transactions. A smart contract has associated code that can be executed, however, a smart contract cannot initiate transactions on its own. Transactions must always originate from a user account and be signed by the user. Transactions can be a simple token transfer between user accounts on Ethereum blockchain or more complicated ones that trigger a series of operations to be executed through smart contracts to perform many different actions.
Auto Payments on Ethereum
Let us revisit Alex’s situation. Suppose Alex owns a user account which is where her paychecks are deposited and from where she would like to pay her mortgage, TV subscription and utility bills. Today, to pay her bills, Alex has to initiate a transaction that transfers tokens from her EOA to a user account belonging to the recipient, that is, to whomever she is paying her bills. In more detail, Alex’s EOA has an associated secret or private key known only to Alex. This private key is used by Alex in the generation of an Elliptic Curve Digital Signature Algorithm (ECDSA) signature that is crucial for the creation of a valid transaction. And this already brings us to the problem at hand. If Alex is away on holiday, who will generate this signature to create the transaction that will make her payment?
One solution is for Alex to use what is known as a custodial wallet. With a custodial wallet, another party controls Alex’s private key. In other words, Alex trusts a third party to secure her funds and return them if she wanted to trade or send them somewhere else. The upside here is that Alex can set up an auto payment connected to her custodial wallet. Since the custodian, who is the party that manages her wallet, has access to her private key, they will be able to generate the signature needed to create the transactions for her scheduled auto payments. And this can happen while Alex is away on holiday. The downside is that while a custodial wallet lessens Alex’s personal responsibility, it requires Alex’s trust in the custodian who holds her funds.
With a self-custodial wallet, one where the user has total control over her wallet, Alex has sole control of her private key. While there is no need to trust a third party when using a self-custodial wallet, this also means that Alex will not be able to set up an auto payment as she must be the one using her key to generate the signature needed for the payment transaction.
Another way to understand this is through the terminology of pull and push payments. A pull payment is a payment transaction that is triggered by the payee, while a push payment on the other hand is a payment transaction that is triggered by the payer. Ethereum supports push payments but doesn’t natively support pull payments – auto payments are an example of pull payments.