EIP-7702 vs EIP-3074: Exclusive Guide to Safer Wallets.
Article Structure

Wallets want smart-account superpowers without breaking addresses. Two proposals promise that by letting an Externally Owned Account (EOA) delegate control for a moment: EIP-3074 and EIP-7702. They aim at the same goal—smoother UX with batching, sponsored gas, session keys—but take very different routes. Those differences matter for safety, tooling, and how wallets evolve.
Why delegation matters for EOAs
EOAs are simple: sign with a private key, send a transaction. That simplicity blocks richer flows. Think paying gas in any token, approving one-click multi-step swaps, or delegating a game session to a temporary key. Delegation lets a user authorize a policy or a contract to act on their behalf for a defined scope.
Do this wrong, and you hand over the keys to the kingdom. Do it right, and you get smart-account UX without forcing users to migrate addresses.
EOA vs. smart account, in one breath
EOAs sign and verify at the protocol level. Smart accounts (contracts) validate and execute with code. Delegation proposals let an EOA “pretend” to be a contract for a moment, or allow a trusted contract to execute as if it were the EOA. That unlocks programmable validation while keeping the same address.
EIP-3074 in plain terms
EIP-3074 introduces two opcodes: AUTH and AUTHCALL. A user signs an authorization. A special “invoker” contract uses AUTH to prove that signature, then uses AUTHCALL to perform calls “as the EOA.” From the callee’s perspective, it looks like the EOA called directly.
This enables sponsored transactions, batched actions, and social recovery flows. A DEX, for instance, could pay gas and execute an approval plus swap in one shot, all attributed to the EOA.
Where EIP-3074 can bite
AUTH grants broad authority to the invoker. If the authorization is overly permissive—or the invoker is malicious or bugged—the invoker can act fully as the EOA during the authorization window. The blast radius is large.
- Authority is centered on the invoker contract, not a narrow policy.
- Revocation and scoping require great care; misconfigured scopes are unforgiving.
- Replay and domain separation need strong design or signatures can be abused across contexts.
These problems aren’t fatal, but they shift complexity and risk onto wallet builders and users. In effect, 3074 trades ergonomics for power, and the power must be fenced very tightly.
EIP-7702, the newer path
EIP-7702 flips the model. Instead of giving a third-party invoker power to impersonate the EOA, the EOA temporarily installs contract code for itself for the duration of a transaction or bundle. That code defines what the account can do in that moment.
You sign a message that encodes a transient “account policy” (code + parameters). The network treats your EOA like a smart account for that transaction, then reverts it to a plain EOA afterward. No standing invoker. No long-lived blanket approvals.
How a 7702 flow looks, step by step
In practice, 7702 introduces a clean lifecycle for delegated actions. Here’s the simplest mental model.
- The wallet prepares a small contract payload that encodes a policy: e.g., “allow calling Router X up to 1 ETH, before block N.”
- The user signs that payload plus a nonce and domain separator.
- The transaction includes the payload and signature; the EVM installs the code for the sender temporarily.
- During execution, the temporary code validates the action and enforces limits, then performs calls.
- After the transaction, the account reverts to a regular EOA with no lingering code or authority.
The scope is baked into the code that runs as the account. That keeps permissions tight and short-lived by default.
Security model: where the lines are drawn
Both proposals aim to be safe, but they draw boundaries differently. A side-by-side view helps clarify what each one promises.
Comparison of delegation approaches
| Dimension | EIP-3074 | EIP-7702 |
|---|---|---|
| Core mechanism | AUTH/AUTHCALL opcodes; invoker executes “as EOA” | Temporarily install code on EOA for the transaction |
| Authority surface | Broad, centered on invoker contract | Narrow, defined by ephemeral account code |
| Revocation | Depends on invoker design; risk of lingering grants | Automatic at end of tx; nothing to revoke |
| Scoping | Must be implemented by invoker; error-prone | Enforced by the temporary code and signature |
| Compatibility with account abstraction | Bridges to AA; potential friction with future standards | Aligns with smart-account patterns; easier to compose |
| Developer ergonomics | Simple to start; complex to secure | Slightly more upfront work; safer defaults |
In short: 3074 emphasizes power via an invoker. 7702 emphasizes ephemeral, local policy via code acting as the account. The latter reduces footguns by design.
What this means for wallet UX
Both proposals enable the same headline features users want. The difference is in how safely and predictably they can be shipped at scale.
- Sponsored actions: Pay gas for a user and perform multiple steps in one transaction.
- Session keys: Authorize a limited game or dApp session with spending caps and expiry.
- One-click flows: Approve, swap, bridge, and stake in one go, with clear limits.
- Recovery: Allow a guardian contract to rotate keys under strict conditions.
With 7702, those limits live in the temporary account code itself, so the UI can reflect them exactly: “Spend up to 0.5 ETH to Pool Y before block 19,000,000.” Users can see tight, measurable bounds instead of a vague “this site can act as you.”
Tiny scenarios to make it concrete
Imagine a DEX deposit. With 3074, you sign an authorization; the DEX’s invoker pays gas and calls approve + deposit as you. If the invoker or scope is mis-set, it may call other contracts. With 7702, your temporary code only allows calls to the DEX router with a strict amount and deadline. The execution simply can’t wander.
Or a mobile game. 3074 can grant a session to the game’s invoker with time-based limits—good, but fragile if the invoker has a bug. 7702 encodes “only NFT mint calls to Contract Z, max N mints, expires in 15 minutes” directly in the account code for that session.
Developer considerations
For teams building wallets or dApps, the trade-offs show up in code shape and audit scope.
- Threat model the authority holder. In 3074, it’s the invoker. In 7702, it’s the ephemeral account code.
- Design explicit scopes: destination allowlists, value caps, function selectors, and expiry.
- Use strong domain separation in signatures: chain IDs, contract addresses, nonces, and replay guards.
- Expose clear UX: show exact caps, deadlines, and what can’t happen.
- Plan for migration paths to full smart accounts if users opt in later.
Audits get simpler when scope is small and enforced locally. 7702 nudges the system in that direction by default.
Interplay with account abstraction
Many teams use ERC-4337 or related designs to get smart-account features today. Both 3074 and 7702 can coexist with that ecosystem. The difference is composability. Because 7702 literally runs code as the account for a moment, it aligns neatly with the mental model of AA: validate, execute, revert to baseline. That makes it easier to adopt AA-like patterns without forcing an address change.
Choosing between them
If you need raw simplicity and already control a well-audited invoker, 3074 can work—especially for tightly controlled, single-tenant systems. If you prioritize least-privilege delegation, clear UX, and future alignment with smart-account tooling, 7702 is the cleaner choice.
For public wallets and mass-market dApps, reducing implicit trust in third-party invokers is a win. Moving the authority into ephemeral, signed code that lives and dies in a single transaction keeps the blast radius small and reasoning straightforward.
Practical tips before you implement
Before adopting either approach, lock down a few basics so your team avoids common pitfalls and your users stay safe.
- Always include chain ID, nonce, and expiry in signed payloads.
- Prefer explicit allowlists over negative checks; name target contracts and function selectors.
- Cap value and approvals; avoid unbounded approvals even for short sessions.
- Log human-readable intent summaries and show them in the wallet.
- Test failure modes: expiries, partial fills, reentrancy edges, and third-party revert paths.
Good guardrails make either proposal safer. With 7702, those guardrails become part of the temporary account itself, not just the UI or an external invoker contract.
Bottom line for teams and users
Both EIP-3074 and EIP-7702 unlock better wallet UX without forcing users to migrate to smart accounts. The distinction is where authority lives. 3074 concentrates it in an invoker that acts as you; 7702 embeds it in ephemeral code that becomes you—briefly and precisely. That shift narrows risk, simplifies audits, and maps cleanly to the way people already think about permissions: say exactly what’s allowed, for how long, and nothing more.


