# EIP-4337: A Deep Dive Into Smarter Ethereum Wallets
## Introduction
As we all Crypto-fellows know from past experiences, Ethereum wallets have long been limited by traditional account models. Ever since the conception of Bitcoin and the dawn of crypto, we have been using EOAs (Externally Owned Accounts) to handle our transactions, and the sole responsability for our funds has rested in our hands, therefore opening the door to human errors and mistakes. It's very often that we hear of people who have lost access to their funds as the result of a simple mistake like forgetting their secret recovery phrase or sending some funds to the wrong destination. Sad to say, those kind of mistakes have discouraged some people from engaging in crypto since most see it as being risky, but there exists a solution, a proposal that promises to solve all of these problems and make the crypto world a safer and more accessible place for people of all knowledge-levels. We've come to know that proposal as **EIP-4337**, an innovative proposal that introduces account abstraction without altering Ethereum’s consensus base layer. This in-depth article aims to explain how EIP-4337 works, its potential benefits, and its promise of reshaping the Ethereum ecosystem in the right direction.
## What is EIP-4337?
EIP-4337, also known as the ERC-4337 standard, is a proposed Ethereum improvement proposal that aims to introduce **account abstraction** to the Ethereum network. The basic principle of account abstraction allows smart contracts to act as wallets and execute transactions on behalf of users, therefore simplifying most of what we know today related to transactions on the Ethereum blockchain. This allows users to interact with the Ethereum network without the need for their own private keys or the need to hold Ether for gas fees.
## How Does EIP-4337 Work?
There are several steps that enable account abstraction on the Ethereum Protocol. Those steps boil down to individual smart contracts that work together in tandem with other contracts, therefore stream-lining the process and functionality. Below I'll outline the most critical and main contracts that need to be up and running in order for ERC-4337 to function properly and achieve its intended use.
1. **EntryPoint Contract**: The core validator and executor. This contract handles the verification and execution logic for transactions.
2. **UserOperation**: Represents abstracted transactions. UserOperations are pseudo-transaction objects that are used to execute transactions with contract accounts. These are created by the dapp. Wallets should be able to translate regular transactions into UserOperations so dapps' frontends don't need to change anything to support ERC-4337
3. **Bundlers**: Collect and execute UserOperations. Bundlers are actors that package UserOperations from a mempool and send them to the EntryPoint contract on the blockchain.
4. **Account Contract**: The smart contract wallet of a user. Wallet developers are required to implement at least two custom functions - one to verify signatures, and another to process transactions.
5. **Paymasters**: Allow gas sponsorship or payment in tokens. Paymasters are optional smart contract accounts that can sponsor gas fees for Account Contracts, or allow their owners to pay for those fees with ERC-20 tokens instead of ETH.
## Smart Contracts Explained
### 1. EntryPoint Contract
The EntryPoint contract is the centerpiece of ERC-4337. It acts as a coordinator for validating and executing transactions submitted by users.
### Role of EntryPoint:
- **Validation**: Verifies the authenticity and validity of a transaction (UserOperation).
- **Execution**: Executes the user-defined logic contained in the transaction if it passes validation.
- **Gas Management**: Ensures that gas fees are properly paid by the user or covered by a Paymaster.
- **Replay Protection**: Ensures that each transaction is unique to prevent replay attacks.
### Key Functions:
#### `handleOps()`
- Takes a batch of `UserOperations` and processes them.
- Performs validation, executes the operations, and manages gas refunds.
#### `simulateValidation()`
- Allows bundlers to simulate validation off-chain before submitting a transaction to save gas.
#### Reentrancy Protection
- Ensures that malicious contracts cannot exploit the transaction flow.
### How It Works:
1. When a user wants to execute a transaction, they package it into a `UserOperation` and send it to a bundler.
2. The bundler submits a batch of these `UserOperations` to the EntryPoint.
3. The EntryPoint validates the `UserOperation`, checks gas requirements, and executes the logic.
---
### 2. UserOperations
The `UserOperation` is a data structure introduced in ERC-4337 to encapsulate a transaction in the account abstraction model. It serves as the equivalent of a traditional transaction in Ethereum.
### Structure of UserOperation:
A `UserOperation` contains the following fields:
- **`sender`**: Address of the smart contract wallet initiating the operation.
- **`nonce`**: Ensures each operation is unique and prevents replay attacks.
- **`initCode`**: Initialization code for deploying the wallet contract if it doesn’t exist yet.
- **`callData`**: The data to be executed by the smart contract wallet.
- **`callGasLimit`**: The maximum gas allowed for the execution of the operation.
- **`verificationGasLimit`**: The maximum gas allowed for validation.
- **`preVerificationGas`**: Gas overhead for preparing and validating the operation.
- **`maxFeePerGas` and `maxPriorityFeePerGas`**: Gas price parameters.
- **`paymasterAndData`**: Information about a Paymaster covering gas fees, if applicable.
- **`signature`**: Cryptographic signature to authenticate the operation.
### How It Works:
1. The user creates a `UserOperation` and signs it using their smart contract wallet’s custom logic.
2. The `UserOperation` is submitted to a bundler, which adds it to a batch.
3. The EntryPoint processes the `UserOperation` and executes the `callData`.
### Advantages of UserOperations:
- **Customizable Validation**: Smart contract wallets can define their own rules for transaction validation (e.g., multi-sig, biometrics).
- **Bundled Transactions**: Multiple operations can be executed together to save gas.
- **Gas Flexibility**: The `paymasterAndData` field allows third parties (Paymasters) to sponsor gas.
---
### 3. Paymasters
A **Paymaster** is an optional smart contract in the ERC-4337 architecture that enables users to offload gas fee payments to third parties or pay gas in tokens other than ETH.
### Role of Paymasters:
- **Gas Sponsorship**: A Paymaster can cover gas costs for a user, enabling gasless transactions.
- **Token Payments**: Allows users to pay gas fees in ERC-20 tokens instead of ETH.
- **Verification**: Ensures that only valid and authorized transactions are sponsored.
### How Paymasters Work:
1. The user specifies a Paymaster in the `paymasterAndData` field of the `UserOperation`.
2. The EntryPoint contacts the Paymaster during the validation phase.
3. The Paymaster performs custom checks (e.g., ensuring the user has sufficient ERC-20 tokens) and approves or rejects the sponsorship.
4. If approved, the Paymaster settles the gas fees on behalf of the user after the transaction is executed.
### Key Functions:
#### `validatePaymasterUserOp()`
- Validates the Paymaster’s ability to sponsor the `UserOperation`.
- Ensures the transaction complies with the Paymaster’s rules.
#### Gas Settlement Logic
- The Paymaster reimburses the EntryPoint for the gas consumed during the transaction.
#### Advantages of Paymasters:
- **Improved UX**: Users can execute transactions without holding ETH, making it easier for newcomers to interact with dApps.
- **Token Economics**: Projects can incentivize users by sponsoring gas fees or enabling token-based payments.
## Conclusion
EIP-4337 is a critical step toward more user-friendly blockchain interactions, enabling programmable wallets and advanced features without altering Ethereum’s consensus layer.
## References and Further Reading
- [EIP-4337 Proposal](https://eips.ethereum.org/EIPS/eip-4337)
- [Ethereum Documentation](https://ethereum.org)