Overview
Across Protocol uses a hub-and-spoke model with optimistic verification to enable fast, secure cross-chain token transfers. This architecture centralizes liquidity and governance on Ethereum L1 while deploying lightweight contracts on multiple L2s and sidechains.Core Components
HubPool (Ethereum L1)
The HubPool is the central contract deployed on Ethereum that:- Manages LP Liquidity: Accepts deposits from liquidity providers who earn fees for funding relays
- Validates Transfers: Uses merkle root bundles to verify cross-chain transfers via optimistic verification
- Coordinates Rebalancing: Sends tokens to SpokePools across all supported chains to refund relayers
- Resolves Disputes: Integrates with UMA’s Optimistic Oracle for dispute resolution
- Owns All SpokePools: Acts as the cross-chain administrator for all deployed SpokePools
addLiquidity()/removeLiquidity(): LP liquidity management (contracts/HubPool.sol:449, 476)proposeRootBundle(): Data worker submits merkle roots (contracts/HubPool.sol:560)executeRootBundle(): Executes pool rebalances and relays roots to SpokePools (contracts/HubPool.sol:612)disputeRootBundle(): Challenge invalid proposals during liveness period (contracts/HubPool.sol:715)relaySpokePoolAdminFunction(): Send admin messages to SpokePools (contracts/HubPool.sol:249)
SpokePool (Each L2/Sidechain)
SpokePools are deployed on every supported chain and handle:- User Deposits: Accept tokens from depositors initiating cross-chain transfers
- Relayer Fills: Allow relayers to fulfill deposits by sending tokens to recipients
- Merkle Leaf Execution: Process relayer refunds and slow fills using merkle proofs
- Cross-Chain Messages: Receive root bundles and admin functions from HubPool
deposit()/depositV3(): User initiates cross-chain transfer (contracts/SpokePool.sol:501, 579)fillRelay(): Relayer fulfills deposit on destination chainrelayRootBundle(): Receive merkle roots from HubPool (contracts/SpokePool.sol:343)executeRelayerRefundLeaf(): Relayer claims refund with merkle proofexecuteSlowRelayLeaf(): Protocol fulfills deposit from reserves
Chain Adapters
Chain adapters are stateless contracts called viadelegatecall from the HubPool to bridge tokens and relay messages to each L2. Located in contracts/chain-adapters/.
Purpose:
- Wrap each chain’s native bridge (Arbitrum Inbox, OP Stack messenger, Polygon FxPortal, etc.)
- Provide a unified interface for cross-chain communication
- Support multiple bridge types: native bridges, CCTP, LayerZero OFT, Wormhole
Supported Chains
Across Protocol supports numerous chains through chain-specific SpokePool implementations:Arbitrum
Arbitrum_SpokePool.solOptimism
Optimism_SpokePool.solOP Stack
OP_SpokePool.solPolygon
Polygon_SpokePool.solPolygon zkEVM
PolygonZkEVM_SpokePool.solZkSync
ZkSync_SpokePool.solBase
Uses
OP_SpokePool.solLinea
Linea_SpokePool.solScroll
Scroll_SpokePool.solBlast
Blast_SpokePool.solBoba
Boba_SpokePool.solEthereum
Ethereum_SpokePool.solLisk
Lisk_SpokePool.solWorld Chain
WorldChain_SpokePool.solLens
Lens_SpokePool.solInk
Ink_SpokePool.solCher
Cher_SpokePool.solUniversal
Universal_SpokePool.solSpokePool.sol contract and overrides the _requireAdminSender() function to implement chain-specific admin verification logic.
Security Model
Optimistic Verification
Optimistic Verification
The protocol uses optimistic verification with a challenge period (default 2 hours) where proposed root bundles can be disputed. If a dispute occurs, UMA’s Optimistic Oracle resolves it.
UUPS Upgrades
UUPS Upgrades
All SpokePools use the UUPS (Universal Upgradeable Proxy Standard) pattern, allowing logic upgrades without changing contract addresses or storage. Only the HubPool can authorize upgrades.
Cross-Chain Ownership
Cross-Chain Ownership
The HubPool on Ethereum L1 owns all SpokePool contracts across all chains. Admin functions are relayed cross-chain via chain adapters with proper verification.
Bond Mechanism
Bond Mechanism
Data workers must stake a bond when proposing root bundles. Bonds are slashed if proposals are invalid and returned after successful execution.
Development Frameworks
Foundry
Primary framework for new tests and deployment scripts. Use
FOUNDRY_PROFILE=local-test for testing.Hardhat
Legacy framework for older tests. The codebase is migrating to Foundry.
Project Structure
Related Documentation
Hub-and-Spoke Model
Learn about the hub-and-spoke architecture in detail
Protocol Flow
Understand the complete flow from deposit to refund
Roles
Explore the different participant roles in the protocol