- Paradigm: "Send bytes from Chain A to Chain B".
- Security: Relayer + Oracle / Light Client.
EIL (Ethereum Interop Layer) is different. It uses Account Abstraction (ERC-4337):
- Paradigm: "I seek to execute UserOperations on Chain B, based on proof of payment/action on Chain A".
- Mechanism: Vouchers. You lock funds/emit event on Chain A -> XLP (Liquidity Provider/Notary) signs a Voucher -> You use that Voucher to pay for gas/execution on Chain B.
- Security: The XLP is the trusted party (can be federated). The Smart Account (Safe, Kernel) provides the M-of-N user security.
- Solution: Use
CrossChainExecutor(EIL SDK). - Flow:
- Source (Chain A): Submit a
UserOpthat emits a specific event or locks tokens (e.g.,VoucherRequest). - Bridging: An off-chain XLP detects this and signs a
Voucher. - Destination (Chain B): Submit a
UserOpthat uses theVoucherto pay the Paymaster, and executes your target contract call (calldatato update governance).
- Source (Chain A): Submit a
- Solution: EIL treats all EVM chains identically via
ChainInfoconfiguration. - Adapter: In EIL, the "Adapter" is the AtomicSwapPaymaster. You deploy this once (same bytecode) on all supported chains. It handles the verification of XLP signatures.
- Interpretation: Entity moving the message to be secure/distributed.
- EIL Mapping:
- The User (Source of Truth): Use a Gnosis Safe (M-of-N) as your Smart Account identity on both chains. EIL supports
AmbireandKernel, and can supportSafevia adapters. - The Intermediary (XLP): Typically a high-availability bot. To make this M-of-N:
- Option A (Easier): Run the XLP as a standard server but limit its maximum value per voucher.
- Option B (Advanced): Customize the Paymaster to require signatures from M out of N known XLPs before accepting a voucher.
- The User (Source of Truth): Use a Gnosis Safe (M-of-N) as your Smart Account identity on both chains. EIL supports
- Solution: The EIL
CrossChainExecutoris a state machine. - States:
Idle->CheckPending->WaitingForVoucher->ReadyToSign->Submitted. - Event Sourcing: The SDK has an
EventsPollerthat reconstructs state fromVoucherRequestCreated(Chain A) andVoucherIssued(Chain B) events. This allows full replayability and auditing.
- Solution: Since the SDK emits structured events and logs, we can build a simple Node.js dashboard that indexes:
VoucherRequest(Pending)VoucherIssued(Success/Bridged)Latency(Time between Request block and Issued block)
- Start the relayer:
$ cd eil-poc-relayer
$ node index.js- Trigger the cross-chain action:
$ cd eil-poc-contracts
$ source .env
$ cast send 0x525f430483d8e5dbf82C6704410aB8c3e88EF240 "sendMessage(bytes)" 0x1234 --rpc-url $OP_SEPOLIA_RPC_URL --private-key $PRIVATE_KEY