the standard · since September 2021
// standard · proposed sept 2021 · mainnet mar 2023 · ready

What is ERC-4337?

Account abstraction, layered above the protocol — and the cost of that choice.

ERC-4337 ·EIP-4337 ·by Vitalik Buterin + Yoav Weiss + Dror Tirosh + Shahaf Nacson + Alex Forshtat + Kristof Gazso + Tjaden Hess

updated · 9 min read · by ercs-solved maintainers

ERC-4337 is the standard that gave Ethereum account abstraction without changing the protocol — a phrase taken directly from the title of the lead author's own 2021 introduction post. Smart-contract accounts get to behave like first-class transactors via a parallel mempool of UserOperations, a singleton EntryPoint contract, bundlers, and paymasters; the whole machinery sits on top of an Ethereum protocol that was built around externally-owned accounts. The standard works, it's mainnet-live since March 2023, and its own authors have spent the years since walking it toward the protocol layer. This page walks the history, the moving parts, the tradeoffs the spec's own authors have acknowledged, and the LUKSO LSP stack the author of ERC-20 designed as a substrate-level alternative.

on this page
  1. What is ERC-4337?
  2. At a glance
  3. Origin story
  4. The spec
  5. What's broken
  6. parallel mempool
  7. Worse trace and explorer surface
  8. Per-account validator modules, no shared permission vocabulary
  9. Paymaster trust as a separate failure surface
  10. Account abstraction sits above EVM, not in it
  11. LUKSO alternative
  12. ERC-4337 vs LSP0+LSP6+LSP20+LSP25
  13. When to use which
  14. FAQ
  15. Sources
  16. Keep reading
at a glance

The standard, in one card.

Standard
ERC-4337 / EIP-4337
Mainnet activation
1 March 2023 (EntryPoint v0.6)
Required components
EntryPoint + UserOperation + bundler (+ paymaster)
how the standard came to be

The origin story.#

Account abstraction was on the table for years before ERC-4337. EIP-86 (Vitalik Buterin, 2017) proposed protocol-level AA via a special precompile. EIP-2938 (2020) re-attempted it with a new transaction type. EIP-3074 (2021) introduced AUTH/AUTHCALL opcodes for invoker contracts. None of them shipped — each required consensus-layer changes that the network was not ready to ratify.

Meanwhile, a parallel meta-transaction track had been running since 2018. The team at TabookeyYoav Weiss, Dror Tirosh, and Alex Forshtat — published ERC-1613 (Gas Station Network v1) as the first standardized "user signs off-chain, relayer pays gas" proposal. Two years later, the standardized successor ERC-2771 (Secure Protocol for Native Meta Transactions) was opened by Alex Forshtat in July 2020 and finalized in August 2020 with eleven co-authors — including the same Tabookey core team plus Ronan Sandford, Patrick McCorry, Hadrien Croubois, Nicolas Venturo, Gavin John, and (notably) Fabian Vogelsteller. ERC-2771 standardized the trusted-forwarder pattern: contracts opt in to recover the original signer via _msgSender() from the last 20 bytes of calldata. It became the substrate for OpenGSN v2, OpenZeppelin Defender Relayer, Gelato, and Biconomy — and its Security Considerations section is candid about the load-bearing trust assumption: "A malicious forwarder may forge the value of _msgSender() and effectively send transactions from any address."

The two threads — protocol-level account abstraction (86 → 2938 → 3074) and contract-level meta transactions (1613 → 2771) — converged when Vitalik proposed ERC-4337 in late 2021. The Tabookey/OpenGSN team brought their meta-transaction experience directly: Weiss, Tirosh, and Forshtat appear on all three (GSN v1, ERC-2771, ERC-4337). The bundler is GSN's relay server, generalized. The EntryPoint is GSN's RelayHub, generalized. The paymaster is what gas sponsorship looks like when you bake it into the standard instead of leaving it to integrators. ERC-4337 is the meta-transaction lineage absorbing the account-abstraction ambition.

