{"id":"ERC-5164","name":"Cross-Chain Execution","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":"ERC-5164 defines MessageDispatcher.dispatchMessage() and destination MessageExecutor interfaces. The executor appends message context before invoking the target; bridge selection, timing, status, ordering, security, retries, and refunds are provider/application-specific.","officialUrl":"https://ercs.ethereum.org/ERCS/erc-5164","lastReviewed":"2026-09-18","lastUpdated":"2026-09-18","hasDetailedContent":true,"content":{"id":"ERC-5164","summary":"ERC-5164 standardizes message dispatch and destination execution interfaces for cross-chain applications. A bridge adapter can carry a dispatcher message to a destination executor, while bridge selection, timing, security, status, and recovery remain provider-specific.","applicability":{"whenToUse":["Your product addresses: each bridge has different interface.","Your product addresses: cross-chain UX is confusing.","The flow should deliver: a dispatcher message reaches a destination executor through a selected bridge adapter.","You are designing a cross-chain action experience with visible states and recovery paths."],"whenToAvoid":["The product never dispatches messages or state across chains.","The flow has no source/destination chain context to display.","The selected bridge/application provides no status or recovery data to surface.","The product only performs same-chain actions."]},"designerTakeaways":["You can design UI around the dispatcher/executor interface while disclosing the selected bridge's behavior.","You can design UI that delivers consistent cross-chain action UI.","You can design UI that delivers dispatchMessage() triggers remote execution."],"problemsSolved":[{"problem":"Each bridge has different interface","oldWay":"Learn Arbitrum bridge API, then Optimism, then Polygon...","newWay":"A common dispatcher/executor interface works across adapters that implement it","impact":"critical"},{"problem":"Cross-chain UX is confusing","oldWay":"Different UI patterns for each chain","newWay":"Consistent cross-chain action UI","impact":"critical"},{"problem":"Can't execute contracts across chains easily","oldWay":"Manual bridging, then manual execution","newWay":"MessageDispatcher sends a message to a destination MessageExecutor, which invokes the target call","impact":"high"},{"problem":"Hard to track cross-chain transactions","oldWay":"Check source chain, then destination, manually","newWay":"The application can correlate dispatcher/executor observations with its bridge-specific tracking data","impact":"high"},{"problem":"Bridge-specific lock-in","oldWay":"App only works with one bridge","newWay":"Swap bridge adapters without changing the application message interface","impact":"medium"}],"uxPatterns":[{"name":"Cross-Chain Action","description":"Execute action on another chain","mockup":"concept/bridge","userFlow":["User wants to stake on different chain","Sees current chain and destination","Views action journey (steps)","Sees time and fee estimates","Signs transaction on source chain","Message bridged to destination","Destination MessageExecutor invokes the target when the selected bridge/application delivers it"]},{"name":"Cross-Chain Transaction Tracker","description":"Track message as it crosses chains","mockup":"concept/bridge","userFlow":["User initiates cross-chain action","Sees progress through each stage","Source chain confirmed first","Bridge/application transit status is shown when available","Destination execution is confirmed from the executor or provider","Links to explorers for verification"]},{"name":"Bridge Selector","description":"Choose which bridge to use","mockup":"concept/bridge","userFlow":["User needs to cross chains","Views bridge options supplied by the application/provider","Compares time, cost, security","Selects preferred bridge","Proceeds with cross-chain action"]},{"name":"Cross-Chain Error Handling","description":"Show when cross-chain action fails","userFlow":["Cross-chain action fails on destination","User sees where failure occurred","Clear error explanation","Explains whether the selected bridge/application offers recovery; message failure alone does not refund assets","Shows only recovery options the provider actually supports"]},{"name":"Governance Cross-Chain","description":"DAO votes execute on multiple chains","mockup":"concept/bridge","userFlow":["DAO proposal passes","Execution begins on all chains","User sees status per chain","Each chain updates as executed","New parameters active when complete"]}],"uiComponents":[{"name":"CrossChainProgress","description":"Multi-step progress for cross-chain tx","states":["source-pending","bridging","destination-pending","complete","failed"],"props":["sourceChain","destChain","bridge","currentStep","timeRemaining"]},{"name":"BridgePicker","description":"Select from available bridges","states":["loading","ready","selected"],"props":["bridges[]","selectedBridge","onSelect"]},{"name":"ChainPairIndicator","description":"Visual showing source → destination","states":["connecting","connected","error"],"props":["sourceChain","destChain","status"]},{"name":"MessageTracker","description":"Track cross-chain message by ID","states":["searching","found","in-transit","delivered","failed"],"props":["messageId","sourceChain","destChain","status"]},{"name":"CrossChainError","description":"Display cross-chain failure with recovery","states":["source-failed","bridge-failed","dest-failed"],"props":["error","failedStep","recoveryOptions[]"]}],"antiPatterns":[{"pattern":"Not showing bridging time","why":"User expects instant, gets confused by delay","instead":"Always show estimated time prominently","severity":"critical"},{"pattern":"Hiding which chain user is on","why":"User signs thinking they're on destination","instead":"Bold chain indicators at all times","severity":"critical"},{"pattern":"No progress tracking after sign","why":"User doesn't know if it worked","instead":"Real-time progress through all stages","severity":"high"},{"pattern":"Silent cross-chain failures","why":"User thinks it worked, funds stuck","instead":"Explain the failed stage and show only bridge/application recovery actions that are actually available","severity":"critical"},{"pattern":"Auto-selecting bridge without showing","why":"User can't make informed time/cost choice","instead":"Show bridge options with tradeoffs","severity":"medium"}],"keyTakeaways":["ERC-5164 = standard interface for cross-chain messaging","Always show source chain, destination chain clearly","Display provider-specific time estimates with their source","Track source, delivery, and destination observations when available","Handle failures with bridge/application-specific recovery options"],"technicalNotes":"ERC-5164 defines MessageDispatcher.dispatchMessage(uint256 toChainId, address to, bytes data) and a destination MessageExecutor. The executor appends messageId, fromChainId, and from to the destination calldata before invoking the target. It does not define a CrossChainReceiver.processMessage interface, bridge discovery, universal ordering, asset escrow, or refunds; timing, security, tracking, and recovery remain bridge/application-specific.","lastUpdated":"2026-09-18","sources":[{"label":"ERC-5164 official specification","url":"https://ercs.ethereum.org/ERCS/erc-5164","type":"official-spec"}],"lastReviewed":"2026-09-18"},"sources":[{"label":"Official specification","url":"https://ercs.ethereum.org/ERCS/erc-5164","type":"official-spec"},{"label":"Discussion","url":"https://ethereum-magicians.org/search?q=ERC-5164","type":"discussion"},{"label":"ERC-5164 official specification","url":"https://ercs.ethereum.org/ERCS/erc-5164","type":"official-spec"}],"urls":{"canonical":"https://www.eipsfordesigners.com/standards/ERC-5164","markdown":"https://www.eipsfordesigners.com/standards/ERC-5164/content.md","agent":"https://www.eipsfordesigners.com/standards/ERC-5164/agent.md","api":"https://www.eipsfordesigners.com/api/standards/ERC-5164","official":"https://ercs.ethereum.org/ERCS/erc-5164","discussion":"https://ethereum-magicians.org/search?q=ERC-5164"},"freshness":{"lastReviewed":"2026-09-18","lastUpdated":"2026-09-18"}}