Today, most decentralized applications (DApps) are more difficult to use than traditional web and mobile applications. Interacting with DApps can be hard work for users. For example, in order to transact on the Ethereum blockchain, you first need a wallet containing some Ether.
Creating a wallet for managing and storing your Ether is becoming easier for users as mobile apps like Coinbase Wallet and browser extensions like MetaMask continue to improve and gain traction. However, converting fiat currency such as USD into Ether is still a major hurdle for first-time users. Often, the process requires you to hand over your passport and bank account details. Worst, many services require you to wait up to a week before you finally receive some usable Ether in your wallet.
Although having Ether in your wallet makes sense if you want to buy a product or service, it should not be a requirement for many other user interactions. Should it be a requirement for sellers to create listings?Should it be a requirement for new users to create their profiles? Unfortunately, for most DApps, interacting with the Ethereum blockchain DOES require users to spend small amounts of Ether for even very basic actions. Typical interactions can cost anywhere from a few cents to multiple dollars worth depending on the transaction’s complexity and storage requirements. This is known as the Ethereum ‘gas fee’. Until recently, Origin’s marketplace was similarly required users to pay gas for every piece of data that was posted to the blockchain. Creating a listing or user profile on Origin required having some Ether in your wallet in order to pay for the transaction.
For new users, especially sellers, this can be a pain or even a complete showstopper. Users are not accustomed to paying to give valuable data (e.g. listing data) to applications.
A few months ago, we asked ourselves the question of how we would enable new users with a wallet but no Ether to quickly and seamlessly transact on our platform. The solution we came up with is…. 🥁🥁🥁…. Meta Transactions!
We are proud to have implemented this solution to subsidize gas fees for our users, effectively removing multiple points of user friction that would otherwise hinder adoption.
What are Meta Transactions?
To understand Meta Transactions, let’s look at what happens when we create a listing on the Origin Marketplace contract.
First, we send our listing data and images to IPFS and get back a unique hash which allows us to retrieve that data easily. This hash is then sent to the Origin Marketplace contract, which records it on the blockchain along with the account ID of the sender, resulting in a new listing. Buyers are now able to make offers on that listing, and only the seller has the power to act on those offers.
Control of the listing is important here. Only the seller should be able to update the listing, delete it, or act on offers from buyers. This control is given to the account of the user who created the listing. At the contract level, this is whoever sent the transaction. However, since sending a transaction requires gas, how can we ensure the seller maintains control without having to send a transaction?
The answer is by having an intermediary contract, called a proxy, which can execute transactions on behalf of its owner. Either the owner can call the proxy directly, or a third party can call it with transaction data that has been signed by the owner. In the latter case, the proxy will only execute the transaction if the signature comes from the proxy’s owner. Due to the magic of cryptography, it’s possible to recover the account ID that signed some given data within the contract.
For example, let’s say I have an account “0xABC” and I sign some data “createListing(0x123)”, resulting in a signature of “0x456DEF”. Now I can retrieve that data from the other direction; given the original data and signature, I can recover the original signing account “0xABC”. The proxy does this calculation in the contract and, if the signing account matches the owner, it will execute the transaction, regardless of who the sender is.
Since signing data is free, we now have a way for an account with no Ether to maintain control of a listing, as long as there’s a third party (relayer) willing to pay the gas to call the proxy contract on the user’s behalf.
To recap, let's walk through the whole process:
- A user creates a new wallet, which initially contains no Ether.
- The user signs a transaction to deploy a new proxy contract with their account as the owner.
- The user sends this transaction and signature to a relayer server.
- The relayer sends the transaction to the blockchain and pays the gas, resulting in a deployed proxy contract controlled by the user.
- The user signs a transaction to create a listing on the Origin Marketplace contract and passes it to the relayer.
- The relayer calls the proxy contract, which executes a createListing transaction on the Origin Marketplace contract.
- The Marketplace contract now has a new listing owned by the proxy contract.
- Since the proxy contract is controlled by the user, the user is ultimately in control of the listing, despite having no Ether in their wallet!
Who pays for the gas?
In order for this all to work, someone needs to run a relayer server and pay for gas. For now, Origin has set up such a server and will be paying gas for transactions directed at our Marketplace contract, though we have taken steps to limit abuse. Longer-term, we hope to incentivize others to setup relayer servers through the use of our token, OGN.
The entire Origin team is excited about how Meta Transactions are already making it easier for early users of our platform to transact with each other. However, our work is far from done. For one, we are working on many upgrades to our platform and DApp to decrease friction for new buyers as well. Secondly, and perhaps more importantly, we are looking forward to continued technical advancements that will make it easier for our partner DApps to similarly improve their user experiences and drive user adoption and retention.
Learn more about Origin: