Cube

What Is ERC-4337? How Ethereum Account Abstraction Works Without Protocol Changes

Learn what ERC-4337 is, how UserOperations, bundlers, EntryPoint, and paymasters enable smart accounts on Ethereum without protocol changes.

What Is ERC-4337? How Ethereum Account Abstraction Works Without Protocol Changes hero image

Introduction

ERC-4337 is an Ethereum standard for account abstraction that works without changing Ethereum’s base transaction protocol. That design choice is the whole story: instead of asking the network to understand a new kind of transaction, ERC-4337 builds a parallel path around the existing one. Users create a UserOperation, specialized actors called bundlers collect those operations, and a singleton [EntryPoint](https://eips.ethereum.org/EIPS/eip-4337) contract validates and executes them on-chain.

Why does that matter? Because the default Ethereum account model is narrow. An externally owned account, or EOA, is controlled by a single signing key and pays gas in ETH through a built-in transaction format. That is simple, but it hard-codes many wallet behaviors into the protocol itself. If you want multisig approval, passkeys, social recovery, batched actions, spending rules, sponsored gas, or onboarding users who do not already hold ETH, the legacy account model makes those features awkward. ERC-4337 exists to move wallet logic out of the protocol and into programmable smart contract accounts.

The puzzle is that Ethereum already had smart contract wallets long before ERC-4337. So why was a new standard needed? The answer is that smart contract wallets could hold assets and execute code, but they were second-class citizens in transaction origination. They still depended on some EOA to submit and pay for transactions. ERC-4337 solves that missing piece. It gives smart accounts a standardized way to authorize actions, pay or delegate gas, and enter blockspace through common infrastructure.

The main thing to keep in mind is this: **ERC-4337 does not abstract away accounts by changing consensus; it abstracts them by standardizing a relay-and-validation pipeline around smart accounts. ** Once that clicks, the rest of the design becomes easier to understand.

What problem does ERC-4337 solve for wallets and onboarding?

Ethereum’s original account model bundles together three separate jobs. The same object is expected to identify the user, authorize actions, and pay for execution. In an EOA, that means possession of one private key is the authorization rule, the transaction format is fixed by protocol, and gas payment happens directly in ETH from that account. This works well for simple ownership, but it makes richer wallet behavior feel like a workaround rather than a first-class feature.

Suppose you want a wallet that can be recovered by trusted guardians, or that requires two approvals above a spending threshold, or that lets a mobile device authenticate with a passkey instead of a secp256k1 private key. Those are not fundamentally hard ideas. They are authorization policies. But under the legacy model, authorization is not programmable at the account layer; the protocol assumes a specific signature scheme and a specific transaction sender model. As a result, wallet builders have to re-create missing features through custom relayers, meta-transaction systems, or application-specific contracts.

That fragmentation is the deeper problem. If every wallet and app invents its own relayer and sponsorship flow, users get inconsistent behavior, developers duplicate infrastructure, and decentralization suffers because transaction inclusion depends on proprietary services. ERC-4337 tries to standardize that missing layer. It says: let accounts be smart contracts with arbitrary validation logic, but give them a common object to sign, a common contract to enter through, and a common actor type that can carry them on-chain.

This is why ERC-4337 is often described as an implementation of account abstraction. The abstraction is not “there are no accounts anymore.” It is that the protocol no longer needs to know the wallet’s internal authorization rule. The wallet can define that rule itself, as long as it can answer the standard validation interface expected by the system.

How does ERC-4337 create a parallel transaction path beside Ethereum transactions?

Origination objectMempoolInclusion actorOn-chain callMain trade-off
Signed transactionRegular mempoolValidators / minersDirect protocol txSimplicity, limited wallet features
UserOperation objectAlt mempool (bundlers)Bundlers then validatorsEntryPoint.handleOpsProgrammability, extra infrastructure
Figure 100.1: ERC-4337 flow vs traditional Ethereum transactions

The cleanest way to understand ERC-4337 is to compare two flows.

In the traditional flow, a user signs an Ethereum transaction, broadcasts it to the regular mempool, and validators include it in a block. The protocol itself checks the sender’s nonce, signature, and fee payment.

In the ERC-4337 flow, a user signs a UserOperation, not a protocol transaction. That UserOperation goes to a separate mempool often called the alt mempool. A bundler listens to that mempool, simulates the operation to see whether it should succeed and pay fees, groups multiple operations together, and then sends a normal Ethereum transaction that calls handleOps on the EntryPoint contract. The chain still only sees a standard transaction. The abstraction happens because the real wallet-specific validation has been moved into contract code and bundler simulation.

That “parallel path” design is the key tradeoff. It is why ERC-4337 could be deployed without a hard fork or consensus change. But it is also why the system depends on extra infrastructure beyond the base protocol. The EIP deliberately leaves several parts only partially specified in practice, including canonical alt-mempool rules, some shared validation restrictions, and reputation systems for handling denial-of-service risks. So ERC-4337 is both elegant and incomplete in a specific way: the on-chain interface is standardized, but some of the ecosystem coordination needed to run it safely is left to implementers.

Still, the benefit is large. Because the chain only needs to process an ordinary transaction to EntryPoint, smart accounts can become usable today rather than waiting for protocol-level account abstraction.

What is a UserOperation and how does it differ from an Ethereum transaction?

Authorization checked byNonce modelAccount creationFee sponsorshipSignature semantics
Protocol (EOA signature)Single incrementing nonceAccount must preexistSender pays in ETHFixed ECDSA semantics
Account contract logicMulti-lane 256-bit nonceinitCode can deploy accountPaymaster or account paysProgrammable signature schemes
Figure 100.2: UserOperation versus Ethereum transaction

A UserOperation is the object an ERC-4337 wallet creates to express what it wants done. The standard is explicit that this is not a transaction, and the distinction matters. A transaction is a protocol-native object whose validation rules are baked into Ethereum clients. A UserOperation is a structured message interpreted by ERC-4337 infrastructure.

It contains familiar fields like a sender, nonce, calldata, and fee caps such as maxFeePerGas and maxPriorityFeePerGas. But it also includes fields that reflect the smart-account model: optional initCode for deploying the account if it does not exist yet, and paymaster-related data if someone else may sponsor the gas. It also includes a signature, but unlike an EOA transaction, the meaning of that signature is not fixed by Ethereum. **The smart account itself defines what counts as a valid signature or authorization proof. ** That could be a standard ECDSA signature, a multisig bundle, a passkey-derived proof, or some other scheme supported by the account contract.

This is a subtle but foundational change. In an EOA, the protocol asks, “Did the holder of this key sign?” In ERC-4337, the system asks the account contract, “Given this operation, do you consider it authorized?” The answer comes from contract logic, not protocol hard-coding.

The nonce model is also more flexible than the legacy single incrementing counter. ERC-4337 uses a semi-abstracted nonce mechanism where a 256-bit nonce can be treated as a 192-bit key plus a 64-bit sequence. EntryPoint exposes getNonce(sender, key) and enforces per-key sequencing. The practical consequence is that a smart account can maintain multiple nonce lanes. That helps with custom replay protection and parallel flows without giving up on-chain uniqueness.

What is the EntryPoint contract and how does it process UserOperations?

If UserOperation is the message format, EntryPoint is the on-chain machine that processes it. ERC-4337 centers the system around a singleton EntryPoint contract. Bundlers send a normal Ethereum transaction calling:

handleOps(PackedUserOperation[] ops, address payable beneficiary)

The beneficiary is where the collected gas fees for the bundle go. This is how bundlers get paid.

EntryPoint has several jobs at once. It validates each operation, coordinates account deployment if necessary, invokes paymaster logic when a sponsor is involved, executes the requested calls, and settles gas accounting and refunds. That sounds like a lot for one contract, but there is a reason to concentrate it. Every smart account and every bundler needs a shared point of agreement about how validation, execution, and payment fit together. EntryPoint is that agreement.

The important invariant is that authorization and fee responsibility must be checked before user execution proceeds. Otherwise the system would be easy to abuse. So EntryPoint separates the validation phase from the actual execution phase. Bundlers are expected to simulate this process off-chain before they include an operation, and the on-chain contract re-enforces it when handleOps runs.

You can think of EntryPoint as a settlement hub for smart-account actions. That analogy helps explain why there is one common gateway rather than every wallet doing something different. Where the analogy fails is that EntryPoint is not just routing messages; it is also enforcing a precise validation and payment discipline for those messages.

How do smart accounts implement validateUserOp to join ERC-4337?

For a wallet to participate in ERC-4337, its account contract must implement a standard validation method:

validateUserOp(PackedUserOperation userOp, bytes32 userOpHash, uint256 missingAccountFunds)

Mechanically, this method is the heart of account abstraction. When EntryPoint asks the account to validate a UserOperation, the account must first verify that the caller is the trusted EntryPoint. Then it must check whether the operation is authorized under the wallet’s own logic. It may also need to provide funds to EntryPoint if the account itself is paying gas. Finally, it returns packed validation data that can include timing bounds such as validUntil and validAfter, and possibly an aggregator address if aggregated signature handling is used.

This interface is what makes smart accounts programmable without making them arbitrary in the wrong way. The account is free to define how authorization works, but it must express the result through a standard hook that EntryPoint and bundlers understand.

A concrete example makes this less abstract. Imagine a Safe-style account with three owners and a rule that any two can approve a transfer. A user wants to swap tokens and then bridge the result in one action. The frontend constructs one UserOperation whose calldata tells the account to execute a batch. Two owners sign the operation hash according to the Safe’s rules. The operation is sent to a bundler. During simulation, EntryPoint calls validateUserOp, which the Safe-compatible module checks by verifying that two valid owners signed. If valid, the account either has enough deposit with EntryPoint to cover gas or a paymaster is attached. Then, when the bundler submits the bundle on-chain, EntryPoint repeats the validation path and, if all checks pass, executes the batch. The user experiences “one action from one wallet,” but under the hood the system has carefully separated authorization, payment, and execution.

This is also why ERC-4337 enables features like passkeys and recovery. Those are not special cases in the standard. They are just different implementations of validateUserOp and related account logic.

Why must bundlers simulate UserOperations off-chain and how do they include them on-chain?

A bundler is the actor that accepts UserOperations, simulates them, and submits bundles to EntryPoint. Without bundlers, ERC-4337 would just be a contract interface with no path to inclusion.

Their job is not merely to forward messages. They are responsible for deciding whether an operation is safe and profitable to include. The EIP requires bundlers to perform multi-stage validation, including sanity checks, per-operation validation, and whole-bundle validation. In practice, bundlers simulate by making a view call into the handleOps flow. If simulation reverts, the bundler must drop the operation.

Why is simulation so central? Because in ERC-4337, a lot of the relevant safety checks live in arbitrary account and paymaster code. A bundler needs confidence that an operation will validate, that it will not become a denial-of-service vector, and that fees will actually be recoverable. Simulation is how that confidence is built before spending real gas on-chain.

This is one of the places where ERC-4337’s elegance meets operational messiness. The standard sketches a decentralized alt mempool and permissionless bundler ecosystem, but exact mempool propagation rules and reputation policies are not fully nailed down in the EIP itself. The ecosystem has had to build compatibility tooling and operational conventions around this gap. The existence of a bundler compatibility test suite, including checks for EntryPoint versions, simulateValidation behavior, bundle construction, and edge-case handling, reflects a real interoperability challenge: if bundlers disagree on validation behavior, then the same UserOperation may be accepted in one place and rejected in another.

There are also node-level practicalities. Reference bundler implementations have noted that enforcing the full storage access and opcode restrictions can depend on tracing capabilities such as [debug_traceCall](https://github.com/eth-infinitism/bundler) with a JavaScript tracer, which some common development nodes do not support. That is not a flaw in the idea, but it is a reminder that “account abstraction without protocol changes” moves complexity into tooling and operations.

How do paymasters let a third party sponsor gas for a UserOperation?

One of ERC-4337’s most important ideas is that the account authorizing an action does not have to be the same entity that pays for it. This is where paymasters come in.

A paymaster is a contract that agrees to sponsor a UserOperation. Under the standard, a paymaster can implement validatePaymasterUserOp to decide whether it will cover the operation’s gas, and postOp to settle after execution. Paymasters keep deposits with EntryPoint, and may also need stakes depending on how the system manages reputation and griefing resistance.

This mechanism is what makes “gasless transactions” possible in a rigorous sense. The transaction is not actually free; somebody pays. But the payer can be an app, a wallet provider, or a service that wants the user to pay indirectly in some ERC-20 token or through an off-chain billing relationship.

Here the real conceptual win is not just UX polish. It is decoupling resource payment from account control. In Ethereum’s legacy model, needing ETH in the same account that signs the transaction is a hard onboarding barrier. With paymasters, a new user can create and use a smart account before acquiring ETH. That makes wallet creation without an EOA or upfront ETH plausible.

At the same time, paymasters are one of the places where complexity and risk accumulate. Their validation logic must be correct, their postOp behavior must be robust, and their economic assumptions must hold under adversarial conditions. Audits of real paymaster implementations have highlighted issues such as postOp reverts, front-running sensitivity, token-behavior assumptions, and interactions with reputation systems. In other words, ERC-4337 makes sponsored gas possible, but it does not make it automatically safe. The mechanism is powerful because it is programmable, and that is also why it requires careful design.

What wallet features and UX improvements does ERC-4337 enable?

The features most often associated with ERC-4337 are not arbitrary add-ons. They follow directly from the architecture.

Because the account is a contract, wallet logic can support custom authentication. A passkey can be accepted if the account contract knows how to verify the proof. A multisig can be accepted if validateUserOp checks the right combination of owners. A recovery flow can be accepted if the account has time delays, guardians, or fallback rules built into its logic.

Because the operation is an object interpreted by wallet code, the account can support batching and one-click flows. A single UserOperation can instruct the account to execute multiple actions in sequence. That is why a wallet can make “approve and swap” or “swap and bridge” feel like one action instead of two separate protocol transactions.

Because the payer can be a paymaster, apps can offer sponsored onboarding or ERC-20 gas payment abstractions. The account no longer needs ETH at the moment of first use.

Because account creation can be folded into the operation through initCode, users can interact through counterfactual deployment patterns. The wallet address can be known and funded before the account contract is actually deployed, and the first UserOperation can create it as part of execution.

This is also why ERC-4337 is not only for new wallet designs. Existing smart-account systems can integrate with it. Safe, for example, provides ERC-4337 compatibility through a module and fallback-handler approach rather than rewriting the core Safe account itself. That is an instructive pattern: ERC-4337 is less about one wallet implementation than about giving many wallet architectures a common way to originate actions.

What are the trade-offs of ERC-4337 versus protocol-level account abstraction?

AspectERC-4337Protocol AA
Gas costHigher due to contract and validation overheadLower, protocol-optimized costs
InfrastructureDepends on bundlers and alt-mempoolsFewer external dependencies
MigrationRequires new accounts or asset movesCan enable in-place upgrades
Security surfaceMore attack surface (accounts, paymasters, bundlers)Smaller surface, simpler semantics
Figure 100.3: ERC-4337 versus protocol-level account abstraction

ERC-4337 solves a hard problem, but it does not repeal tradeoffs.

The first tradeoff is overhead. Because the system works through extra contracts, calldata, validation hooks, and bundler infrastructure, a basic ERC-4337 flow tends to use more gas than a simple native EOA transaction. This is not mysterious. More machinery is involved: validation code runs in contracts, deposits and refunds must be accounted for, and the path through EntryPoint is richer than a direct protocol transaction.

The second tradeoff is infrastructure dependence. ERC-4337 deliberately avoids consensus changes, but that means it depends on higher-layer components that the protocol does not fully enshrine: alt mempools, bundlers, simulation rules, and operational reputation systems. If those are fragmented, centralized, or unavailable, the user experience and censorship-resistance properties can degrade.

The third tradeoff is migration. ERC-4337 does not let existing EOAs magically become smart accounts in place under the original design. Users often need a new account architecture, and that can mean moving assets and activity. Related work such as EIP-7702 aims to soften this by letting EOAs gain smart-account-like behavior and interact with ERC-4337 infrastructure, but that is a neighboring standard rather than ERC-4337 itself.

And the fourth tradeoff is security surface area. A bare EOA has fewer moving parts than a smart account plus paymaster plus bundler ecosystem. That simplicity is costly in features, but it is simple. ERC-4337’s expanded design introduces more places where bugs can appear: account validation code, paymaster logic, bundler simulation behavior, calldata hashing assumptions, and compatibility mismatches across versions. The early UserOperation packing vulnerability in EntryPoint and the example [VerifyingPaymaster](https://www.alchemy.com/blog/erc-4337-useroperation-packing-vulnerability) was a good illustration. The issue was not that account abstraction is impossible; it was that once transaction semantics are implemented partly in contracts and partly in infrastructure, small encoding mistakes can have ecosystem-wide effects.

None of that invalidates ERC-4337. It just means the right comparison is not “EOAs are primitive, therefore anything richer is strictly better in every dimension.” The right comparison is: ERC-4337 buys programmability, onboarding improvements, and wallet flexibility in exchange for added complexity and some extra trust in ecosystem infrastructure.

Which parts of ERC-4337 are standardized and which operational pieces are still evolving?

The durable core of ERC-4337 is fairly clear. UserOperations represent user intent off-chain. Bundlers simulate and package them. EntryPoint is the shared on-chain gateway. Smart accounts expose validateUserOp. Paymasters can sponsor gas. Those pieces define the standard’s center of gravity.

What is less settled is the surrounding operational layer. The EIP leaves important details to be concretized by implementations and ecosystem practice: canonical mempool behavior, exact shared validation rules, fee estimation details such as preVerificationGas, and reputation systems for discouraging abuse. The existence of compatibility suites and reference implementations is evidence of progress, but also evidence that this part of the system is not fully “set and forget.”

That matters when evaluating decentralization claims. ERC-4337 aims for a permissionless mempool and permissionless bundler ecosystem, and that is a meaningful improvement over ad hoc centralized relayers. But whether any given deployment actually achieves robust decentralization depends on who runs bundlers, how operations propagate, and whether wallet providers or infrastructure companies become practical choke points.

So the right way to think about ERC-4337 is as a standardized account-abstraction layer with a solid on-chain core and a still-maturing off-chain operational shell.

Conclusion

ERC-4337 is Ethereum’s practical answer to a simple question: **what if wallets were programmable accounts, not just keys that fit a fixed transaction format? ** It answers by moving authorization logic into smart accounts, representing user intent as UserOperations, routing those operations through bundlers, and settling them through a shared EntryPoint contract.

That design is powerful because it separates things that Ethereum originally tied together: identity, authorization, and gas payment. Once those are separated, multisig, passkeys, recovery, batching, sponsorship, and smoother onboarding stop being awkward exceptions and become normal wallet design choices.

The cost is more machinery. ERC-4337 depends on simulation, bundlers, and ecosystem conventions that are not fully enshrined in the protocol. But its importance is precisely that it made account abstraction usable before Ethereum reached consensus on deeper protocol changes. If you remember one thing tomorrow, remember this: **ERC-4337 gives smart accounts a standard way to act like first-class users on Ethereum, without waiting for Ethereum itself to change its transaction rules. **

How do you secure your crypto setup before trading?

Secure your crypto setup before trading by checking your wallet type, funding path, and the exact trade destination. On Cube Exchange, use your non-custodial MPC account and confirm whether you’re using a standard EOA or an ERC-4337 smart account (and any paymaster sponsorship) before executing trades.

  1. Fund your Cube account with fiat on-ramp or a supported crypto transfer. If you plan to use an ERC-4337 smart account, confirm the account is deployed or that your first operation will include the account's initCode.
  2. Verify the account address and network. Copy the address, confirm the chain (e.g., Mainnet vs testnet), and compare the on-chain address checksum to the expected address; don’t rely on copied labels alone.
  3. If using sponsored gas, check the paymaster address and preVerificationGas estimate in the UserOperation or UI, or otherwise ensure the account has sufficient ETH for gas before submitting a trade.
  4. Open the market or transfer flow, choose an order type (limit for price control, market for immediate fill), review estimated fees, slippage, and the destination contract/address, then submit.

Frequently Asked Questions

Does ERC-4337 require a hard fork or changes to Ethereum’s base transaction protocol?
+
No — ERC-4337 was designed to work without any consensus-layer or transaction-format change; it builds a parallel flow using off-chain UserOperations, permissionless bundlers, and an on-chain EntryPoint contract so the chain only ever sees a normal Ethereum transaction.
How do bundlers discover, validate, and include UserOperations into blocks?
+
Bundlers listen to a separate “alt” mempool of UserOperations, simulate each operation (including calling EntryPoint’s simulation hooks) to ensure it will validate and be profitable, and then submit a single Ethereum transaction that calls EntryPoint.handleOps to include one or many UserOperations on-chain.
Who actually pays gas for an ERC-4337 operation and how do paymasters work?
+
Any account can pay or delegate payment: a paymaster contract can sponsor a UserOperation by implementing validatePaymasterUserOp and postOp, keeping deposits with EntryPoint and settling after execution so the account that authorizes the action need not hold ETH at the time of use.
Is using ERC-4337 cheaper or more expensive in gas than a regular EOA transaction?
+
Yes — an ERC-4337 flow typically consumes more gas than a simple EOA transaction because it runs extra on-chain validation and bookkeeping (EntryPoint calls, contract validation, deposits/refunds and optional account deployment), so there is measurable overhead compared with native transactions.
Does account abstraction via ERC-4337 make wallets less secure because there are more components?
+
ERC-4337 increases the system’s attack surface: moving authorization into contracts, adding paymasters and bundlers, and relying on off-chain simulation introduces more places for bugs or misconfiguration (the article cites an early UserOperation packing vulnerability as an example), so careful design, audits and operational hygiene are required.
Can my existing EOA be used as an ERC-4337 smart account without moving funds or creating a new contract?
+
Not automatically — existing EOAs do not magically convert into smart accounts under ERC-4337; migration typically requires deploying or funding a smart account and moving assets or using companion proposals like EIP‑7702 to soften transitions, so some user migration work is generally required.
Is there one EntryPoint contract everyone uses, and does that create centralization risks?
+
EntryPoint is conceived as a shared (singleton) on-chain gateway that all bundlers and smart accounts agree on, but some implementations and repositories rely on team-deployed singleton addresses and that operational choice carries centralization implications in practice.
Are mempool, bundler validation rules and reputation systems fully standardized by ERC-4337?
+
The EIP standardizes the on-chain core but intentionally leaves several operational pieces underspecified — notably canonical alt-mempool propagation rules, exact shared validation/opcode/storage restrictions, and reputation/staking protocols for bundlers — so those details are being defined by implementations and ecosystem convention rather than the EIP itself.
Do bundlers need special node tracing APIs or tooling to run safely in production?
+
Production-grade bundlers often rely on node debugging/tracing features (for example debug_traceCall with a JavaScript tracer) to enforce storage/opcode restrictions during simulation; nodes lacking those APIs force bundlers to run with weaker checks (e.g., an --unsafe flag), per the reference bundler implementation notes.
How does ERC-4337’s nonce model differ from the legacy single-counter nonce?
+
ERC-4337 replaces the legacy single incrementing nonce with a flexible 256-bit nonce that can be split (commonly a 192-bit key plus a 64-bit sequence) and exposes per-key sequencing via EntryPoint.getNonce(sender, key), enabling multiple nonce lanes and parallel flows for a single smart account.

Your Trades, Your Crypto