What is Across Protocol?
Across is a cross-chain bridge that allows users to transfer tokens from one blockchain to another. Instead of waiting for slow canonical bridges, relayers front tokens on the destination chain and are later reimbursed via a settlement process on Ethereum L1. Key advantages:- Instant transfers: Relayers fulfill deposits in seconds rather than hours
- Capital efficient: Shared liquidity pool on L1 backs all chains
- Secure by design: Optimistic verification with UMA’s oracle for dispute resolution
- Production ready: Audited by OpenZeppelin with continuous security reviews
Hub-and-spoke architecture
Across uses a hub-and-spoke model where all cross-chain transfers are coordinated through Ethereum L1:HubPool (L1)
Central contract on Ethereum that manages LP liquidity, validates cross-chain transfers via merkle roots, and coordinates rebalancing across all SpokePools
SpokePool (L2)
Deployed on each supported chain to handle user deposits, relayer fills, and execution of merkle proofs for refunds
Chain Adapters
Stateless contracts that bridge tokens and relay messages between L1 and each L2 using native bridges
Cross-chain ownership
The HubPool on Ethereum L1 owns all L2 SpokePools. Admin functions are relayed cross-chain viarelaySpokePoolAdminFunction() through chain-specific adapters. Each SpokePool verifies the admin using chain-specific logic (address aliasing on Arbitrum, CrossDomainMessenger on Optimism, etc.).
Protocol participants
| Role | Description |
|---|---|
| Depositor | End user who initiates a cross-chain transfer on the origin SpokePool |
| Relayer | Fills deposits on destination chain by fronting tokens, later reimbursed via merkle proof |
| Data Worker | Off-chain agent that validates deposits/fills, constructs merkle trees, and proposes root bundles to HubPool |
| Disputer | Monitors proposed bundles and disputes invalid ones during the challenge period |
| LP | Deposits L1 tokens into HubPool to earn relay fees |
How it works
User deposits tokens
User locks tokens in the origin chain SpokePool and specifies the destination chain, output amount, and fee they’re willing to pay
Relayer fills the deposit
A relayer sees the deposit event, evaluates profitability, and sends the output tokens to the recipient on the destination chain
Data worker proposes bundle
The data worker validates all fills across chains, constructs merkle trees (relayer refunds, slow fills, pool rebalances), and proposes a root bundle to the HubPool
Challenge period
The bundle enters a challenge period (default 2 hours) where disputers can challenge invalid bundles using UMA’s Optimistic Oracle
Bundle execution
After the challenge period, the bundle is executed: tokens are bridged to SpokePools, and relayers claim their refunds via merkle proofs
Key features
UUPS upgradeable
All SpokePool contracts are UUPS upgradeable proxies, allowing the protocol to evolve while maintaining stable addresses
Optimistic verification
Uses UMA’s Optimistic Oracle for dispute resolution, assuming bundles are valid unless challenged
Multiple deposit flows
Supports standard deposits, gasless deposits, and sponsored CCTP flows for USDC transfers
Cross-chain messaging
Deposits can include arbitrary messages delivered to recipient contracts on the destination chain
Get started
Quickstart
Build and test the contracts locally
Architecture
Deep dive into the protocol design
Core contracts
Explore HubPool and SpokePool contracts