Skip to main content

Interop Bridge

note

Status: Design phase. Depends on: L1/L2 Node (Phases 1–3), Modular TX Pipeline, EIP-8141 Frame Transactions (Phase 3+).

The Interop Bridge enables cross-L2 interoperability based on the EIL (Ethereum Interop Layer) protocol. It is an add-on service component for the L1/L2 Node — a separate goroutine that observes chain state and injects EIP-8141 frame transactions into the local mempool. It never touches block validation, state transitions, or commitment.

It follows the same non-consensus service pattern as Caplin, TxPool, and Sentry. All cross-chain semantics live in smart contracts executed by the EVM; the bridge service only decides which transactions to build and submit.


Key Capabilities

Wallet-centric cross-chain operations: A user signs one message covering operations on multiple L2s (a merkle tree of per-chain ops, single signature over the root). The bridge verifies the signature and merkle proofs, finds available liquidity providers, and assembles a frame transaction that executes atomically on each destination chain.

Non-consensus by design: The bridge service can be deployed, upgraded, or disabled without any consensus-critical changes. Frame transactions it submits go through the normal mempool and are executed by the EVM like any other transaction.

Combined-mode advantage: In combined mode, XLP state is read directly from the L1 database with zero latency. No RPC cache needed. Multi-chain solvency checks are atomic. The AutoDisputer can detect insolvent liquidity providers across all chains locally and submit slashing proofs to L1 directly.


Separation of Concerns

Consensus-critical path (mempool → builder → EVM → commitment):
Knows about EIP-8141 frame txns, VERIFY/SENDER/DEFAULT modes, APPROVE opcode.
Does NOT know about vouchers, XLPs, fee auctions, or cross-chain semantics.
All cross-chain logic lives in smart contracts executed by the EVM.

Bridge service (non-consensus, separate goroutine):
Observes chain state via chainReader.
Decides: auction participation, dispute detection, relay routing.
Injects frame transactions into the local mempool via txInjector.

Architecture

The bridge service is composed of six internal subsystems:

SubsystemPurpose
XLPRegistryTracks Cross-chain Liquidity Providers (XLPs) and their stake on L1
VoucherPoolLifecycle management for cross-chain vouchers
AuctionBookReverse Dutch auction — fee discovery for cross-chain operations
FrameTxAssemblerBuilds EIP-8141 frame transactions from cross-chain operations
CrossChainRelayerP2P gossip relay for cross-chain operations in L2-only mode
DisputeResolverDetects insolvent XLPs and submits slashing proofs (combined mode only)

Key interfaces:

type XLPStateReader interface {
GetXLPStake(xlp common.Address, chainId uint64) (*uint256.Int, error)
IsXLPActive(xlp common.Address) (bool, error)
GetSolvency(xlp common.Address) (*SolvencyReport, error)
}
// L1/Combined: reads directly from L1 DB. L2-only: remote RPC with cache.

type TxInjector interface {
Submit(tx types.Transaction) error
}

Operating Modes


Active subsystems: L1StakeMonitor (indexes L1 XLP staking events), DisputeIndexer (tracks 8-day dispute windows).

RPC methods: interop_getXLPStake, interop_getActiveXLPs, interop_getDisputeStatus.

No cross-chain assembly or P2P relay in this mode — observation only.


Active subsystems: XLPCacheRefresher (polls L1 RPC for XLP state, refreshes per L1 epoch ~6.4 min), VoucherTracker, AuctionEngine, FrameTxAssembler, CrossChainRelayer.

L1 dependency: --interop.l1-rpc=http://... (remote, cached).

P2P relay gossips cross-chain operations to peer L2 nodes via new message types: CrossChainOpMsg, VoucherGossipMsg, XLPHeartbeatMsg. An "interop" ENR field advertises which chain IDs this node serves.


All L1 + L2 subsystems, plus:

  • Direct L1 DB reads — zero-latency XLP state, no RPC cache needed
  • Per-chain mempool injectionTxInjector routes to the correct chain's mempool
  • Atomic cross-chain solvency checks — all chain balances available locally
  • AutoDisputer — detects insolvent XLPs across chains and submits slashing proofs to L1 directly
  • No P2P relay needed — direct mempool injection across local chains

This is the combined mode's concrete advantage: zero-latency cross-chain state reads and atomic multi-chain operations.

Cross-Chain Operation Flow

User signs ONE message covering operations on multiple L2s
→ merkle tree of per-chain ops, single signature over the root

Bridge service receives via interop_sendCrossChainOps RPC:
1. Verify merkle proofs for each op
2. Verify single signature covers merkle root
3. Check XLP registry for available liquidity providers
4. Post voucher request to AuctionBook
5. AuctionEngine claims if profitable (XLP mode)
6. FrameTxAssembler builds type 0x06 frame transaction:
frame[0] VERIFY: validate(merkleRoot, proof, sig)
frame[1] SENDER: CrossChainPaymaster.lockFunds()
frame[2] DEFAULT: user's actual call
7. txInjector.Submit(frameTx) → local mempool
8. Relay peer-chain ops via P2P (L2 mode) or direct injection (Combined)

Smart Contracts

The bridge service depends on deployed smart contracts. These are standard Solidity contracts — Erigon does not need to know about their semantics, only that they conform to the EIP-8141 frame transaction interface.

ContractChainPurpose
L1CrossChainStakeManagerL1XLP registration, staking, slashing, dispute resolution
CrossChainPaymasterEach L2Accepts vouchers, locks/releases funds
MultichainAccountEach L2Validates merkle proof signatures
ETHLiquidityEach L2XLP liquidity pool

Development Plan

PhaseScopePrereqs
1Service skeleton + L1StakeMonitor (index-only)L1/L2 Node Phase 1
2VoucherTracker + XLPRegistry cacheL1/L2 Node Phase 3 (L1DataSource)
3FrameTxAssembler + TxInjectorEIP-8141 in mempool + EVM
4AuctionEngineBridge Phase 3, testnet contracts
5CrossChainRelayer (P2P gossip)L1/L2 Node Phase 2 (L2 P2P)
6Combined mode coordinationL1/L2 Node Phase 3 + Bridge Phase 4
7AutoDisputer (combined mode only)Bridge Phase 6

Critical path: EIP-8141 is the long pole — Bridge Phases 3–4 cannot start without frame transaction support in the mempool and EVM. Phases 1–2 and 5 can proceed independently.