Skip to main content

Why Account Abstraction

Traditionally, there are two approaches to managing Web3 wallets:

  • Use custodial wallet providers such as Fireblocks and Wyre to create and manage wallets through APIs.

  • Ask users to install non-custodial wallets such as MetaMask, or generate wallets for them with solutions like Web3Auth and Magic.

The tradeoff here is of UX vs decentralization.

Custodial Wallets: amazing UX, terrible decentralization

With a custodial wallet provider, you are ultimately managing wallets for your users, so you can easily hide the complexity of Web3 and create an amazing UX.

There are many downsides, however:

  • You are responsible for handling your users's assets.
  • Your users don't truly own their assets.
  • Your users can't use their assets with other DApps (no interoperability).

Non-custodial wallets: truly Web3, terrible UX

On the other hand, you can help your users manage their own assets, either through their own wallets or through services like Web3Auth/Magic. By doing so, your users truly own their assets and can use the assets with the rest of Web3.

The problems however are:

  • Your users may lose keys and therefore all their assets.
  • Your users will suffer poor UX, since they have to deal with gas, confirmations, etc.

The Third Way: Account Abstraction Wallets

What if you didn't have to choose between good UX and decentralization? What if there was a third way?

Account abstraction is the ultimate wallet solution. With AA, you can create non-custodial wallets for users that are as easy to use as custodial wallets, achieving the best of both worlds.

At its core, AA enables your users to use smart contract wallets. While smart contract wallets have been around for a while, the breakthrough of AA is that it made smart contract wallets accessible to the average user, by allowing transactions to be sent directly from the smart contract wallet (whereas before transactions would have to be relayed).

Since smart contract wallets are programmable, it can deal with gas and transactions in highly flexible ways, which is ultimately why you can build amazing UX with account abstraction.

Here's a breakdown of how the wallet solutions compare:

Self-custody WalletsCustodial WalletsZeroDev Wallets
Who owns the wallet?UserAppUser
How is the wallet secured?Seed phrasesWeb2 loginsFlexible (Web2 logins, seed phrases, etc.)
Does the user need to install anything?YesNoNo
Who pays the gas?UserAppApp or user
What tokens can be used for gas?ETHETHETH or ERC20 tokens
Bundle multiple transactions as one?NoNoYes
Programmable security policies?NoNoYes
Skip confirmations?NoYes, but can be abused by the appYes, and cannot be abused by the app
Send transactions for users?NoYes, but can be abused by the appYes, and cannot be abused by the app
Interact with smart contracts?YesYes, but only through APIYes
Use the wallet on other DApps?YesNoYes
Progressively onboard to self-custody wallets?N/ANoYes