On 29 September 2021, Vitalik Buterin opened GitHub issue #4337 with co-authors Yoav Weiss (Ethereum Foundation account-abstraction lead), Dror Tirosh, Shahaf Nacson, Alex Forshtat, Kristof Gazso, and Tjaden Hess. Vitalik also wrote a Medium post on Infinitism framing the design — and the title itself was the strongest tell about what was being chosen:

ERC-4337: Account Abstraction Without Ethereum Protocol Changes.

That's the lead author of the standard telling the audience, in plain text, that this is a workaround chosen specifically to avoid a hard fork. The EIP-4337 Abstract is just as direct:

Historically, users could interact with Ethereum only by sending transactions from special accounts controlled by private keys, with transaction validation entirely enforced by fixed protocol rules. Account abstraction is an alternative model that allows each account to supply its own validation logic executed as smart contract code, while the protocol provides only minimal constraints.

The mechanism: a separate mempool of UserOperation envelopes; a singleton EntryPoint contract that everyone agrees on; bundlers that watch the alt-mempool, validate UserOps, and pack them into a single handleOps transaction on-chain; optional paymasters that sponsor gas from their own deposits. The smart account is a contract that implements validateUserOp; the EntryPoint calls it before executing.

EntryPoint v0.6 deployed to Ethereum mainnet on 1 March 2023, after audits by OpenZeppelin and Certora. v0.7 shipped in 2024 with improved paymaster and aggregator interfaces. v0.8 deployed in May 2025 — and that timing is significant, because alongside it Ethereum's Pectra hard fork activated EIP-7702, a protocol-level primitive that lets externally-owned accounts delegate execution to contract code in a single transaction.

EIP-7702 is co-authored by Vitalik Buterin — the lead author of ERC-4337. Four years after framing AA as something to ship without protocol changes, he was co-signing the protocol-level change. The EIP-7702 Motivation section is candid about the gap it was patching: existing EOAs cannot become ERC-4337 smart accounts without losing their address history, their ENS records, their reputation, and their airdrop eligibility. Six months earlier, at Devcon SEA in November 2024, Yoav Weiss had laid out a roadmap toward what he called a "modular native AA approach for L1 and L2." The spec's own authors and maintainers, in their own words, were walking ERC-4337 toward the substrate.

The rest of this page is about what that journey reveals — the tradeoffs ERC-4337 made deliberately to avoid a fork, and how a different design choice (account abstraction as substrate, not layer) plays out on LUKSO.

  1. Nov 2015 Vitalik Buterin and Fabian Vogelsteller co-author ERC-20 — the moment the two paths first crossed.
  2. 2017 Vogelsteller proposes ERC-725 (smart-contract identity) and co-founds LUKSO with Marjorie Hernandez.
  3. 2017–20 EIP-86, EIP-2938, EIP-3074 explore protocol-level account-abstraction approaches. None reach broad consensus; each requires consensus-layer changes.
  4. Nov 2018 Tabookey (Yoav Weiss, Dror Tirosh, Alex Forshtat) publish ERC-1613 (Gas Station Network v1) — the first standardised meta-transaction proposal.
  5. Aug 2020 ERC-2771 (Secure Protocol for Native Meta Transactions) finalised by an 11-author group including the Tabookey team and Fabian Vogelsteller — trusted-forwarder meta transactions become the standard.
  6. Sept 2021 Vitalik Buterin proposes ERC-4337 with the Tabookey core team (Weiss, Tirosh, Forshtat) plus Nacson, Gazso, Hess — explicitly framed as 'account abstraction without Ethereum protocol changes'. The meta-transaction lineage absorbs the account-abstraction ambition.
  7. Mar 2023 ERC-4337 EntryPoint v0.6 deploys to Ethereum mainnet after audits by OpenZeppelin and Certora.
  8. 2023 LUKSO mainnet launches with LSP0 + LSP6 + LSP20 + LSP25 as the native account stack — plus LSP1 receiver hooks, LSP3 identity, LSP11 social recovery, LSP14 ownership lifecycle, LSP17 extensions. A coherent system, not a patch stack.
  9. 2024 EntryPoint v0.7 ships with improved paymaster and aggregator interfaces. At Devcon SEA in November, Yoav Weiss outlines a roadmap toward 'modular native AA approach for L1 and L2' — the spec's own lead acknowledging the layered model's limits.
  10. May 2025 Pectra hard fork lands EIP-7702 (co-authored by Vitalik): EOAs gain protocol-level ability to delegate execution to contract code. EntryPoint v0.8 deploys alongside, with native EIP-7702 integration. The residual ECDSA root key remains.
  11. 2025 → EIP-7851 (proposed) aims to let a 7702-delegated EOA permanently disable its residual ECDSA authority — still a draft as of mid-2026. The Ethereum account model continues evolving via layered patches; LUKSO continues to ship account abstraction as a coherent substrate-level system.
