Skip to main content
Across Protocol enables instant token transfers between any two blockchain networks. Using a hub-and-spoke architecture with optimistic verification, Across combines speed, capital efficiency, and security to deliver the best cross-chain bridging experience.

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 via relaySpokePoolAdminFunction() through chain-specific adapters. Each SpokePool verifies the admin using chain-specific logic (address aliasing on Arbitrum, CrossDomainMessenger on Optimism, etc.).

Protocol participants

RoleDescription
DepositorEnd user who initiates a cross-chain transfer on the origin SpokePool
RelayerFills deposits on destination chain by fronting tokens, later reimbursed via merkle proof
Data WorkerOff-chain agent that validates deposits/fills, constructs merkle trees, and proposes root bundles to HubPool
DisputerMonitors proposed bundles and disputes invalid ones during the challenge period
LPDeposits L1 tokens into HubPool to earn relay fees

How it works

1

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
2

Relayer fills the deposit

A relayer sees the deposit event, evaluates profitability, and sends the output tokens to the recipient on the destination chain
3

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
4

Challenge period

The bundle enters a challenge period (default 2 hours) where disputers can challenge invalid bundles using UMA’s Optimistic Oracle
5

Bundle execution

After the challenge period, the bundle is executed: tokens are bridged to SpokePools, and relayers claim their refunds via merkle proofs
6

Slow fill fallback

If no relayer fills before the deadline, the protocol executes a slow fill from SpokePool reserves

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

Security

Across Protocol contracts have been continuously audited by OpenZeppelin. All audit reports are available at docs.across.to/resources/audits.
This contract should be deprecated by the year 2106, at which point uint32 timestamps will roll over. Before this date, the contract should be paused from accepting new root bundles.

License

All code is licensed under BUSL-1.1 unless specified differently in the file. Individual exceptions can be made by Risk Labs. For derivative work inquiries, contact [email protected].

Build docs developers (and LLMs) love