Overview
Across Protocol provides two adapters for OP Stack chains:Optimism_Adapter- Legacy adapter for Optimism mainnet with custom bridge supportOP_Adapter- Modern adapter for all OP Stack chains (Base, Mode, Zora, etc.)
Optimism_Adapter
Overview
The original adapter for Optimism mainnet with support for custom token bridges (DAI, SNX). Location:contracts/chain-adapters/Optimism_Adapter.sol
Constructor
_l1Weth- WETH contract on L1 (unwrapped before bridging)_crossDomainMessenger- L1CrossDomainMessenger system contract_l1StandardBridge- L1StandardBridge for token transfers_l1Usdc- USDC token address for CCTP bridging_cctpTokenMessenger- Circle CCTP TokenMessenger contract
Constants
Core Functions
relayMessage()
Sends cross-chain messages via the CrossDomainMessenger.- Uses
CrossDomainEnabledhelper contract - Messages are sent to target contract on L2
- Gas limit is fixed at 200,000
- No ETH is sent to target (msg.value is for gas only)
relayTokens()
Bridges tokens to Optimism with multi-bridge support.Custom Token Bridges
DAI Bridge
L1 Address:0x10E6593CDda8c58a1d0f14C5164B376352a55f2F
DAI uses MakerDAO’s custom bridge instead of the standard bridge.
Synthetix (SNX) Bridge
L1 Address:0x39Ea01a0298C315d149a490E34B59Dbf2EC7e48F
SNX uses Synthetix’s custom bridge with a different interface:
Bridge Selection Logic
OP_Adapter
Overview
Modern adapter for all OP Stack chains including Base, Mode, Zora, Lisk, and others. Supports both bridged USDC (via OP USDC Bridge) and native USDC (via CCTP). Location:contracts/chain-adapters/OP_Adapter.sol
Constructor
_l1Weth- WETH contract on L1_l1Usdc- USDC token address on L1_crossDomainMessenger- L1CrossDomainMessenger for the target OP Stack chain_l1StandardBridge- L1StandardBridge for the target chain_l1USDCBridge- OP USDC Bridge adapter (for bridged USDC) oraddress(0)_cctpTokenMessenger- CCTP TokenMessenger (for native USDC) oraddress(0)_recipientCircleDomainId- Circle domain ID for the destination chain
Core Functions
relayMessage()
Identical toOptimism_Adapter:
relayTokens()
Supports WETH, USDC (bridged or native), and standard ERC20s:OP USDC Bridge
Some OP Stack chains use bridged USDC instead of native USDC. Interface:- Base (transitioning to native)
- Mode
- Zora
CrossDomainEnabled
Both adapters inherit fromCrossDomainEnabled, a modified version of Optimism’s helper contract with immutable state variables for delegatecall compatibility.
Location: contracts/chain-adapters/CrossDomainEnabled.sol
CrossDomainMessenger Interface
sendMessage()- Sends message from L1 to L2xDomainMessageSender()- Returns original L1 sender (used by SpokePool to verify admin)
Admin Verification on L2
OP Stack SpokePools verify admin messages usingxDomainMessageSender():
- Message sender must be the CrossDomainMessenger contract
- The cross-domain sender must be the HubPool address
Supported Chains
Optimism_Adapter
- Optimism (Chain ID: 10)
OP_Adapter
- Base (Chain ID: 8453)
- Mode (Chain ID: 34443)
- Lisk (Chain ID: 1135)
- Zora (Chain ID: 7777777)
- Blast (uses custom
Blast_Adaptervariant) - And other OP Stack chains
Gas Considerations
Fixed Gas Limit
Both adapters use a fixed L2 gas limit of 200,000:- Token transfers via standard bridge
- Admin function calls to SpokePool
- CCTP transfers
No ETH Balance Check
Unlike Arbitrum adapter, OP adapters don’t require pre-funding ETH. Themsg.value sent with the transaction covers L2 gas costs.
Examples
Relay Admin Message to Base SpokePool
Bridge WETH to Optimism
Bridge USDC to Base (Bridged USDC)
Related Contracts
Optimism_SpokePool.sol- SpokePool for Optimism mainnetBase_Adapter.sol- Specialized adapter for Base (if different)Mode_Adapter.sol- Specialized adapter for Mode (if different)Blast_Adapter.sol- Custom adapter for Blast with yield features