Canonical contract addresses for major EVM protocols. Reference skill for agents building integrations across Ethereum, Arbitrum, Optimism, Base, and Polygon.
Last verified: February 2026 — All addresses verified onchain via cast code. Always re-verify before mainnet use.
- Addresses differ across chains — USDC on Arbitrum is NOT the same address as USDC on Ethereum. Never assume cross-chain address parity except for contracts deployed via CREATE2 at deterministic addresses.
- Bridged vs. native tokens — Many chains have both a bridged USDC (USDC.e) and a native USDC. Using the wrong one causes failed swaps and lost funds. This reference lists the canonical native version where available.
- Checksums matter — EIP-55 mixed-case checksums prevent sending to mistyped addresses. Always use checksummed addresses.
- Proxy vs. implementation — Most protocol addresses listed here are proxies. The implementation behind them can change via governance. Verify the proxy's current implementation if you need the ABI.
- Uniswap has multiple routers — SwapRouter (V3-only), SwapRouter02 (V2+V3), and Universal Router (V2+V3+NFTs) are different contracts. Most integrations should use Universal Router.
| Chain |
Address |
Notes |
| Ethereum |
0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 |
Native USDC, 6 decimals |
| Arbitrum |
0xaf88d065e77c8cC2239327C5EDb3A432268e5831 |
Native USDC (not USDC.e) |
| Optimism |
0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85 |
Native USDC (not USDC.e) |
| Base |
0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 |
Native USDC |
| Polygon |
0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359 |
Native USDC (not USDC.e) |
| Chain |
Address |
Notes |
| Arbitrum |
0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8 |
Legacy bridged, being deprecated |
| Optimism |
0x7F5c764cBc14f9669B88837ca1490cCa17c31607 |
Legacy bridged |
| Polygon |
0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174 |
Legacy bridged |
| Chain |
Address |
Notes |
| Ethereum |
0xdAC17F958D2ee523a2206206994597C13D831ec7 |
6 decimals, no return value on transfer |
| Arbitrum |
0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9 |
Bridged USDT |
| Optimism |
0x94b008aA00579c1307B0EF2c499aD98a8ce58e58 |
Bridged USDT |
| Polygon |
0xc2132D05D31c914a87C6611C10748AEb04B58e8F |
Bridged USDT |
| Chain |
Address |
Notes |
| Ethereum |
0x6B175474E89094C44Da98b954EedeAC495271d0F |
18 decimals |
| Arbitrum |
0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1 |
Bridged DAI |
| Optimism |
0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1 |
Same address as Arbitrum (CREATE2) |
| Polygon |
0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063 |
Bridged DAI |
| Chain |
Address |
Notes |
| Ethereum |
0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 |
Canonical WETH9 |
| Arbitrum |
0x82aF49447D8a07e3bd95BD0d56f35241523fBab1 |
WETH on Arbitrum |
| Optimism |
0x4200000000000000000000000000000000000006 |
Predeploy address |
| Base |
0x4200000000000000000000000000000000000006 |
Predeploy address (same as OP) |
| Polygon |
0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619 |
Bridged WETH |
| Chain |
Address |
Notes |
| Ethereum |
0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0 |
Canonical wstETH |
| Arbitrum |
0x5979D7b546E38E9aB8E801a884a0710832C3fD7b |
Bridged wstETH |
| Optimism |
0x1F32b1c2345538c0c6f582fCB022739c4A194Ebb |
Bridged wstETH |
| Base |
0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452 |
Bridged wstETH |
| Polygon |
0x03b54A6e9a984069379fae1a4fC4dBAE93B3bCCD |
Bridged wstETH |
| Contract |
Ethereum |
Arbitrum |
Optimism |
Base |
Polygon |
| Universal Router |
0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD |
0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD |
0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD |
0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD |
0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD |
| SwapRouter02 |
0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45 |
0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45 |
0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45 |
0x2626664c2603336E57B271c5C0b26F421741e481 |
0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45 |
| V3 Factory |
0x1F98431c8aD98523631AE4a59f267346ea31F984 |
0x1F98431c8aD98523631AE4a59f267346ea31F984 |
0x1F98431c8aD98523631AE4a59f267346ea31F984 |
0x33128a8fC17869897dcE68Ed026d694621f6FDfD |
0x1F98431c8aD98523631AE4a59f267346ea31F984 |
| V3 NonfungiblePositionManager |
0xC36442b4a4522E871399CD717aBDD847Ab11FE88 |
0xC36442b4a4522E871399CD717aBDD847Ab11FE88 |
0xC36442b4a4522E871399CD717aBDD847Ab11FE88 |
0x03a520b32C04BF3bEEf7BEb72E919cf822Ed34f1 |
0xC36442b4a4522E871399CD717aBDD847Ab11FE88 |
| Contract |
Address |
| V2 Router |
0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D |
| V2 Factory |
0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f |
| Contract |
Ethereum |
Arbitrum |
Optimism |
Base |
Polygon |
| Pool |
0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2 |
0x794a61358D6845594F94dc1DB02A252b5b4814aD |
0x794a61358D6845594F94dc1DB02A252b5b4814aD |
0xA238Dd80C259a72e81d7e4664a9801593F98d1c5 |
0x794a61358D6845594F94dc1DB02A252b5b4814aD |
| PoolAddressesProvider |
0x2f39d218133AFaB8F2B819B1066c7E434Ad94E9e |
0xa97684ead0e402dC232d5A977953DF7ECBaB3CDb |
0xa97684ead0e402dC232d5A977953DF7ECBaB3CDb |
0xe20fCBdBfFC4Dd138cE8b2E6FBb6CB49777ad64D |
0xa97684ead0e402dC232d5A977953DF7ECBaB3CDb |
| Market |
Ethereum |
Arbitrum |
Base |
Polygon |
| USDC Comet |
0xc3d688B66703497DAA19211EEdff47f25384cdc3 |
0xA5EDBDD9646f8dFF606d7448e414884C7d905dCA |
0xb125E6687d4313864e53df431d5425969c15Eb2F |
0xF25212E676D1F7F89Cd72fFEe66158f541246445 |
| WETH Comet |
0xA17581A9E3356d9A858b789D68B4d866e593aE94 |
0x6f7D514bbD4aFf3BcD1140B7344b32f063dEe486 |
0x46e6b214b524310239732D51387075E0e70970bf |
-- |
| Feed |
Ethereum |
Arbitrum |
Optimism |
Base |
| ETH/USD |
0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419 |
0x639Fe6ab55C921f74e7fac1ee960C0B6293ba612 |
0x13e3Ee699D1909E989722E753853AE30b17e08c5 |
0x71041dddad3595F9CEd3DcCFBe3D1F4b0a16Bb70 |
| BTC/USD |
0xF4030086522a5bEEa4988F8cA5B36dbC97BeE88c |
0x6ce185860a4963106506C203335A2910413708e9 |
0xD702DD976Fb76Fffc2D3963D037dfDae5b04E593 |
-- |
| USDC/USD |
0x8fFfFfd4AfB6115b954Bd326cbe7B4BA576818f6 |
0x50834F3163758fcC1Df9973b6e91f0F0F0434aD3 |
0x16a9FA2FDa030272Ce99B29CF780dFA30361E0f3 |
0x7e860098F58bBFC8648a4311b374B1D669a2bc6B |
| LINK/USD |
0x2c1d072e956AFFC0D435Cb7AC38EF18d24d9127c |
0x86E53CF1B870786351Da77A57575e79CB55812CB |
0xCc232dcFAAE6354cE191Bd574108c1aD03f86229 |
0x17CAb8FE31cA45e4684E33E3D258F20E88B8fD8B |
| Contract |
Ethereum |
Arbitrum |
Base |
| Feed Registry |
0x47Fb2585D2C56Fe188D0E6ec628a38b74fCeeeDf |
-- |
-- |
| VRF Coordinator V2.5 |
0xD7f86b4b8Cae7D942340FF628F82735b7a20893a |
0x3C0Ca683b403E37668AE3DC4FB62F4B29B6f7a3e |
0xd5D517aBE5cF79B7e95eC98dB0f0277788aFF634 |
| Contract |
Address |
Chains |
| Multicall3 |
0xcA11bde05977b3631167028862bE2a173976CA11 |
All major EVM chains (deterministic CREATE2 deployment) |
| Contract |
Address |
Chains |
| Deterministic Deployment Proxy |
0x4e59b44847b379578588920cA78FbF26c0B4956C |
All major EVM chains |
| Create2Deployer (OpenZeppelin) |
0x13b0D85CcB8bf860b6b79AF3029fCA081AE9beF2 |
All major EVM chains |
| Contract |
Address |
| ENS Registry |
0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e |
| Public Resolver |
0x231b0Ee14048e9dCcD1d247744d114a4EB5E8E63 |
| Reverse Registrar |
0xa58E81fe9b61B5c3fE2AFD33CF304c454AbFc7Cb |
| ETH Registrar Controller |
0x253553366Da8546fC250F225fe3d25d0C782303b |
| Contract |
Address |
Chains |
| Safe Singleton (1.4.1) |
0x41675C099F32341bf84BFc5382aF534df5C7461a |
All major EVM chains |
| Safe Proxy Factory (1.4.1) |
0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67 |
All major EVM chains |
| MultiSend (1.4.1) |
0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526 |
All major EVM chains |
| Safe Singleton (1.3.0) |
0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552 |
All major EVM chains |
| Safe Proxy Factory (1.3.0) |
0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2 |
All major EVM chains |
| Contract |
Address |
Chains |
| Permit2 |
0x000000000022D473030F116dDEE9F6B43aC78BA3 |
All major EVM chains (deterministic CREATE2) |
| Contract |
Address |
Chain |
| L1 Gateway Router |
0x72Ce9c846789fdB6fC1f34aC4AD25Dd9ef7031ef |
Ethereum |
| L1 ERC20 Gateway |
0xa3A7B6F88361F48403514059F1F16C8E78d60EeC |
Ethereum |
| L2 Gateway Router |
0x5288c571Fd7aD117beA99bF60FE0846C4E84F933 |
Arbitrum |
| Inbox |
0x4Dbd4fc535Ac27206064B68FfCf827b0A60BAB3f |
Ethereum |
| Contract |
Address |
Chain |
| L1StandardBridge (Proxy) |
0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1 |
Ethereum |
| L2StandardBridge |
0x4200000000000000000000000000000000000010 |
Optimism (predeploy) |
| L1CrossDomainMessenger (Proxy) |
0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1 |
Ethereum |
| L2CrossDomainMessenger |
0x4200000000000000000000000000000000000007 |
Optimism (predeploy) |
| OptimismPortal (Proxy) |
0xbEb5Fc579115071764c7423A4f12eDde41f106Ed |
Ethereum |
| Contract |
Address |
Chain |
| L1StandardBridge (Proxy) |
0x3154Cf16ccdb4C6d922629664174b904d80F2C35 |
Ethereum |
| L2StandardBridge |
0x4200000000000000000000000000000000000010 |
Base (predeploy) |
| L1CrossDomainMessenger (Proxy) |
0x866E82a600A1414e583f7F13623F1aC5d58b0Afa |
Ethereum |
| L2CrossDomainMessenger |
0x4200000000000000000000000000000000000007 |
Base (predeploy) |
| OptimismPortal (Proxy) |
0x49048044D57e1C92A77f79988d21Fa8fAF36f97B |
Ethereum |
| Protocol |
Contract |
Address |
Chain |
| Uniswap |
Governor Bravo |
0x408ED6354d4973f66138C91495F2f2FCbd8724C3 |
Ethereum |
| Uniswap |
Timelock |
0x1a9C8182C09F50C8318d769245beA52c32BE35BC |
Ethereum |
| Compound |
Governor Bravo |
0xc0Da02939E1441F497fd74F78cE7Decb17B66529 |
Ethereum |
| Compound |
Timelock |
0x6d903f6003cca6255D85CcA4D3B5E5146dC33925 |
Ethereum |
| Aave |
Governance V3 |
0x9AEE0B04504CeF83A65AC3f0e838D0593BCb2BC7 |
Ethereum |
| Token |
Address |
Chain |
| UNI |
0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984 |
Ethereum |
| COMP |
0xc00e94Cb662C3520282E6f5717214004A7f26888 |
Ethereum |
| AAVE |
0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9 |
Ethereum |
| LDO |
0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32 |
Ethereum |
| LINK |
0x514910771AF9Ca656af840dff83E8264EcF986CA |
Ethereum |
| MKR |
0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2 |
Ethereum |
| CRV |
0xD533a949740bb3306d119CC777fa900bA034cd52 |
Ethereum |
Shared across Optimism, Base, and all OP Stack chains at the same addresses.
| Contract |
Address |
| L2CrossDomainMessenger |
0x4200000000000000000000000000000000000007 |
| L2StandardBridge |
0x4200000000000000000000000000000000000010 |
| L2ToL1MessagePasser |
0x4200000000000000000000000000000000000016 |
| L1Block |
0x4200000000000000000000000000000000000015 |
| GasPriceOracle |
0x420000000000000000000000000000000000000F |
| WETH (predeploy) |
0x4200000000000000000000000000000000000006 |
Always verify addresses onchain before using them in production. Addresses in this reference may become outdated if protocols upgrade their proxies.
Check if code exists at an address:
cast code 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 --rpc-url $ETH_RPC_URL
A non-empty response confirms a contract exists. 0x means no contract (EOA or empty).
Verify a token's identity:
cast call 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 "symbol()(string)" --rpc-url $ETH_RPC_URL
cast call 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 "decimals()(uint8)" --rpc-url $ETH_RPC_URL
Check a proxy's implementation:
# EIP-1967 implementation slot
cast storage 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 \
0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc \
--rpc-url $ETH_RPC_URL
# Verify contract is verified on Etherscan
curl "https://api.etherscan.io/api?module=contract&action=getabi&address=0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48&apikey=$ETHERSCAN_API_KEY"
Chain-specific explorers:
- Ethereum:
api.etherscan.io
- Arbitrum:
api.arbiscan.io
- Optimism:
api-optimistic.etherscan.io
- Base:
api.basescan.org
- Polygon:
api.polygonscan.com
Verify an address is correctly checksummed:
cast to-check-sum-address 0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
- Proxy upgrades -- Protocol governance can upgrade proxy implementations. The proxy address stays the same, but behavior may change. Monitor governance proposals for protocols you depend on.
- Chain-specific behavior -- Same protocol may behave differently across chains. Aave V3 on Ethereum has different parameters (LTV, liquidation thresholds) than on Arbitrum.
- Deprecated contracts -- USDC.e (bridged) is being phased out in favor of native USDC on L2s. Old router addresses may still work but lack new features.
- Token decimals -- USDC/USDT use 6 decimals. DAI/WETH use 18. Never assume 18 decimals.
- USDT non-standard -- USDT's
transfer() and approve() do not return a boolean. Use OpenZeppelin's SafeERC20 or viem's built-in handling.