ByAUJay
From Sign-In With Ethereum to Sign-In With Intents: Rewriting Onboarding Flow
A practical playbook to upgrade “connect wallet → sign” into a one-click, capability-scoped, gasless, MEV-protected onboarding that works across EOA and smart accounts. We’ll show what to change first, what to measure, and how to ship safely with today’s standards.
TL;DR (executive description)
“Sign-In with Intents” combines SIWE + ReCaps, session keys, paymasters, wallet APIs, and solver-based execution (UniswapX/CoW) so users authorize outcomes (swap, bridge, mint) instead of raw transactions—cutting steps, eliminating gas prompts, and enabling background execution with auditability.
Why SIWE alone isn’t enough in 2025
Sign-In with Ethereum (SIWE, ERC‑4361) standardized off‑chain login using an EIP‑191 message and nonce. It’s widely adopted and remains a great starting point—but by itself it stops at authentication; users still face network confusion, repeated approvals, gas prompts, and unsafe mempools. Today’s UX leaders pair SIWE with capability grants, intent fulfillment, and gas abstraction. (eips.ethereum.org)
Two practical gaps SIWE doesn’t solve alone:
- Authorization scope: which actions can the app perform later (e.g., swap up to $200, call a specific protocol, auto-roll a vault)? ReCaps (ERC‑5573) extend SIWE to attach capability URIs that wallets can render and servers can verify. (eips.ethereum.org)
- Smart-account signatures before deployment: if your user has a counterfactual (yet‑to‑be‑deployed) 4337 account, classic ERC‑1271 verification fails. ERC‑6492 adds a wrapper signature format so relying parties can verify contract signatures even pre‑deploy. (eips.ethereum.org)
Add in 2025’s upgrades—wallet APIs for batching (EIP‑5792), session keys, account abstraction (ERC‑4337) and Pectra’s EIP‑7702 for EOA delegation—and you can move from “sign-in” to “sign objectives” safely. (eips.ethereum.org)
What “Sign-In with Intents” actually means
Think of it as a layered pattern your product can ship now:
-
Authenticate: SIWE (ERC‑4361) message with a short lifetime and anti‑replay nonce. Optionally include ReCaps to grant narrow capabilities (e.g., “this site may request typed‑data signatures for Uniswap swaps, max 1,000 USDC, until 2025‑12‑31”). (eips.ethereum.org)
-
Delegate: establish a session key or device identity key so the app can execute within the granted scope without pestering the main wallet every click. WalletConnect’s Identity Keys use a CAIP‑122‑formatted SIWE to authorize an Ed25519 identity; ERC‑7579 “Smart Sessions” bring portable, module‑level policies to smart accounts. (specs.walletconnect.com)
-
Execute intents: users sign a high‑level order (intent). Solvers compete to fulfill it (UniswapX, CoW Protocol), paying gas and routing privately for MEV safety; users get the best feasible outcome within constraints. (docs.uniswap.org)
-
Abstract gas: a paymaster sponsors or lets users pay fees in USDC/other tokens; EIP‑5792 “wallet_sendCalls” lets your frontend request atomic batched calls with a paymaster capability. (eips.ethereum.org)
-
Protect orderflow: route via MEV‑protected RPCs (MEV Blocker) or orderflow auctions (Flashbots MEV‑Share) to internalize MEV as price improvement or rebates. (docs.cow.fi)
-
Verify safely: for smart‑account signatures use ERC‑1271; for counterfactual accounts, accept ERC‑6492 wrapper; for readability and anti‑replay across multiple smart accounts owned by one EOA, adopt ERC‑7739. (eips.ethereum.org)
Architecture blueprint (drop‑in components)
-
Frontend
- Wallet adapter supporting EIP‑5792 and SIWE (WC AppKit “one‑click SIWE” with ReCaps is production‑ready). (walletconnect-docs.vercel.app)
- Intent UI: user selects outcome (“swap X→Y”, “bridge 50 USDC to Base”), caps, and expiry.
-
AuthN/AuthZ
- SIWE (ERC‑4361) + ReCaps (ERC‑5573) for capability delegation to your origin, including wallet RPC and solver endpoints as resources. (eips.ethereum.org)
-
Delegation
- Session keys for 1‑click flows (ERC‑7579 Smart Sessions module), or WalletConnect Identity Keys bound via CAIP‑122 SIWE for device‑level signing. (docs.rhinestone.dev)
-
Execution
- Intents settlement via UniswapX (gasless swaps, auctions vary by chain) or CoW solvers; both internalize MEV and support off‑chain orders with on‑chain settlement. (docs.uniswap.org)
-
Gas
- ERC‑4337 paymaster (verifying or ERC‑20 paymaster) from providers like Pimlico/Candide/Alchemy/Circle; wire via EIP‑5792 capabilities. (docs.erc4337.io)
-
Orderflow privacy
- Submit through MEV Blocker RPC or MEV‑Share to avoid sandwiches and optionally get rebates. (docs.cow.fi)
-
EOA compatibility
- With EIP‑7702 live in Pectra (May 7, 2025), EOAs can temporarily delegate to smart‑wallet code for batching, sponsorship, and privilege de‑escalation—bridging “old” EOAs and intents UX. (blog.ethereum.org)
Practical examples you can copy
1) SIWE + ReCaps message (what the wallet shows)
example.com wants you to sign in with your Ethereum account: 0xABCD…1234 I further authorize the stated URI to perform the following actions on my behalf: (1) 'request': 'wallet_sendCalls' with 'atomic' on 'eip155:1' (2) 'request': 'personal_sign','eth_signTypedData_v4' for 'eip155:1' URI: https://example.com Version: 1 Chain ID: 1 Nonce: 3f2bd2… Issued At: 2025-12-01T10:00:00Z Resources: - urn:recap:eyJhdHQiOnsiaHR0cHM6Ly9leGFtcGxlLmNvbSI6eyJ3YWxsZXQvc2VuZENhbGxzIjpbeyJhdG9taWMiOnRydWV9XX19fQ
This is a standard ERC‑4361 SIWE with an ERC‑5573 ReCap encoding wallet RPC permissions. WalletConnect AppKit renders this as “One‑Click Auth” with human‑readable ReCaps. (eips.ethereum.org)
Implementation notes:
- Verify SIWE per ERC‑4361; if the signing address is a contract, call ERC‑1271; if it’s a counterfactual smart account, detect and unwrap ERC‑6492 before validation. (eips.ethereum.org)
2) Batch + paymaster over Wallet API (EIP‑5792)
await wallet_sendCalls({ from: "0xABCD…1234", chainId: "0x1", calls: [ { to: UNISWAPX_REACTOR, data: swapCalldata }, { to: recipient, data: transferBytes } ], capabilities: { paymasterService: { url: "https://paymaster.example.com/v1/sign", optional: false }, atomic: { required: true } } })
- Frontends discover support via
, which many wallets are adding alongside 4337 support. Atomic execution is standardized as a capability, and the paymaster URL is passed explicitly. (eips.ethereum.org)wallet_getCapabilities
3) Session key for 1‑click swaps (ERC‑7579 Smart Sessions)
Scope a session to a token and function selector (transfer) plus a max spend and expiry; the SDK programs policy on‑chain:
const session = { owners: { type: 'ecdsa', accounts: [sessionOwner] }, actions: [{ target: USDC, selector: '0xa9059cbb' }], policies: [ { type: 'spendLimit', token: USDC, max: '1000000000' }, // 1,000 USDC { type: 'expiry', validUntil: 1735689600 } // Dec 31, 2024 ] } await rhinestone.createAccount({ owners: mainOwner, sessions: [session] })
Rhinestone/Biconomy’s Smart Sessions implement scoping and are compatible across ERC‑7579 accounts and Safe via adapters. For signature verification, adopt ERC‑7739 to prevent replay across a user’s multiple smart accounts while keeping typed‑data readable. (docs.rhinestone.dev)
Intents execution: UniswapX and CoW Protocol
- UniswapX is an auction‑based, gasless settlement protocol; swappers sign off‑chain orders and “fillers” compete to execute them. Mechanisms differ by chain (RFQ exclusivity then Dutch on Ethereum; block‑decay Dutch on Arbitrum; priority‑gas auctions on Base/Unichain). Users never pay gas; fillers recoup costs inside the price. (docs.uniswap.org)
- CoW Protocol batches intents and matches “coincidence of wants” before routing to on/off‑chain liquidity, with solver competition and native MEV protection patterns. (beta.docs.cow.fi)
Cross‑chain: Uniswap Labs and Across proposed a standard for cross‑chain intents (e.g., a CrossChainOrder format and a Settler role) so independent intent systems can interoperate through shared filler networks. This is the direction to watch as you plan multi‑chain UX. (blog.uniswap.org)
Gas, mempools, and MEV in a sign‑in‑with‑intents world
- ERC‑4337 Paymasters let you sponsor or accept USDC‑for‑gas; production providers include Pimlico, Candide, Circle, Alchemy, etc., with reference ERC‑20 paymasters and verifying paymasters you can self‑host. Pair this with 5792 capabilities for a clean app→wallet contract. (docs.erc4337.io)
- Route private: CoW’s MEV Blocker RPC and Flashbots MEV‑Share give you a neutral, rules‑based path that blinds sensitive details and can return rebates, reducing user harm while preserving fast inclusion. Intents‑based DEXs and solver flows integrate cleanly here. (docs.cow.fi)
EOAs aren’t left behind: EIP‑7702 shipped with Pectra
EIP‑7702 (mainnet activation May 7, 2025) lets a classic EOA delegate to smart‑account code using a Type‑4 transaction with an authorization list. For onboarding, this means: batch approvals + swap in one shot, sponsor gas, or apply temporary privilege de‑escalation—without migrating keys. Expect wallets to expose safe delegation contracts and revocation UX. (blog.ethereum.org)
Passkeys are finally practical on EVM
With P‑256 verify precompiles rolling out broadly (RIP‑7212 on L2s, superseded on mainnet by EIP‑7951 proposal in “Last Call”), you can adopt platform passkeys (WebAuthn, Secure Enclave, Android Keystore) as smart‑account validators or session keys. Combine with ERC‑4337 or 7702 delegation for seedless, phishing‑resistant onboarding. (eip.info)
Security hardening checklist (do this before GA)
- Don’t accept raw eth_sign blobs for login; use ERC‑4361 with domain binding, issuedAt/nonce, and short expiry. Verify 1271 for contract wallets; add ERC‑6492 to support counterfactual signatures. (eips.ethereum.org)
- Prefer typed‑data (EIP‑712) for anything user‑visible; adopt ERC‑7739 defensive rehashing in your 1271 path to stop cross‑account replays while keeping wallets’ “what you sign” readable. (eips.ethereum.org)
- Use module registries for smart‑account plugins: ERC‑7484 defines a singleton registry for attestations (audits, type assertions). Gate module installation and execution behind a registry check and thresholds. (eips.ethereum.org)
- Wallet API guardrails: only request
with atomicRequired=true when needed; enumerate wallet capabilities first to avoid footguns. (eips.ethereum.org)wallet_sendCalls - Private orderflow defaults: MEV Blocker “fullprivacy” for sensitive flows; otherwise choose rebate‑enabled endpoints and monitor revert protections. (mevblocker.io)
Migration plan: 30/60/90 day roadmap
-
Days 1–30:
- Replace ad‑hoc message signing with ERC‑4361 SIWE on your domain; add ReCaps for the minimum permissions you need (e.g., typed‑data signing + wallet_sendCalls). Ship server‑side verification (incl. 1271 + 6492). (eips.ethereum.org)
- Enable MEV‑safe RPC for tx submissions (MEV Blocker or MEV‑Share path). (docs.cow.fi)
-
Days 31–60:
- Wire EIP‑5792 for batched calls; integrate a verifying paymaster (sponsor first‑session flows; allow USDC for power users). (eips.ethereum.org)
- Pilot one intent: UniswapX gasless swaps with limits/expiry encoded in your UI and logged server‑side. Measure fill‑time and price improvement. (docs.uniswap.org)
-
Days 61–90:
- Introduce session keys via ERC‑7579 Smart Sessions for “1‑click” within your app; enforce spend/time policies; implement ERC‑7739‑aware verification. (docs.rhinestone.dev)
- Optional: expose an EOA‑friendly path with EIP‑7702 delegation presets (batch + sponsor) and an obvious “revoke delegation” button. (eips.ethereum.org)
KPIs to track (and realistic targets after 90 days)
- Auth conversion: SIWE success rate to session‑established ≥ 95%.
- Time‑to‑first‑intent: median < 10s including swap fulfillment on L2; < 30s on L1 during normal conditions. (docs.uniswap.org)
- Gas prompts avoided: ≥ 90% of first‑time actions sponsored via paymaster. (docs.erc4337.io)
- MEV protection: ≥ 95% of flows through private RPC; measure price improvement vs. public mempool baseline on a sample. (docs.cow.fi)
- Replay incidents: zero—backed by ERC‑7739 tests in your 1271 code path. (eips.ethereum.org)
Deep implementation notes for teams
- WalletConnect One‑Click Auth: v2 Pairing lets you do connect + SIWE in a single flow; include ReCaps in the “resources” array and reconcile on your backend. Identity Keys (ed25519) can be authorized by a CAIP‑122 SIWE, letting devices sign on your app’s behalf within the granted scope. (specs.walletconnect.com)
- UniswapX per‑chain knobs: RFQ exclusivity on mainnet; block‑decay Dutch on Arbitrum; priority gas auctions on Base/Unichain. Build chain‑aware fallbacks and protect with slippage + deadline. (docs.uniswap.org)
- 4337 details that matter: if you’re rolling your own paymaster, follow the v0.7+ “paymasterSignature” format so accounts and paymasters can sign in parallel; always simulate UserOps. (eips.ethereum.org)
- Passkeys: target P‑256; map WebAuthn outputs to on‑chain verify via 7212/7951 interface; combine with 4337 or 7702 for execution. Watch mainnet EIP‑7951 progress and L2 coverage. (eip.info)
- Module safety: adopt ERC‑7484 registry checks on install and first execution; require a quorum of attesters (e.g., 2 of 3) for high‑risk modules. (eips.ethereum.org)
What’s next (2026‑ready)
- Cross‑chain intents standardization (Uniswap Labs + Across) will make solvers portable, shrinking fragmentation across chains and intent systems; pilot now to be ready for a universal filler network. (blog.uniswap.org)
- Native account abstraction on L2s plus EIP‑7702 on L1 means hybrid wallets—EOA for compatibility, smart features on demand—will be the default for mainstream apps. Plan your policy layers (spend limits, time locks, registries) as code you can reuse across both. (eips.ethereum.org)
Bottom line
“Sign-In with Intents” is not a new login button; it’s a grounded, standards‑based way to (1) authenticate with SIWE, (2) authorize narrow, time‑boxed capabilities, and (3) fulfill outcomes via session keys, paymasters, and solver competition—wrapped in private, auditable flows. Ship it incrementally: SIWE+ReCaps → 5792+paymaster → sessions+intents. Your users will feel the difference on day one, and your ops team will appreciate the guardrails.
If you want a hands‑on blueprint tailored to your stack, 7Block Labs can help design, implement, audit, and A/B test the migration in under 90 days.
Like what you're reading? Let's build together.
Get a free 30‑minute consultation with our engineering team.

