Overview
TheEthereum_SpokePool is the L1-specific SpokePool variant deployed on Ethereum mainnet. Unlike L2 SpokePools that bridge tokens across chains, this contract facilitates L2→L1 transfers by directly transferring tokens to the withdrawal recipient (HubPool).
Contract: contracts/Ethereum_SpokePool.sol
Key Characteristics
- Same-chain deployment: Deployed on the same network as HubPool (Ethereum L1)
- Direct ownership: Owned directly by HubPool via
OwnableUpgradeable - No cross-chain bridging: Uses simple ERC20 transfers instead of bridge contracts
- No OFT messaging: Does not use LayerZero OFT; both
oftDstEidandoftFeeCapset to 0
Inheritance
- Inherits base
SpokePoolfunctionality - Uses
OwnableUpgradeablefor simple admin control (no cross-chain verification needed)
Constructor
_wrappedNativeTokenAddress: Address of WETH on Ethereum_depositQuoteTimeBuffer: Max age for deposit quote timestamps_fillDeadlineBuffer: Max future offset for fill deadlines
Initialization
_initialDepositId: Starting deposit nonce (0 for new deployments, incremented for re-deployments to avoid relay hash collisions)_withdrawalRecipient: Recipient of token withdrawals (typically the HubPool address)
crossDomainAdmin parameter is unused on Ethereum and set equal to _withdrawalRecipient.
Admin Verification
_requireAdminSender()
onlyOwner modifier to verify the caller is the contract owner (HubPool).
Why it’s different: Since this SpokePool is deployed on the same chain as HubPool, no cross-chain message verification is needed. The owner can call admin functions directly.
Token Bridging
_bridgeTokensToHubPool()
withdrawalRecipient (HubPool).
Why it’s different: No canonical bridge interaction required since tokens are already on L1. This is the simplest implementation among all SpokePool variants.
Unique Features
- Simplest variant: Minimal code due to same-chain deployment
- Direct transfers: No bridge contracts or cross-chain messages
- Standard ownership: Uses standard
Ownablepattern instead of cross-domain admin verification - L2→L1 facilitator: Primary purpose is to receive tokens bridged from L2s and transfer them to HubPool
Architecture Notes
- The Ethereum_SpokePool is owned by the HubPool contract
- Admin functions are called directly by HubPool without cross-chain relaying
- This contract serves as the final destination for tokens bridged from L2 SpokePools
- The
crossDomainAdminvariable exists for interface compatibility but is unused