Cross-chain / Bridge·EVM
Hop Protocol
Rollup-to-rollup token bridge using hToken intermediates and bonder-fronted liquidity. Lets users move ETH, USDC, USDT, DAI, and MATIC between Ethereum L1 and major L2s (Arbitrum, Optimism, Base, Polygon, Linea) without waiting for the rollup challenge period.
- 01fast L2 <-> L2 token transfers
- 02ETH/USDC/USDT canonical bridging without 7-day exit
- 03rollup-native swap UX
- 04stablecoin bridging with bonder-fronted liquidity
- 05minimal-dependency embedded bridge
- pnpm add @hop-protocol/sdk ethers
| Variable | Scope | Description |
|---|---|---|
| HOP_RPC_URL_ETHEREUM | Server | Ethereum L1 RPC URL used by the Hop SDK signer when bridging from / to mainnet. |
Use `@hop-protocol/sdk`: `const hop = new Hop('mainnet', signer)`. Get a bridge with `const bridge = hop.bridge('USDC')`, then quote via `bridge.getSendData(amountIn, fromChain, toChain)` — returns `amountOut`, `bonderFee`, `adjustedBonderFee`, and `estimatedReceived`. Send with `bridge.send(amountIn, fromChain, toChain, { recipient, deadline, destinationDeadline, slippage })`. The SDK handles ERC20 approvals to the L2_AmmWrapper / L1_Bridge and submits the deposit. Track via `bridge.getTransferStatus(txHash, fromChain)` until `bonded === true`. Supported tokens: ETH, USDC (including native CCTP-backed routes on some lanes), USDT, DAI, MATIC. Chain identifiers are STRINGS: `'ethereum'`, `'arbitrum'`, `'optimism'`, `'base'`, `'polygon'`, `'linea'`.
- ⚑Hop only supports a fixed set of tokens (ETH, USDC, USDT, DAI, MATIC, rETH on some lanes) — calling `hop.bridge('FOO')` for an unsupported asset throws. Always whitelist supported tokens client-side.
- ⚑L1 -> L2 transfers are nearly instant via bonders; L2 -> L1 has a 7-day challenge window unless you accept the bonder-fronted exit fee. Communicate both options to users.
- ⚑`bonderFee` is variable and can spike during congestion or when bonder liquidity is low — re-quote immediately before signing and reject if `amountOut < userMinimum`.
- ⚑If no bonder is online for your route, the transfer falls back to the slow path (rollup-native withdrawal time). Surface the worst-case ETA, not just the bonded ETA.
- ⚑Hop's TVL has shrunk significantly post-2024; some lanes have thin AMM liquidity causing high slippage on large transfers — check `amountOutMin` carefully.
- ⚑Hop v2 SDK is in beta and the canonical npm package remains `@hop-protocol/sdk` (v1) — do not mix imports.
- ⚑All chains supported are EVM rollups + Polygon PoS only — no Solana, Cosmos, or non-rollup L1 support.