{"id":"ERC-7683","name":"Cross Chain Intents Standard","status":"Draft","chain":"both","category":{"id":"cross-chain","name":"Cross-Chain","description":"Moving assets and messages between chains"},"journeyStages":[{"id":"executing","name":"Executing Transactions","description":"Performing on-chain actions"}],"uxImpact":"Users express what they want (intent) rather than how to execute it — fillers compete to fulfill cross-chain swaps/transfers at best rates. Design implications: show intent parameters clearly (destination, token, amount, deadline), display competing filler quotes or best rate automatically, design gasless flow for signed orders vs on-chain flow, show fill status across origin and destination chains. Design decisions: whether to show filler identity/reputation, how to communicate dutch auction price dynamics, deadline selection UI (time picker vs relative time), handling partial fills or failed settlements gracefully. 🟢 Live with $35B+ lifetime volume via Across. Bridging Pain is Critical — 70% of onboarded users never complete a bridge transaction. Intent-based protocols are replacing manual bridging as the primary cross-chain UX.","hasDetailedContent":true,"content":{"id":"ERC-7683","summary":"ERC-7683 standardizes cross-chain intents - letting users express what they want to achieve (\"swap 1 ETH on Arbitrum for USDC on Base\") without specifying how. Solvers compete to fulfill intents, finding the best routes and prices. Users get simpler cross-chain UX without manually bridging, swapping, and managing multiple chains.","applicability":{"whenToUse":["Your users must manually navigate cross-chain operations.","Your product addresses: finding best route across chains is complex.","The flow should deliver: express intent \"get USDC on Base\", solver handles everything.","You are designing a intent-based cross-chain swap experience with visible states and recovery paths."],"whenToAvoid":["Show multiple solver offers with comparison.","Show bridge/DEX route for transparency.","Show countdown timer, refresh quotes automatically.","The product never moves assets or state across chains."]},"designerTakeaways":["You can design UI that delivers express intent \"get USDC on Base\".","You can design UI that delivers solvers compete, user gets best execution automatically.","You can design UI that delivers intent either fills completely or refunds."],"problemsSolved":[{"problem":"Users must manually navigate cross-chain operations","oldWay":"Bridge ETH to Arbitrum → wait → swap on Arbitrum → bridge to Base → wait...","newWay":"Express intent \"get USDC on Base\", solver handles everything","impact":"critical"},{"problem":"Finding best route across chains is complex","oldWay":"Compare bridge fees, DEX rates, gas costs across chains manually","newWay":"Solvers compete, user gets best execution automatically","impact":"critical"},{"problem":"Stuck transactions on bridges","oldWay":"TX stuck mid-bridge, unclear status, manual recovery","newWay":"Intent either fills completely or refunds, no partial states","impact":"high"},{"problem":"Different bridges = different interfaces","oldWay":"Learn Hop, learn Across, learn Stargate... all different UX","newWay":"Standard intent format works with any solver/bridge","impact":"high"}],"uxPatterns":[{"name":"Intent-Based Cross-Chain Swap","description":"Express desired outcome, let solvers compete","mockup":"concept/bridge","userFlow":["User specifies what they have and where","User specifies what they want and where","Solvers compete to offer best rate","User accepts best offer","Sign intent transaction","Solver executes cross-chain operation","User receives output on destination chain"]},{"name":"Intent Status Tracking","description":"Track cross-chain intent fulfillment","mockup":"concept/bridge","userFlow":["Intent signed and submitted","Solver claims and begins filling","Track progress across chains","See route taken by solver","Confirm delivery on destination"]},{"name":"Multi-Solver Comparison","description":"Compare offers from competing solvers","mockup":"concept/bridge","userFlow":["Request quotes from multiple solvers","Display ranked by output amount","Show route and time for each","User selects preferred offer","Offers have expiration time"]},{"name":"Intent History","description":"View past cross-chain intents","mockup":"concept/bridge","userFlow":["View list of past intents","See completed, pending, expired","Expired intents show refund status","Click to view full details"]}],"uiComponents":[{"name":"CrossChainInput","description":"Input with chain and asset selection","states":["empty","valid","insufficient","chain-mismatch"],"props":["chains[]","assets[]","balance","onChainChange","onAssetChange"]},{"name":"SolverOfferCard","description":"Display solver quote with route details","states":["loading","quoted","expired","accepted"],"props":["solver","outputAmount","route","estimatedTime","onAccept"]},{"name":"IntentStatusTracker","description":"Track intent through signing → filling → delivery","states":["pending","claimed","filling","delivered","expired"],"props":["intentId","steps[]","currentStep"]},{"name":"ChainRouteDisplay","description":"Visual representation of cross-chain path","states":["preview","in-progress","completed"],"props":["sourceChain","destChain","intermediateSteps[]"]}],"antiPatterns":[{"pattern":"Showing only one solver option","why":"User can't compare, may get worse rate","instead":"Show multiple solver offers with comparison","severity":"high"},{"pattern":"Hiding the route taken","why":"Users can't understand where their funds are","instead":"Show bridge/DEX route for transparency","severity":"high"},{"pattern":"No expiration on quotes","why":"Stale quotes lead to failed fills or bad rates","instead":"Show countdown timer, refresh quotes automatically","severity":"high"},{"pattern":"Unclear refund mechanism for unfilled intents","why":"Users panic if intent expires, don't know about refund","instead":"Explain upfront: \"If not filled in X time, funds refunded\"","severity":"medium"}],"onMonad":[{"aspect":"Intent Signing","ethereum":"Intent confirmation takes 15+ seconds","monad":"Sub-second intent confirmation","designImplication":"Solver auction can happen in real-time"},{"aspect":"Monad as Source","ethereum":"N/A","monad":"Fast finality means solvers get certainty quickly","designImplication":"Intents from Monad fill faster"},{"aspect":"Monad as Destination","ethereum":"Delivery takes 15+ seconds to confirm","monad":"Delivery confirms instantly","designImplication":"Show instant \"Delivered!\" for Monad destinations"},{"aspect":"Reserve Balance","ethereum":"Can spend full ETH balance","monad":"Must keep 10 MON reserve when sending from Monad","designImplication":"MAX button must account for reserve on Monad source"}],"keyTakeaways":["Intents = user says WHAT they want, not HOW to get it","Show multiple solver offers with rate comparison","Display route and estimated time for transparency","Handle expiration/refund clearly - no stuck states","On Monad: fast finality on either end improves overall experience"],"technicalNotes":"ERC-7683 defines a CrossChainOrder struct with input/output tokens, chains, amounts, and expiration. Orders are signed off-chain and submitted to a settlement contract. Solvers monitor for orders, compete to fill them, and execute the cross-chain transfer. The standard supports partial fills, Dutch auctions for price discovery, and guarantee mechanisms."},"sources":[{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/eip-7683","type":"official-spec"},{"label":"Discussion","url":"https://ethereum-magicians.org/search?q=ERC-7683","type":"discussion"}],"urls":{"canonical":"https://www.eipsfordesigners.com/standards/ERC-7683","markdown":"https://www.eipsfordesigners.com/standards/ERC-7683/content.md","agent":"https://www.eipsfordesigners.com/standards/ERC-7683/agent.md","api":"https://www.eipsfordesigners.com/api/standards/ERC-7683","official":"https://eips.ethereum.org/EIPS/eip-7683","discussion":"https://ethereum-magicians.org/search?q=ERC-7683"},"freshness":{"lastReviewed":"2026-04-05","lastUpdated":"2026-04-05"}}