the spec, end to end

What ERC-4337 actually is.#

ERC-4337 EIP-4337 interface solidity
// ─── EntryPoint (singleton) ──────────────────────────────────────────
function handleOps(PackedUserOperation[] calldata ops, address payable beneficiary) external;
function simulateHandleOp(PackedUserOperation calldata op, address target, bytes calldata targetCallData)
  external returns (uint256 preOpGas, uint256 paid, uint256 validationData, uint256 targetSuccess, bytes memory targetResult);
function depositTo(address account)  external payable;
function withdrawTo(address payable withdrawAddress, uint256 amount) external;

// ─── IAccount (each smart account implements) ────────────────────────
function validateUserOp(
  PackedUserOperation calldata userOp,
  bytes32 userOpHash,
  uint256 missingAccountFunds
) external returns (uint256 validationData);

// ─── IPaymaster (optional, sponsors gas) ─────────────────────────────
function validatePaymasterUserOp(
  PackedUserOperation calldata userOp,
  bytes32 userOpHash,
  uint256 maxCost
) external returns (bytes memory context, uint256 validationData);

function postOp(
  PostOpMode mode,
  bytes calldata context,
  uint256 actualGasCost,
  uint256 actualUserOpFeePerGas
) external;

// ─── PackedUserOperation (the envelope) ──────────────────────────────
struct PackedUserOperation {
  address sender;
  uint256 nonce;
  bytes   initCode;
  bytes   callData;
  bytes32 accountGasLimits;     // verificationGasLimit + callGasLimit
  uint256 preVerificationGas;
  bytes32 gasFees;              // maxPriorityFeePerGas + maxFeePerGas
  bytes   paymasterAndData;
  bytes   signature;
}
ERC-4337 interface, grouped
entry: handleOps · simulateHandleOp · depositTo · withdrawTo
account: validateUserOp · executeUserOp
paymaster: validatePaymasterUserOp · postOp
userop: sender · nonce · initCode · callData · accountGasLimits · signature

The mental model: a user signs a UserOperation; it lands in a separate alt-mempool; a bundler picks it up, validates it (by simulating validateUserOp on the account and validatePaymasterUserOp on any paymaster), packs valid UserOps into a single transaction calling EntryPoint.handleOps(), and submits on-chain. The EntryPoint runs validation again on-chain, calls into the smart account to execute the user's actual callData, and (if a paymaster was involved) calls postOp for sponsorship accounting.

The full surface is much larger than the few signatures shown above: 30+ methods across IEntryPoint, IAccount, IPaymaster, IAggregator, with several version-specific shapes (the PackedUserOperation struct above is the v0.7+ form). Audit and tooling complexity sits on the size of that surface. Canonical specification: eips.ethereum.org/EIPS/eip-4337.

the integration tax

What's broken about ERC-4337.#

