Welcome to the third installment of Complex EIPs, simply explained. In this article, we’ll cover an EIP that has started to revolutionize how we think about web3 - EIP-4337.
Note: In all articles, including this one, we’ll start with TL;DR and then dive into the details of things.
If you’re somehow related to the development world of web3, you have probably heard about account abstraction. At a technical level, it really means that a smart contract is created for an end user, and this smart contract becomes the primary way of interacting with other smart contracts (instead of the standard wallet, i.e. externally owned account, or EOA).
This allows for a few magical things. The end user can take more complex actions such as having someone else pay gas fees on their behalf; they can pay for their transactions in USD; or even designate a group of trusted guardians to help them recover their wallet. The beauty too is that the end-user doesn't even know they are using account abstraction! They should just see more functionality that wasn’t possible before.
The longer version
Are you still here? Ok, I guess we can continue. Let’s cover a few key things:
How we got here: we want to do more with wallets!
At its core, Ethereum has two types of accounts - (1) smart contracts and (2) externally owned accounts.
Before this update, Users with EOAs needed to initiate transactions themselves. They had to manage gas payments directly, which could be confusing or inconvenient, especially for new or non-technical users. Smart Contract Wallets were more complex to set up. As an example, they had to rely on relayers to handle payments - but we don’t need to get into that rabbit hole.
What to do: make everything a smart contract
What are the use cases?
- Sponsor gas fees for users
- Bundle transactions
- Transfer all assets in a single function
- Transfer ownership of the wallet more easily
- Pay for transactions in USDC, or even credit cards - Visa, for instance, wrote a recent proof of concept for paying with Visa.
What else should I know?
You still need a signer
Account abstraction doesn’t replace the need for a private/public key pair that controls the account. That means you still need something to sign and own the smart contract.
That can be a 3rd party wallet such as Metamask, or an embedded wallet such as Dynamic’s Embedded Wallet, Magic.link, web3auth, Coinbase WaaS, Portal, Turnkey, etc. If you’re choosing an account abstraction provider, you need to check what key management solution they use.
For instance, Biconomy uses web3auth and Particle Network, and Alchemy and ZeroDev let you choose a provider and support multiple options, including Dynamic.
These are early days
When using an account abstraction wallet, you’re essentially deploying an immutable contract to the blockchain (meaning the code cannot be altered). While this creates trust and predictability, it can present challenges if a bug is found in the contract’s code. Developers need to exercise a high degree of diligence if they are to build it themselves - and frankly, diligence with a vendor you choose, is smart too ;)
There are lots of interesting initiatives about adding modules to AA wallets, such as ERC-6900, but it's still very early. As an example, Fireblocks recently found a vulnerability in Unipass's AA implementation, as described here.
There are gas fees to deploy a contract
Because you’re deploying a smart contract to the blockchain, you need to pay gas fees. Those can be really high on Ethereum, or lower on L2s such as Optimism or side chains such as Polygon. It’s something to take into account. Here again there are ways around this, such as counterfactual addresses that let you defer deployment until a first action is taken on the contract, but they come with their own challenges, as described in our recent talk.
Side note - a chain with AA built-in
One interesting side note that’s important to mention is that some chains provide account abstraction functionality as a built-in feature. In Starkware, for instance, all accounts are smart contracts, meaning any wallet is by definition a smart contract wallet. This opens the door for unique providers such as Argent, which are able to offer simple embedded smart wallets.
Dynamic and Account Abstraction
You can use our joint solution with ZeroDev and Alchemy to attach a smart contract wallet to your embedded wallet, leveraging EIP-4337 (Account abstraction). Make crypto complexities disappear and have UX that feels simple and secure for all of your users. To start integrating yourself, go to our docs.