English
  • AfrikaansAfrikaans
  • عربيعربي
  • বাংলাবাংলা
  • CatalàCatalà
  • 简体中文简体中文
  • 中文(繁體)中文(繁體)
  • DanskDansk
  • NederlandsNederlands
  • EnglishEnglishcheck-icon
  • FilipinoFilipino
  • SuomalainenSuomalainen
  • FrançaisFrançais
  • DeutschDeutsch
  • ελληνικάελληνικά
  • हिंदीहिंदी
  • MagyarMagyar
  • IndonesiaIndonesia
  • ItalianaItaliana
  • 日本語日本語
  • 한국인한국인
  • LietuviųLietuvių
  • MelayuMelayu
  • PolskiPolski
  • PortuguêsPortuguês
  • РусскийРусский
  • CрпскиCрпски
  • SlovenskýSlovenský
  • EspañolEspañol
  • KiswahiliKiswahili
  • SvenskaSvenska
  • แบบไทยแบบไทย
  • TürkçeTürkçe
  • YкраїніYкраїні
  • اردواردو
  • Tiếng ViệtTiếng Việt

ERC-5164: Cross-Chain Execution

Arya .ETH
Published On Apr 15, 2026 | Updated On Apr 15, 2026 | 11 min read
Glowing Ethereum crystal with floating ERC-5164 text in a futuristic neon scene.
ERC-5164 defines a standard for cross-chain message execution, helping smart contracts interact across EVM-compatible blockchains!

Cross-chain apps keep running into the same awkward reality: every bridge “speaks” a different API, even when the goal is identical, execute a call on another EVM chain. ERC-5164 (also published as EIP-5164) is a proposal to standardize that core primitive: dispatch a message on chain A, execute it on chain B, without forcing every protocol to hand-roll custom adapters for each bridge. It is not trying to replace bridges. It is trying to make them interchangeable at the application layer.

TL;DR

ERC-5164 defines a simple, shared interface for cross-chain execution across EVM networks. It splits the system into a MessageDispatcher (source chain) and a MessageExecutor (destination chain), connected by whatever transport layer (bridge or messaging layer) you trust. The practical win is portability: the same app-side code can work across multiple transports, instead of rewriting logic for each bridge API.

  • The standard bakes in message tracking and replay protection at the interface level. A dispatcher must return a messageId, and executors must ensure a message is executed at most once, reverting on failures to allow retries. This creates a consistent “receipt + execution log” model that indexing and monitoring tools can rely on.

  • Receiver authentication is intentionally explicit: the executor appends origin metadata to calldata. The destination call receives the original payload plus packed (messageId, fromChainId, from) so the receiving contract can verify who really initiated the cross-chain action. This avoids the classic mistake of treating the bridge/executor as the “sender” and losing the true origin.

  • It already has real implementations and audits in the wild, centered on Ethereum ↔ major EVM L2s. PoolTogether / Generation Software published ERC-5164 “wrappers” for Ethereum→Optimism, Ethereum→Arbitrum, and Ethereum→Polygon using native bridging paths, plus a “how-to” showing dispatch + executor-aware receiving patterns.

  • For aggregators and cross-chain UX, it is a composability unlock. Instead of “bridge tokens” as the end of the story, ERC-5164 supports “bridge + execute,” enabling post-bridge actions like contract configuration, remote governance execution, vault rebalancing, or cross-chain settlement steps. The ecosystem gets a cleaner separation of concerns: apps integrate a standard, bridges compete on security/latency/cost behind it.

What is ERC-5164 and its Motivation?

ERC-5164 is a Standards Track ERC that “defines an interface that supports execution across EVM networks.” In plain terms: it standardizes how a contract on one EVM chain can request a contract call on another EVM chain, using a two-part pattern:

  • MessageDispatcher (origin chain): emits/forwards outbound messages.

  • MessageExecutor (destination chain): authenticates and executes inbound messages.

The actual transport can be a native bridge, a third-party bridge, or a messaging network, ERC-5164 does not dictate that choice. 

Status

The EIP page lists ERC-5164 as Last Call, created 2022-06-14, with a Last Call deadline of 2023-11-15, and still presented as being in peer review on the canonical EIPs site. 

What Happens During Last Call:

  • Final Review: The EIP is considered nearly complete, and this is the last chance for detailed feedback, technical checks, and to raise major issues.
  • Deadline: An EIP Editor sets a specific end date, typically two weeks.
  • Resolution of Concerns: Any significant technical issues raised must be resolved; otherwise, the EIP might revert to the "Review" stage for further work.
  • Consensus Building: It helps gauge community sentiment and ensures rough consensus among client implementers for network upgrades.

Motivation