Five tradeoffs the layered approach pays for. The spec's authors made these calls deliberately to avoid a hard fork — none of this is a hidden bug. But each one is a real cost, and the existence of EIP-7702 is the authors' own implicit acknowledgement that some of these gaps eventually needed a protocol-level patch.

  1. The parallel mempool.#

    UserOperations are not transactions. They live in a separate alt-mempool, get packed by bundlers, and route through the singleton EntryPoint before reaching the account. Most product teams don't want to operate or rent any of that, and the bundler position carries censorship, reordering, and MEV-extraction risk that the L1 mempool's broader participant set doesn't share. The bundler tax is real: every UserOp pays for the bundler's submission cost on top of the gas it consumes.

    ERC-4337 handleOps(UserOperation[], beneficiary)
    separate mempool bundler tax centralization risk
    LSP0 + LSP25 executeRelayCall(sig, nonce, validity, payload)
    account is the entrypoint no bundler no parallel mempool
    workarounds tried
    • Safe + relayer
    • custodial backends
    • EIP-2771 forwarders
    • EIP-7702 delegation (Pectra 2025)

    read the deep-dive

  2. Worse trace and explorer surface.#

    Block explorers show handleOps, not the user's actual function call. Tracing routes through EntryPoint before reaching the account, and decoding the UserOperation envelope requires explorer support that every chain has to bolt on. Debugging happens on a separate plane from the normal transaction flow — the gas accounting, the validation errors, and the call trace all sit one indirection level removed from the work the user wanted done.

    ERC-4337 handleOps → EntryPoint → account → target
    extra hops non-standard decode
    LSP0 controller → account → target
    direct call native trace
    workarounds tried
    • userop.org explorers
    • Tenderly UserOp decoders
    • per-bundler dashboards
  3. Per-account validator modules, no shared permission vocabulary.#

    ERC-4337 deliberately keeps the spec small: validateUserOp is one function each account implements however it wants. The cost is that 'smart accounts' don't share a permission vocabulary — each implementation (Safe, Kernel, Biconomy, Alchemy LightAccount, Soul Wallet, etc.) invents its own validator shape. Migration between account implementations is non-trivial; permission audits are per-account, not per-standard; and tooling has to special-case each wallet.

    ERC-4337 validateUserOp() — per-account validator
    non-standard wallet-specific
    LSP6 Key Manager (standardized permission bitfield)
    AllowedCalls AllowedERC725YDataKeys uniform
    workarounds tried
    • ERC-7579 modular accounts (under development)
    • wallet-specific SDKs
  4. Paymaster trust as a separate failure surface.#

    Gas sponsorship requires a paymaster contract that the user and the bundler must both trust. Paymasters have their own ETH deposit at the EntryPoint, their own validation function (validatePaymasterUserOp), their own postOp accounting, and their own DoS attack surface. Wallets ship per-paymaster integrations, and a single bad paymaster can poison a bundler's queue. The two-step (validate + postOp) shape adds a second failure point on every sponsored UserOp.

    ERC-4337 Paymaster.validatePaymasterUserOp + postOp
    separate contract two-step trust
    LSP25 account.executeRelayCall(...)
    one function on the account no paymaster contract
    workarounds tried
    • allowlisted paymaster relationships
    • paymaster reputation services
    • bundler-side filtering
  5. Account abstraction sits above EVM, not in it.#

    The whole architecture exists because Ethereum's protocol couldn't change. Vitalik's own 2021 Medium post on Infinitism framed ERC-4337 as 'account abstraction *without* Ethereum protocol changes' — the title itself is a candid acknowledgement of the design constraint. EIP-7702 (Pectra, May 2025), co-authored by Vitalik, is the eventual patch: its Motivation section cites that existing EOAs can't migrate to ERC-4337 smart accounts without losing address history, ENS, reputation, and airdrop eligibility. The two standards are now framed as complementary — but the existence of EIP-7702 is the spec's own authors acknowledging that account-abstraction primitives belong closer to the substrate than a 2021 alt-mempool design could put them.

    ERC-4337 AA layered over EOA-anchored protocol
    no-fork workaround layered
    LSP0 smart contract account as the substrate
    native no parallel infrastructure
    workarounds tried
    • EIP-7702 EOA delegation (Pectra, May 2025)
    • EntryPoint v0.8 with 7702 integration
the LUKSO alternative

LUKSO designed it differently.#

The two co-authors of ERC-20 ended up answering the same account-abstraction question with two structurally different stacks. The divergence is deeper than ERC-4337 alone — it begins with ERC-2771, runs through the LSP suite as a coherent system, and now meets Ethereum's Pectra upgrade where the two approaches finally have to be compared in production.

