Across Protocol is an innovative Ethereum cross-chain solution that enables fast, decentralized asset transfers from Layer 2 rollups—such as Optimism, Arbitrum, and Boba Network—back to the Ethereum mainnet. By leveraging optimistic oracle mechanisms, bonded relayers, and one-sided liquidity pools, Across delivers a secure and efficient bridge experience for users navigating between L2s and L1. This article provides a comprehensive technical breakdown of the protocol’s v1 smart contract architecture, focusing on core components like BridgeAdmin, BridgeDepositBox, and BridgePool.
How Across Works: Cross-Chain Flow Overview
The primary function of Across is to allow users to move assets from L2 chains to Ethereum L1 with minimal delay and maximum security. The process involves several key roles:
- Depositor: Initiates the transfer by depositing tokens on an L2.
- Relayer: Executes the cross-chain message and delivers funds on L1.
- Liquidity Provider (LP): Supplies capital in L1 pools to back instant withdrawals.
- Disputor: Challenges invalid relay attempts using the optimistic oracle.
There are multiple pathways for deposit execution:
- Instant relay without dispute
- Instant relay with dispute
- Slow relay without dispute
- Slow relay with dispute
- Slow relay accelerated into instant relay
Regardless of the path, depositors are guaranteed not to lose funds. All L2 deposits are eventually bridged via native rollup bridges (e.g., Optimism or Arbitrum) into L1 liquidity pools, ensuring repayment to LPs.
👉 Discover how decentralized bridges are shaping the future of multi-chain finance.
Core Contract Structure and Components
The source code for Across v1 is hosted at github.com/across-protocol/contracts-v1, with active development underway for v2. The core directory structure includes:
contract-v1
├── contracts // Main protocol contracts
├── deploy // Deployment scripts
├── hardhat.config.js
├── helpers
├── networks // Deployment addresses across chains
└── package.jsonWe focus on two critical directories: contracts and deploy.
Key Directories in Contracts
common: Shared utilities including fixed-point math (FixedPoint.sol), reentrancy protection (Lockable.sol), and time manipulation for testing (Timer.sol).external: Interfaces for cross-domain messaging with different L2s.insured-bridge: Core logic for bridging operations.oracle: Integration points with UMA's Optimistic Oracle.
The main contracts analyzed below reside in insured-bridge.
BridgeAdmin: Central Governance Contract
Deployed on L1, BridgeAdmin.sol manages the entire system. It controls:
- Whitelisting of L1/L2 token pairs
- Configuration of relayer parameters
- Deployment and administration of L2 deposit boxes
Key state variables include:
finder: Points to UMA’s ecosystem registry for retrieving oracle addresses._depositContracts: Maps L2 network IDs to their respective deposit box and messenger contracts._whitelistedTokens: Maintains token mappings across layers.optimisticOracleLiveness: Dispute window duration.proposerBondPct: Bond percentage required for relayers.
Administrators can adjust LP fee rates, pause deposits, and update bridge delays. Cross-chain communication is handled through domain-specific messengers like Arbitrum_CrossDomainEnabled.sol and OVM_CrossDomainEnabled.sol.
BridgeDepositBox: L2 Deposit Handling
BridgeDepositBox.sol is an abstract contract deployed on each supported L2 (Optimism, Arbitrum, Boba). It handles two primary functions:
bridgeTokens: Native Asset Transfer
This method moves accumulated L2 tokens back to L1 via the chain’s native bridge. For example, on Arbitrum, it calls outboundTransfer on the standard bridge router. A guard function canBridge() ensures:
- Token is whitelisted
- Minimum time has passed since last bridge (to reduce gas costs)
deposit: User Initiated Withdrawal
When a user wants to withdraw from L2 to L1, they call deposit, specifying:
- Recipient address on L1
- Amount and token type
- Fee percentages for slow and instant relays
- Quote timestamp (valid within ±10 minutes)
The contract emits a FundsDeposited event containing all relevant data, which off-chain relayers monitor to fulfill the request.
👉 Learn how cross-chain interoperability is unlocking new DeFi opportunities.
BridgePool: Liquidity Management on L1
BridgePool.sol operates on Ethereum L1 and serves as the financial backbone of the system. It manages:
- Liquidity provisioning
- Relay execution (slow and instant)
- Dispute resolution via optimistic oracle
- Fee distribution
Constructor & Parameter Syncing
On deployment, BridgePool initializes with:
- Link to
BridgeAdmin - Underlying L1 token (e.g., WETH)
- LP fee rate per second
- Timer for test environments
It synchronizes critical parameters from both UMA’s ecosystem (optimisticOracle, store) and BridgeAdmin (identifier, proposerBondPct, etc.).
Adding and Removing Liquidity
Liquidity providers supply tokens to earn fees. The exchange rate between LP tokens and underlying assets is dynamic:
uint256 lpTokensToMint = (l1TokenAmount * 1e18) / _exchangeRateCurrent();The _exchangeRateCurrent() function accounts for:
- Accumulated but undistributed LP fees
- Current reserve levels (liquid vs utilized)
- Bonded amounts locked in pending relays
This ensures fair minting and redemption based on real-time pool utilization.
Slow Relay Execution
The relayDeposit() function allows a relayer to initiate a slow withdrawal. It:
- Validates fee caps (≤25% for each fee component)
- Checks for existing pending relays
- Locks proposer bond + final fee from relayer
- Reserves liquidity for payout
No actual transfer occurs yet—settlement happens after the challenge period unless accelerated.
Accelerated Relays
To enable near-instant withdrawals, relayers can call speedUpRelay(), paying the recipient directly minus fees. They front the full amount but are reimbursed upon successful settlement.
This creates a competitive market where fast relayers capture user fees, incentivizing speed and reliability.
Instant Relay: Combining Speed and Security
The relayAndSpeedUp() function combines both actions in one transaction, saving gas. It performs:
- Relay initiation (
relayDeposit) - Immediate payout (
speedUpRelay)
This dual mechanism ensures users get fast withdrawals while maintaining economic security through bonding and dispute windows.
Dispute Mechanism
If a relay is suspected fraudulent, a disputor calls disputeRelay(), triggering an optimistic oracle price request. The _requestProposeDispute() function:
- Submits a "true" price assertion (valid relay)
- Immediately disputes it with counter-evidence
- Locks bonds from both parties
After the challenge period, the correct party wins the rewards.
Settlement: Finalizing the Relay
Once the dispute window ends, anyone can call settleRelay() to finalize. The outcome depends on whether the relay was accelerated:
- Slow relay: Funds go directly to recipient; relayer gets fees + bond back.
- Instant relay: Instant relayer receives reimbursement plus their fee share.
Fees are allocated to LPs, updating reserve balances accordingly.
Deployment Process
The deploy/ folder contains eight scripts executed in sequence:
- Deploy
BridgeAdmin - Deploy WETH bridge pool
3–6. Deploy messengers for Optimism, Arbitrum, Boba
7–8. Deploy L2 deposit boxes
Each script ensures proper initialization and cross-contract linking.
Summary and Key Insights
Across Protocol exemplifies modern cross-chain design by combining:
- Optimistic security via UMA’s oracle
- Bonded relayers for trust-minimized messaging
- Single-sided liquidity pools for capital efficiency
Its modular architecture separates concerns cleanly across L1 and L2, enabling secure, fast withdrawals without relying on centralized custodians.
Frequently Asked Questions (FAQ)
Q: What makes Across different from other cross-chain bridges?
A: Unlike traditional two-way bridges, Across uses optimistic verification and bonded relayers to enable fast, secure withdrawals from L2 to L1 with economic finality.
Q: How does Across prevent fraud during instant relays?
A: Instant relayers must front funds but can be disputed if their data is invalid. The optimistic oracle resolves disputes, penalizing bad actors with lost bonds.
Q: Can anyone become a relayer in Across?
A: Yes—any participant can act as a relayer by staking required bonds and monitoring deposit events. This open model promotes decentralization.
Q: What happens if a dispute is incorrectly resolved?
A: The optimistic oracle relies on economic incentives—correct disputers are rewarded, so honest behavior is strongly incentivized.
Q: Is Across compatible with non-EVM chains?
A: Currently, Across supports EVM-based rollups like Optimism and Arbitrum. Expansion to non-EVM chains would require significant architectural changes.
Q: How are liquidity providers rewarded?
A: LPs earn fees from every relay transaction, distributed proportionally based on their share of the pool and utilization over time.
👉 Explore secure ways to participate in cross-chain DeFi ecosystems today.