Many Ethereum protocols need to coordinate state across multiple EVM chains, but bridge APIs are inconsistent, i.e., forcing custom integrations with different security and UX properties. ERC-5164 proposes a small common interface to increase code reuse and standardize how apps “speak” cross-chain execution. 

That motivation is extremely practical: protocols scale to multiple chains, then discover their cross-chain control plane becomes a spaghetti bowl of one-off adapters.

Origins and Authors

ERC-5164 is authored by:

  • Brendan Asselstine: GitHub bio describes him as Founder of Generation Software and co-founder of PoolTogether.

  • Pierrick Turelier: He has been involved in PoolTogether engineering and cross-chain work (commonly referenced under the handle @PierrickGT in ecosystem discussions).

  • Chris Whinfrey: known for Authereum Labs and as co-founder of Hop Protocol; Authereum publicly discussed shifting focus toward Hop and L2 composability.

A notable data point from Uniswap governance discussion is that ERC-5164 was described as being developed “in partnership with Hop Protocol and others,” framing it explicitly as a bridge-agnostic execution standard rather than a new bridge product. 

Technical Architecture

This ERC is mostly formed by two important interfaces, that we are going to review here.

MessageDispatcher (source chain)

A dispatcher is responsible for sending a message toward a destination chain. The EIP requires:

  • It must generate a unique messageId per message (or batch), unique across chains/dispatchers (the EIP suggests hashing (chainId, dispatcherAddress, messageNonce)).

  • It must emit MessageDispatched when dispatching.

  • It must revert for unsupported toChainId.

  • It may require payment (hence payable).

Core method:

function dispatchMessage(
  uint256 toChainId,
  address to,
  bytes calldata data
) external payable returns (bytes32 messageId);

And the event:

event MessageDispatched(
  bytes32 indexed messageId,
  address indexed from,
  uint256 indexed toChainId,
  address to,
  bytes data
);

MessageExecutor (destination chain)

An executor performs the actual destination call. The EIP requires:

  • Execute each messageId only once (no replays).

  • No ordering guarantees (messages may arrive out of sequence).

  • Revert if execution fails, so it can be retried later.

The most distinctive (and important) part is calldata augmentation:

The executor must append packed (messageId, fromChainId, from) to calldata so the receiver contract can verify the origin.  Concrete call shape is to.call(abi.encodePacked(data, messageId, fromChainId, from)); The executor also emits event MessageIdExecuted(uint256 indexed fromChainId, bytes32 indexed messageId); And defines standard errors like MessageIdAlreadyExecuted and MessageFailure to normalize failure handling. 

Because the executor appends origin metadata to calldata, receiver contracts need a consistent way to unpack and authenticate the real origin. The PoolTogether / GenerationSoftware reference implementation explicitly calls this out and recommends inheriting an ExecutorAware.sol helper to decode the appended sender. 

This is where the standard quietly upgrades safety: it nudges app developers into verifying (fromChainId, from) rather than trusting msg.sender on the destination chain.

Bridge-agnostic by Design

ERC-5164 intentionally does not define:

  • How messages are relayed off-chain/on-chain (optimistic proofs, validator sets, native L2 messaging, etc.).
  • What the trust assumptions are.
  • What finality/latency is acceptable.

That’s the point: the interface stays stable while transports compete and evolve. The EIP itself warns that “bridge trust profiles are variable,” and users must understand security depends on the implementation. 

Real implementations and ecosystem usage

There are some real implementations by PoolTogether and others, making this ERC a working product for the Ethereum and EVM ecosystem.

PoolTogether / Generation Software Wrappers

A widely referenced implementation is the ERC-5164 wrapper set from PoolTogether / GenerationSoftware. Their README states it includes implementations for:

  • Ethereum → Polygon
  • Ethereum → Optimism
  • Ethereum → Arbitrum

…and that they use “native” bridge solutions. 

It also documents a key real-world nuance: Arbitrum requires an additional “process” step where an EOA submits a transaction to process a previously dispatched message, splitting dispatch into two actions (dispatchMessage then processMessage). 

PoolTogether Protocol Usage Example

On-chain code for PoolTogether-related contracts includes explicit ERC-5164 usage patterns (for example, relaying RNG auction results across chains “through the 5164 message dispatcher”), illustrating the “bridge + execute” control plane idea in production-style contracts. 

Pontis (ETHGlobal showcase)

The ETHGlobal project “Pontis” describes itself as “an NFT bridge implementing the EIP5164 adapter for Hyperlane,” enforcing ERC-5164 interfaces, so messages can be dispatched on the source chain and executed on remote chains. 

This is a great example of the intended modularity: Hyperlane is the transport, ERC-5164 is the app-facing interface.

Hop Protocol Messaging

