Overview
TheArbitrum_SpokePool is deployed on Arbitrum One and Arbitrum Nova. It implements Arbitrum’s unique address aliasing mechanism for cross-chain admin verification and integrates with Arbitrum’s native token gateway for bridging tokens back to L1.
Contract: contracts/Arbitrum_SpokePool.sol
Key Characteristics
- Address aliasing: Uses Arbitrum-specific L1→L2 address transformation for admin verification
- Custom bridge integration: Integrates with Arbitrum’s L2 Gateway Router for token withdrawals
- Token whitelisting: Maintains mapping of L2→L1 token addresses required by Arbitrum bridge
- CCTP support: Integrates Circle’s CCTP for USDC transfers
- OFT support: Supports LayerZero OFT tokens as alternative bridging mechanism
Inheritance
- Inherits base
SpokePoolfunctionality - Inherits
CircleCCTPAdapterfor USDC bridging via Circle CCTP
Constructor
_wrappedNativeTokenAddress: Address of WETH on Arbitrum_depositQuoteTimeBuffer: Max age for deposit quote timestamps_fillDeadlineBuffer: Max future offset for fill deadlines_l2Usdc: Circle USDC address on Arbitrum (or 0x0 to disable CCTP)_cctpTokenMessenger: Circle TokenMessenger contract for CCTP bridging_oftDstEid: LayerZero endpoint ID for OFT messaging_oftFeeCap: Maximum fee for OFT transfers
Initialization
_initialDepositId: Starting deposit nonce_l2GatewayRouter: Address of Arbitrum’s L2 Gateway Router for token bridging_crossDomainAdmin: L1 HubPool address (will be aliased for verification)_withdrawalRecipient: Address receiving bridged tokens on L1 (typically HubPool)
Admin Verification
_requireAdminSender()
onlyFromCrossDomainAdmin Modifier
msg.sender address is transformed using an alias to prevent address collisions:
Token Bridging
_bridgeTokensToHubPool()
- CCTP for USDC: Uses Circle’s Cross-Chain Transfer Protocol for native USDC
- LayerZero OFT: For tokens with configured OFT messengers
- Arbitrum Gateway: Default mechanism using
l2GatewayRouter.outboundTransfer()
Token Whitelisting
Arbitrum’s bridge requires specifying the L1 token address when bridging. The contract maintains a mapping:whitelistToken()
Admin Functions
setL2GatewayRouter()
State Variables
Events
Unique Features
- Address aliasing: Arbitrum’s unique L1→L2 address transformation for security
- Multi-bridge support: CCTP, OFT, and native Arbitrum bridge
- Token mapping requirement: L2 tokens must be whitelisted with their L1 counterparts
- Gateway router pattern: Uses Arbitrum’s router contract to route to appropriate token gateways
Architecture Notes
- HubPool on L1 sends cross-chain messages through Arbitrum’s Inbox contract
- The L2 message sender address is aliased by adding a fixed offset
- The
onlyFromCrossDomainAdminmodifier checks the aliased address - Token bridging prioritizes CCTP for USDC, then OFT, then native gateway
- Requires pre-configuration of L2→L1 token mappings via
whitelistToken()
Related Contracts
- SpokePool - Base contract
- Arbitrum Adapter - L1→L2 message relay from HubPool