Purpose
Chain adapters are stateless contracts that enable the HubPool on Ethereum L1 to bridge tokens and relay messages to various L2 networks and sidechains. Each adapter wraps a chain’s native bridge protocol, providing a unified interface for cross-chain operations.Architecture
Delegatecall Pattern
Adapters are called viadelegatecall from the HubPool contract, executing the adapter’s logic within the HubPool’s context. This means:
- Adapters access the HubPool’s token balances and state
- Events are emitted from the HubPool’s address
- Reentrancy protection is handled by the HubPool, not the adapters
- Adapters must use
immutablevariables instead of storage
Common Interface
All adapters implement theAdapterInterface with two core functions:
Chain-Specific Bridge Wrapping
Each adapter wraps the native bridge interface for its target chain:| Chain | Native Bridge | Adapter Implementation |
|---|---|---|
| Arbitrum | Inbox (Retryable Tickets) | Arbitrum_Adapter |
| Optimism | CrossDomainMessenger | Optimism_Adapter |
| OP Stack chains | CrossDomainMessenger | OP_Adapter |
| Polygon | FxPortal + RootChainManager | Polygon_Adapter |
| Solana | CCTP only | Solana_Adapter |
Multiple Bridge Support
Adapters support multiple bridging mechanisms for different tokens:- Native bridge - Chain-specific canonical bridge (default)
- CCTP (Circle) - For USDC bridging via Circle’s protocol
- LayerZero OFT - For omnichain fungible tokens
- Custom bridges - Token-specific bridges (e.g., DAI on Optimism, SNX)
Polygon_Adapter.relayTokens():
Gas and Fee Handling
Adapters require ETH to pay for L2 gas execution:Events
Adapters emit standardized events:Available Adapters
- Arbitrum Adapter - Nitro retryable tickets with address aliasing
- Optimism Adapter - Legacy OP Stack implementation
- OP Adapter - Modern OP Stack chains (Base, Mode, etc.)
- Polygon Adapter - FxPortal and Plasma bridges
- Solana Adapter - CCTP-only cross-chain messaging to SVM
Implementation Notes
Security Considerations
- No reentrancy guards - Delegatecall context means HubPool handles reentrancy protection
- Immutable state - All adapter configuration must be immutable (constructor-set)
- Token approvals - Adapters approve bridge contracts, not the router
- ETH handling - Adapters check HubPool’s ETH balance before bridging
Constructor Pattern
Adapters receive all configuration in the constructor:Source Code
Adapter contracts are located incontracts/chain-adapters/ in the Across Protocol repository.