Universal Router 2.1.2
Universal Router 2.1.2 is the supported release for the 2.1 line and supersedes 2.1.1.
The router source is unchanged from 2.1.1. contracts/ is byte-identical between the two tags; the only differences are the pinned v4-periphery revision and the compiler settings needed to build it. There are no calldata or ABI changes, so 2.1.1 integrators can repoint at the 2.1.2 addresses without re-encoding anything.
What changed
- Pins
v4-peripheryto #564. - Reduces the
UniversalRouteroptimizer runs to 3000 via a dedicated compilation profile. 2.1.1 built at the default 4444; with the updated periphery that setting produces a 24,704-byte runtime, 128 bytes over the EIP-170 limit. At 3000 the runtime is 24,380 bytes. - Aligns the Hardhat optimizer setting with the shipped artifact so gas snapshots describe what is actually deployed.
Deploy parameter fixes
- Sepolia, Base Sepolia and Unichain Sepolia previously referenced v4
PoolManagerandPositionManageraddresses with no onchain activity. A router deployed against those cannot execute any v4 command. All three now point at the live deployments, confirmed by log activity rather than by documentation. - Adds deploy parameters for Arc, MegaETH, Robinhood and Tempo.
Deployments
Deployed to 24 chains from this repository, plus HyperEVM via the Uniswap contracts monorepo. Every address was verified onchain: a 24,380-byte runtime and verified source, on Etherscan V2 where available and Sourcify otherwise. For the 24 deployed here, all ten constructor parameters were checked against the deploy script.
| Chain | Address |
|---|---|
| Ethereum | 0x23617e59A5925b2A4Bf75d73ff6711cD0b29De85 |
| Arbitrum | 0x2d01411773c8C24805306E89A41F7855C3c4Fe65 |
| Optimism | 0xC09255D86DB563cBc11C2fCf4a0C512e160111B4 |
| Base | 0xd6145b2D3F379919E8CdEda7B97e37c4b2Ca9c40 |
| Polygon | 0xDc264714F68d84CF29BC605589405E78bDBE7C9f |
| BNB Chain | 0xDc264714F68d84CF29BC605589405E78bDBE7C9f |
| Linea | 0xDc264714F68d84CF29BC605589405E78bDBE7C9f |
| Avalanche | 0x661E93cca42AfacB172121EF892830cA3b70F08d |
| Blast | 0x661E93cca42AfacB172121EF892830cA3b70F08d |
| Soneium | 0x661E93cca42AfacB172121EF892830cA3b70F08d |
| Ink | 0x661E93cca42AfacB172121EF892830cA3b70F08d |
| Worldchain | 0xF025e0Fe9E331A0eF05c2ad3C4E9C64b625cda6f |
| Zora | 0xF025e0Fe9E331A0eF05c2ad3C4E9C64b625cda6f |
| Celo | 0xe2023F3FA515cF070e07fD9d51c1d236e07843f4 |
| Unichain | 0xD1b797D92d87B688193A2B976eFc8D577D204343 |
| Monad | 0xa6CE4F10d83dBdDAc17E68e1837ca9cE6a1b596e |
| X Layer | 0x1cd182C94fcF42277B80DBB9060F88024809E61E |
| Arc | 0x8702463e73f74d0b6765aBceb314Ef07aCb92650 |
| Robinhood | 0x204FAca1764B154221e35c0d20aBb3c525710498 |
| MegaETH | 0xAedd1CF4C14e833140A61E9C0d2b73a64795c823 |
| Tempo | 0x182a927119D56008d921126764bF884221b10f59 |
| HyperEVM | 0xed270a1bcdc63cf1356d695e7f40961d4819d6bf |
| Sepolia | 0x7E4f6c5e954Da5c61B3423D81E2277431Ac043f3 |
| Base Sepolia | 0x8702463e73f74d0b6765aBceb314Ef07aCb92650 |
| Unichain Sepolia | 0xDf38F24fE153761634Be942F9d859f3DBA857E95 |
The HyperEVM deployment was carried out separately from the 24 above, using a deploy script that is not committed to this repository. It was built from this tag: its runtime is byte-identical to the deployments above once immutables, the contract address, the chain id and the cached EIP-712 domain separator are accounted for, with the same compiler version and optimizer settings.
Addresses are not uniform across chains. Deployment uses CREATE, so the address depends on the deployer nonce, and chains whose deploy parameters left unsupported unset deployed an UnsupportedProtocol stub first, shifting the router by one nonce.
Full changelog: 2.1.1...2.1.2