In November 2015, Vitalik Buterin and Fabian Vogelsteller co-authored ERC-20 — the moment their paths first crossed in the historical record. Five years later, they were on the ERC-2771 author list together as well: Vogelsteller was co-author #10 of the Secure Protocol for Native Meta Transactions, alongside the Tabookey/OpenGSN team (Weiss, Tirosh, Forshtat) who would go on to co-author ERC-4337. He saw the trusted-forwarder pattern, the relayer-infrastructure burden, and the per-contract _msgSender() opt-in cost from inside the standard. He saw what GSN v1 had cost integrators, and he could see what ERC-4337 was about to repeat at a larger scale.

The lesson he took from being inside both ERC-20 and ERC-2771: ERCs ship minimum interfaces deliberately, and the cost shows up as half-baked solutions stacked on top of each other. ERC-20 left receivers and metadata to the application layer; ERC-2771 left permissions and relayer infrastructure to integrators; ERC-4337 added bundlers and paymasters; EIP-7702 (Pectra, May 2025) patched the EOA-can't-become-a-smart-account gap from the protocol side; EIP-7851 — still a draft as of mid-2026 — aims to let a 7702-delegated EOA permanently disable its residual ECDSA authority. Each one fixes a real problem the previous one left open. None of them was designed to compose with the others.

So Vogelsteller and the LUKSO team designed LSPs as a coherent system from the bottom up. The account stack is four standards working together by design, not five layered patches catching each other's gaps:

  • LSP0 ERC-725 Account — the contract account itself. It owns assets, executes calls, holds typed key/value storage. There is no EntryPoint singleton; the account contract IS the entry point. msg.sender at downstream targets is the account, natively.
  • LSP6 Key Manager — the standardized permission vocabulary. AllowedCalls, AllowedStandards, AllowedERC725YDataKeys, value caps, granular bitfields, instant revocation. The piece that ERC-4337 and EIP-7702 deliberately leave to each wallet implementation, here as a shared standard every controller, app, and relayer can read.
  • LSP20 Call Verification — inline call verification at the account contract layer. The equivalent of validateUserOp, but on the normal call path rather than through an EntryPoint hop.
  • LSP25 Execute Relay Call — sponsored execution as a function on the account itself. A controller signs, a relayer submits, LSP6 permissions still gate what the signing controller may do. No bundler, no paymaster contract, no parallel mempool, no ERC2771Context mixin to inherit.

Pectra shipped. Why is the LSP stack still the better answer?

Ethereum's Pectra hard fork (May 2025) is real progress. EIP-7702 gives existing EOAs the ability to delegate execution to contract code in a single transaction, and EntryPoint v0.8 plugs that delegation into the ERC-4337 ecosystem natively. An EOA can now batch transactions, accept passkey signatures, and use gas sponsorship without redeploying. The major Pectra advantage over LUKSO is exactly that: it upgrades an existing Ethereum address without moving its assets, approvals, history, or identity to a newly deployed contract account.

That said — and this is the substantive comparison — even with Pectra, the LSP stack covers several things 7702 + 4337 don't, or covers them less coherently:

1. Authoritative recovery and key revocation. An EIP-7702 EOA gains smart-account semantics by delegating execution to contract code, but the original secp256k1 key never goes away. An attacker who compromises the original key can sign another 7702 authorization to replace the delegation and reset recovery. EIP-7851 is a draft that aims to let a 7702 account permanently disable its residual ECDSA authority — but as of mid-2026 it's still a draft, not part of Pectra. A Universal Profile has no hidden root key above its Key Manager; recovery is authoritative because there's nothing the recovered configuration can be overridden by. LSP11 standardises social recovery with guardians and a configurable voting threshold; LSP6 governs the permission to add, remove, or replace controllers.

2. A standardised permission vocabulary across the ecosystem. ERC-4337 delegates validation policy to each wallet implementation; EIP-7702 inherits that. The modular-account ecosystem (ERC-7579, ERC-6900) is converging on similar ideas as optional wallet-vendor layers. LSP6 makes the permission model part of the primary account stack — so wallets, apps, indexers, and tooling can inspect and manage permissions without learning every account vendor's custom module design.

