{"id":"EIP-7786","name":"Cross-Chain Messaging Gateway","status":"Last Call","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 interact with a unified cross-chain messaging interface that works across EVM and non-EVM chains without knowing which bridge is being used underneath. Design implications: abstract bridge selection behind the scenes or offer it as advanced option, design address input fields that handle different chain address formats (EVM vs Solana vs others), show message attributes as optional settings, display sender/recipient clearly with chain context. Design decisions: whether to expose bridge choice to users (simpler UX vs transparency tradeoff), how to visualize non-EVM addresses, whether to show post-processing steps (like gas payment) inline or as separate flow.","hasDetailedContent":true,"content":{"id":"EIP-7786","summary":"EIP-7786 standardizes how apps send messages across chains. Instead of integrating separately with LayerZero, Wormhole, Axelar, etc., apps implement one interface. The standard abstracts bridge-specific details behind a common \"gateway,\" so users get consistent UX regardless of which bridge routes their message. Developers integrate once, users switch bridges seamlessly.","applicability":{"whenToUse":["Your product addresses: each bridge has different integration requirements.","Your users see inconsistent cross-chain UI across apps.","Your UI should single gateway interface works with any compliant bridge.","You are designing a bridge-agnostic transfer experience with visible states and recovery paths."],"whenToAvoid":["Show bridge name with link to their status page.","Real-time progress with stage indicators and ETA.","Clear recovery UI with retry and refund options.","The product never moves assets or state across chains."]},"designerTakeaways":["You can design UI that delivers single gateway interface works with any compliant bridge.","You can standard message format enables consistent UX patterns.","You can design UI that delivers swap bridge adapters without changing app logic."],"problemsSolved":[{"problem":"Each bridge has different integration requirements","oldWay":"Custom code for LayerZero, different code for Wormhole, etc.","newWay":"Single gateway interface works with any compliant bridge","impact":"critical"},{"problem":"Users see inconsistent cross-chain UI across apps","oldWay":"Every app shows bridges differently, different confirmations","newWay":"Standard message format enables consistent UX patterns","impact":"high"},{"problem":"Switching bridges requires code changes","oldWay":"Hardcoded bridge dependency, risky to change","newWay":"Swap bridge adapters without changing app logic","impact":"high"},{"problem":"No standard way to track cross-chain message status","oldWay":"Each bridge has different tracking APIs","newWay":"Standard events and status checking interface","impact":"medium"},{"problem":"Bridge failures handled inconsistently","oldWay":"Some bridges auto-retry, some fail silently, some refund","newWay":"Standard error handling and retry patterns","impact":"medium"}],"uxPatterns":[{"name":"Bridge-Agnostic Transfer","description":"User picks destination, not bridge","mockup":"concept/bridge","userFlow":["User enters amount and destination chain","UI queries available bridges via gateway","Shows routes sorted by user preference","User picks route (or accepts default)","Single interface sends regardless of bridge"]},{"name":"Cross-Chain Message Tracker","description":"Unified status view for any bridge","mockup":"concept/bridge","userFlow":["User sends cross-chain message","Redirected to status page","Polls gateway for standard status updates","Progress bar advances through stages","Shows bridge-specific details where helpful"]},{"name":"Bridge Health Dashboard","description":"Show bridge reliability and status","mockup":"concept/bridge","userFlow":["User views bridge dashboard","Gateway aggregates bridge health data","Shows status, speed, and reliability metrics","Alerts highlight any issues","Helps user choose appropriate bridge"]},{"name":"Failed Message Recovery","description":"Handle and retry failed cross-chain messages","mockup":"concept/bridge","userFlow":["Message fails to deliver","User sees notification of issue","UI explains what happened clearly","Offers retry or refund options","Standard interface regardless of bridge"]}],"uiComponents":[{"name":"CrossChainProgress","description":"Visual progress indicator for cross-chain messages","states":["pending","confirming","relaying","executing","complete","failed"],"props":["sourceChain","destChain","currentStage","estimatedTime"]},{"name":"BridgeSelector","description":"Choose between available bridge routes","states":["loading","available","comparing","selected"],"props":["routes[]","sortBy","onSelect"]},{"name":"MessageStatusPoller","description":"Auto-updating status component","states":["polling","updated","complete","error"],"props":["messageId","pollInterval","gateway"]},{"name":"BridgeHealthBadge","description":"Quick status indicator for a bridge","states":["healthy","degraded","down","unknown"],"props":["bridgeName","status","lastCheck"]}],"antiPatterns":[{"pattern":"Hiding which bridge is being used","why":"Users need to know for troubleshooting and trust","instead":"Show bridge name with link to their status page","severity":"critical"},{"pattern":"No status updates during bridging","why":"Users anxious when large value transfers show no progress","instead":"Real-time progress with stage indicators and ETA","severity":"critical"},{"pattern":"Abandoning users when messages fail","why":"Stuck funds cause panic and support tickets","instead":"Clear recovery UI with retry and refund options","severity":"critical"},{"pattern":"Auto-selecting bridge without explanation","why":"Users surprised by speed or cost differences","instead":"Show why this bridge was chosen (price/speed/security)","severity":"high"},{"pattern":"Not showing estimated completion time","why":"Users don't know if 5 minutes or 5 hours","instead":"Clear ETA based on bridge historical performance","severity":"medium"}],"onMonad":[{"aspect":"Destination Finality","ethereum":"Arriving on Ethereum may need 15+ seconds finality","monad":"Messages to Monad finalize in under 1 second","designImplication":"Fast final step—show quick completion animation"},{"aspect":"Message Execution","ethereum":"Executing arrived message may cost significant gas","monad":"Cheap execution on Monad side","designImplication":"Include execution cost in fee estimates"},{"aspect":"Retry Speed","ethereum":"Retrying failed message can take time/gas","monad":"Fast, cheap retries on Monad","designImplication":"Retry button can feel responsive"},{"aspect":"Reserve Balance","ethereum":"May need ETH to execute arrived message","monad":"10 MON reserve ensures accounts can always receive cross-chain messages","designImplication":"Users won't be stranded receiving cross-chain messages"}],"keyTakeaways":["EIP-7786 = one interface for all cross-chain messaging","Always show which bridge is used and estimated time","Provide clear status tracking through all stages","Build robust error handling with retry/refund options","On Monad: fast finality makes receiving messages feel instant"],"technicalNotes":"EIP-7786 defines a Gateway interface that abstracts bridge-specific implementations. Key components: send(destChain, receiver, message) for sending, messageStatus(messageId) for tracking, and standard events (MessageSent, MessageReceived, MessageExecuted). Bridge adapters implement the gateway interface, allowing apps to switch bridges by changing the adapter address."},"sources":[{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/eip-7786","type":"official-spec"},{"label":"Discussion","url":"https://ethereum-magicians.org/search?q=EIP-7786","type":"discussion"}],"urls":{"canonical":"https://www.eipsfordesigners.com/standards/EIP-7786","markdown":"https://www.eipsfordesigners.com/standards/EIP-7786/content.md","agent":"https://www.eipsfordesigners.com/standards/EIP-7786/agent.md","api":"https://www.eipsfordesigners.com/api/standards/EIP-7786","official":"https://eips.ethereum.org/EIPS/eip-7786","discussion":"https://ethereum-magicians.org/search?q=EIP-7786"},"freshness":{"lastReviewed":"2026-04-05","lastUpdated":"2026-04-05"}}