In Uniswap governance discussion, ERC-5164 is directly associated with Hop’s roadmap, with the claim that Hop v2 messaging would include ERC-5164 support. Separately, Hop’s own governance forum described building a “Core Messenger” module as part of a modularized Hop stack. Even if individual module details evolve, the meta-signal is clear: teams working on cross-chain messaging primitives viewed ERC-5164 as a viable standard interface layer.

Uniswap Governance Attention

Blockworks reported that Uniswap’s Bridge Assessment Committee evaluated “bridge-agnostic solutions,” explicitly listing ERC-5164 alongside other approaches, reflecting that major protocols were at least seriously considering standardized execution interfaces as part of their cross-chain strategy. 

How ERC-5164 can help the EVM ecosystem

Less adapter spaghetti, more portable cross-chain apps Most cross-chain systems fail at the boring layer: integration overhead. ERC-5164 reduces that by giving apps a stable “send message, execute there” interface, so switching transports is closer to a configuration change than a rewrite. The result is a more competitive bridge market because protocols are less locked-in by bespoke APIs. 

 

Standardized observability for cross-chain execution Returning messageId and emitting MessageIdExecuted makes cross-chain actions indexable in a uniform way. That is not just nice for dashboards, it is safety infrastructure for operational monitoring, incident response, and user support when cross-chain actions are delayed or retried. 

 

Cleaner security posture for receivers The calldata append pattern forces receivers to confront provenance. Instead of guessing how a given bridge exposes “origin sender,” the receiver has a normalized input: (fromChainId, from) and a messageId for replay protection. That consistency is exactly how you avoid subtle “works on Bridge A, breaks dangerously on Bridge B” authentication bugs. 

Why This Matters for Cross-chain Aggregators like Rango

Aggregators already solve a hard problem: choosing routes across liquidity and bridges. But the next frontier is actions, not just asset movement. ERC-5164 supports a more composable cross-chain UX where a route can end with a contract call on the destination chain that finalizes the user’s intent.

Concrete examples where ERC-5164-style execution becomes useful:

  • Bridge + stake / deposit: move assets to an L2, then execute a deposit into a vault or lending market in the same cross-chain “flow.”
  • Cross-chain governance execution: queue a governance decision on one chain and execute parameter changes on another, using standardized message tracking and destination-side authentication.
  • Operational control planes: automated keepers and relayers can dispatch standardized messages to rebalance, sync, or settle across EVM deployments, with better traceability than ad-hoc bridge calls.

The key is separation of responsibilities: Aggregators systems, like Rango Exchange, can focus on route intelligence, while the execution layer becomes standardized enough to plug into multiple transports with less bespoke surface area.

Conclusion

ERC-5164 is one of those deceptively small proposals that can shift a whole ecosystem’s ergonomics. It does not promise a magic bridge. It promises something more realistic: a shared contract-to-contract execution interface across EVM chains that bridges and messaging systems can implement, so applications stop rebuilding the same adapter layer forever. 

 

If you believe the EVM world is going to stay multi-chain (spoiler: it will), then standards like ERC-5164 are how we keep that world from turning into an integration junkyard. The bridge layer can keep innovating, but the application layer gets to breathe.

Resources and Further Readings

Frequently asked questions

Check out most commonly asked questions, addressed based on community needs. Can't find what you are looking for?
Contact us, our friendly support helps!

What’s the difference between ERC-5164 and “a bridge”?

A bridge (or messaging layer) is the transport mechanism that actually moves proofs/messages across chains. ERC-5164 is the application-facing standard interface that a transport can implement so that apps call dispatchMessage(...) and receive authenticated execution on the destination chain through a known shape. That distinction matters because it lets protocols upgrade or diversify their transports without rewriting core app logic each time.

How can I migrate an existing cross-chain dApp to ERC-5164 without rewriting everything?

A practical migration path is to treat ERC-5164 as a thin compatibility layer rather than a full rewrite of your cross-chain stack. You start by deploying one or more MessageDispatcher + MessageExecutor pairs that internally call the bridge SDK you already use, effectively wrapping your current transport in the ERC-5164 interface. Existing contracts that previously spoke directly to a bridge can be incrementally refactored to call dispatchMessage instead, while destination-side logic is moved into “executor-aware” receivers that unpack origin metadata and apply the same checks you already had. Over time, you can add more dispatchers wired to other bridges or native messaging layers, letting you A/B test transports or route by cost/security, all while keeping your app-side code pointed at the same interface. This staged approach is how projects like PoolTogether have been able to plug multiple bridges into a unified EIP-5164-based architecture without throwing away their existing integrations.

Why would a protocol choose ERC-5164 instead of a cross-chain messaging SDK?

Because the SDK might be great, but it is still a form of lock-in. ERC-5164 aims to standardize the “execute on remote chain” primitive so multiple messaging systems can compete behind the same interface. You still choose transports based on security and UX, but you do it with less re-integration cost — and you can even support multiple transports in parallel more cleanly.