3. A standardised on-chain identity and data store. Neither Pectra nor ERC-4337 defines where an account should keep profile metadata, application preferences, issued or received assets, or extension configuration. LUKSO uses ERC-725Y as a generic key-value store with LSP2 schemas and LSP3 profile keys, so the account is simultaneously a wallet, identity, profile, and application-data container. A 7702/4337 account can store all of these things — there's just no shared data model for them.

4. Safer ownership transitions. LSP14 Ownable 2-Step requires the current owner to nominate a new owner and the nominated owner to explicitly accept; renunciation includes a delay and confirmation. ERC-4337 and EIP-7702 don't define an equivalent lifecycle — each wallet implementation invents one, and the failure mode is "I clicked the wrong button and transferred ownership to a typo."

5. Predictable account initialisation and upgrades. EIP-7702 doesn't run deployment initcode when delegation is installed, so wallet developers have to protect initialisation against front-running. Switching between delegate implementations can produce storage collisions because the new implementation executes on the EOA's existing storage. Universal Profiles are deployed and initialised as contracts; LSP6 permissions live in the profile's ERC-725Y storage rather than inside the Key Manager, so the Key Manager can be replaced without discarding the permission configuration. LSP17 Contract Extension standardises the extension mechanism.

6. Standardised receiving and reaction hooks. Pectra and ERC-4337 address authorisation and execution; they don't define how an account learns about incoming assets or messages. LSP1 Universal Receiver is one entry point for structured notifications, with LSP5 and LSP10 standardising the records for received assets and vaults. A Universal Profile has the equivalent of an inbox, not just a balance.

7. Predictable account semantics. A 7702 account is a hybrid: it has code, it can still originate ECDSA transactions like an EOA, its code is only a pointer to another contract, and EIP-7702 itself notes that it breaks several historical EVM invariants — including code that assumes tx.origin == msg.sender. A Universal Profile is unambiguously a contract account: ERC-1271 signature validation, LSP20 call verification, and the LSP account interfaces all apply consistently.

Honest framing — what LUKSO does NOT uniquely solve

A pure ERC-4337 smart account can implement nearly all of these features. Transaction batching is account-level execution. Sponsored gas is a paymaster. Session keys are a custom validator. Multisig is account logic. Alternative signatures live inside the validator. Modular functionality has ERC-7579 and ERC-6900. And in some respects ERC-4337 ships a richer standardised gas market — bundlers and paymasters — than LSP25's straightforward relayer pattern.

So the LUKSO advantage isn't "Ethereum can't ship these features." It's a different one, four parts:

  1. No irrevocable EOA root. A Universal Profile's address is not cryptographically tied to one permanent private key.
  2. Recovery and controller replacement are authoritative. When a controller is removed or rotated, it actually loses authority — there's no parallel root key that can override the new configuration.
  3. Permissions, identity, receiving hooks, and extensions are standardised across the account ecosystem. Apps, indexers, and wallets read one vocabulary, not per-vendor modules.
  4. Hybrid-account and storage-migration complexities don't exist. A UP is a contract, deployed as a contract, upgraded as a contract — no 7702 storage collisions, no front-runnable initcode, no broken tx.origin assumptions.

The architectural difference, summarised:

7702 + 4337: permanent EOA root → programmable delegate → optional recovery, permissions, and modules (each wallet's call).

LUKSO Universal Profile: contract account root → replaceable Key Manager → standardised controllers, permissions, recovery, data, and extensions (one shared system).

LUKSO mainnet went live in 2023 with this stack as native standards rather than layered patterns. The practical takeaway: if an ERC-4337 plus EIP-7702 design is accumulating costs around residual EOA keys, validator fragmentation, EntryPoint and bundler infrastructure, and wallet-specific modules, Universal Profiles show the alternative shape: a contract account with standardized permissions, recovery, metadata, receiver hooks, and relay execution.

spec to spec, at a glance

ERC-4337 vs LSP0+LSP6+LSP20+LSP25 in one table.#

row ERC-4337 LSP account stack
transaction flow user → UserOp pool → bundler → EntryPoint → account user (controller) → account contract
permission layer validator module (per-account, non-standard) LSP6 Key Manager (standardized)
gas sponsorship paymaster (separate contract) LSP25 executeRelayCall (on the account)
signature verification validateUserOp on the account LSP20 lsp20VerifyCall inline
trace / explorer handleOps + EntryPoint hop direct call into the account contract

full matrix → erc-4337 vs lsp0+lsp6+lsp20+lsp25

be honest about scope

When to use which.#

people also ask

FAQ.#

  • What does ERC-4337 stand for? #

    ERC stands for Ethereum Request for Comments. ERC-4337 is the 4337th proposal in that series, titled 'Account Abstraction Using Alt Mempool'. It specifies how contract accounts can behave like first-class transactors on Ethereum without any consensus-layer changes — via a parallel mempool of UserOperation objects, a singleton EntryPoint contract, and bundlers that pack UserOperations into ordinary transactions.

  • Who created ERC-4337? #

    Vitalik Buterin proposed ERC-4337 on 29 September 2021 with six co-authors: Yoav Weiss (Ethereum Foundation, account-abstraction lead), Dror Tirosh, Shahaf Nacson, Alex Forshtat, Kristof Gazso, and Tjaden Hess. Vitalik also wrote the original Medium post explaining the design philosophy ('Account Abstraction Without Ethereum Protocol Changes'), making clear that the alt-mempool architecture was chosen specifically to avoid requiring a hard fork.

  • When was ERC-4337 deployed on mainnet? #

    The reference EntryPoint v0.6 deployed to Ethereum mainnet on 1 March 2023. EntryPoint v0.7 followed in 2024 with improved paymaster and aggregator interfaces. EntryPoint v0.8 deployed in May 2025 alongside the Pectra hard fork, adding native support for EIP-7702 delegations.

  • What is account abstraction? #

    Account abstraction lets accounts supply their own validation logic via smart-contract code, instead of every account being a fixed EOA (externally owned account) controlled by a single private key. With AA, a wallet can require a multisig signature, accept a passkey, allow social recovery, enforce per-session spending limits, sponsor gas in any token, batch many actions into one transaction — without changing the underlying protocol. ERC-4337 implements this above the protocol; EIP-7702 added a complementary delegation primitive at the protocol layer in 2025.

  • What is a UserOperation? #

    A UserOperation is the ERC-4337 envelope that wraps everything a smart account wants to do in a single signed package: the sender account, nonce, calldata, gas limits, optional initCode (to deploy the account on first use), optional paymasterAndData (for gas sponsorship), and a signature. UserOperations live in a separate mempool from normal transactions and are eventually packed by a bundler into a call to EntryPoint.handleOps().

  • What is a bundler in ERC-4337? #

    A bundler is an off-chain actor that watches the UserOperation mempool, validates UserOps (running validateUserOp against the destination account and paymaster), packs valid ones into a single transaction calling EntryPoint.handleOps(), and submits it on-chain. Bundlers earn fees from each UserOp. The position is privileged — bundlers can censor, reorder, or extract value from the UserOps they see — which is the centralization concern the spec's own maintainers have flagged in public talks.

  • What is a paymaster? #

    A paymaster is an optional ERC-4337 contract that sponsors gas for a UserOperation. The user signs a UserOp that references a paymaster; the bundler asks the paymaster (via validatePaymasterUserOp) whether it's willing to cover the gas; if yes, the paymaster pays from its ETH deposit at EntryPoint, and runs postOp afterwards to do any per-user accounting (e.g. charging the user in an ERC-20). Paymaster trust is a separate failure surface — wallets ship per-paymaster integrations.

  • What's the difference between ERC-4337 and EIP-7702? #

    ERC-4337 deploys a separate smart-contract account that holds funds and processes UserOperations through bundlers and an EntryPoint. EIP-7702 (Pectra, May 2025) lets an existing EOA delegate execution to contract code in a single transaction, without redeploying. The two are framed as complementary: EIP-7702 lets EOAs gain ERC-4337's UX (gas sponsorship, batching, session keys) without losing their address, history, ENS, or reputation. The catch is that an EIP-7702 EOA still has its original secp256k1 key — an attacker who steals that key can sign another 7702 authorization and reset the delegation, which is why EIP-7851 (still a draft as of mid-2026) was proposed to permanently revoke residual ECDSA authority. A pure contract account (ERC-4337 standalone, or a LUKSO Universal Profile) doesn't have that residual root.

  • Did Pectra fix ERC-4337's limitations? #

    Pectra (May 2025) ships EIP-7702 — EOAs can now delegate to contract code at the protocol level, which closes the 'existing addresses can't become smart accounts' gap and lets EOAs use ERC-4337's bundler and paymaster infrastructure without redeploying. That's real progress. But the layered structure remains: validator modules are still per-account (no shared permission vocabulary), the bundler/EntryPoint hop is still there for sponsored execution, and a 7702 EOA retains its original ECDSA key (a compromised key can override any recovery). EIP-7851 aims to revoke the residual ECDSA authority but is still a draft. The LUKSO LSP stack starts from a contract account with no residual root, with permissions (LSP6), receiving hooks (LSP1), social recovery (LSP11), ownership transitions (LSP14), and relayed execution (LSP25) standardised across the ecosystem rather than added wallet-by-wallet.

  • Is ERC-4337 the same as a smart wallet? #

    No. ERC-4337 is a standard that smart wallets can implement. Smart wallets predate ERC-4337 (Gnosis Safe, for instance, was deployed in 2018) and many still operate outside the 4337 stack via direct contract calls or relayers. ERC-4337 standardizes one specific architecture for smart-wallet execution: UserOperation envelope, alt mempool, bundler, EntryPoint, paymaster. A Universal Profile on LUKSO is a smart wallet that does not use the 4337 stack.

  • What is a Universal Profile, and how does it compare to ERC-4337? #

    A Universal Profile is a LUKSO smart-contract account composed from LSP0 (the account itself, an ERC-725 contract), LSP6 (Key Manager — standardized permissions), LSP20 (inline call verification), and LSP25 (executeRelayCall — sponsored execution as a function on the account). Compared to ERC-4337, the architecture is fused rather than layered: there is no EntryPoint, no UserOperation envelope, no bundler, no paymaster contract. The controller signs, a relayer (if any) submits, the account validates inline via LSP6 permissions, and the call executes. See the full comparison at ercsolved.dev/standards/compare/erc4337-lsp-stack/.

glossary 10 terms used on this page
Account abstraction
The general idea of letting accounts supply their own validation logic via smart contract code, instead of fixing the validation rules at the protocol layer. ERC-4337 implements it above the protocol; EIP-7702 added a protocol-level primitive in 2025.
EOA
Externally Owned Account. An Ethereum address controlled by a single keypair. Until EIP-7702, EOAs had no contract code and no programmable validation.
UserOperation
The ERC-4337 envelope wrapping a smart-account intent (sender, nonce, calldata, gas, signature, optional initCode, optional paymaster data). UserOps live in a separate mempool and are bundled into normal transactions.
Bundler
An off-chain actor that picks valid UserOperations from the alt-mempool, packs them into a call to EntryPoint.handleOps(), and submits the resulting transaction on-chain. Bundlers earn fees and carry centralization risk.
EntryPoint
The singleton ERC-4337 contract that receives bundled UserOperations, runs validation, calls into accounts and paymasters, and handles gas accounting. Versions: v0.6 (Mar 2023), v0.7 (2024), v0.8 (May 2025).
Paymaster
An optional ERC-4337 contract that pays gas on behalf of users. Has its own ETH deposit at EntryPoint, its own validation function, and its own postOp accounting hook.
Validator
The function on a smart-account contract (validateUserOp) that decides whether a UserOperation is authorized. Each ERC-4337 account implements this however it wants — no shared permission vocabulary.
Aggregator
An ERC-4337 component that can verify a batch of signatures as one (e.g., BLS aggregation), reducing per-UserOp signature-verification cost. Optional, less widely deployed than the rest of the stack.
Smart account
A contract that holds user funds and executes user-authorized actions. Predates ERC-4337 (e.g., Gnosis Safe, 2018) and can be implemented inside or outside the 4337 architecture.
EIP-7702
Pectra-era (May 2025) protocol upgrade that lets an EOA delegate execution to contract code for a transaction. Complementary to ERC-4337 — lets EOAs use the 4337 ecosystem without redeploying.