# Contract Addresses

> Verified contract addresses for major EVM protocols across Ethereum, Arbitrum, Optimism, Base, and Polygon. Covers tokens, DEXes, lending, bridges, and infrastructure. Use as a reference when building integrations — every address is checksummed and should be verified onchain before use in production.

- Skill: `justaname-id/contract-addresses` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add justaname-id/contract-addresses`
- Raw SKILL.md: https://api.skillmd.com/api/skills/justaname-id/contract-addresses/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: Apache-2.0
- Author: justaname-id (https://skillmd.com/u/justaname-id)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/justaname-id/contract-addresses

---


# Contract Addresses

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.

## What You Probably Got Wrong

- **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.

## Stablecoins

### USDC (Circle)

| 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) |

### USDC.e (Bridged USDC)

| Chain | Address | Notes |
|-------|---------|-------|
| Arbitrum | `0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8` | Legacy bridged, being deprecated |
| Optimism | `0x7F5c764cBc14f9669B88837ca1490cCa17c31607` | Legacy bridged |
| Polygon | `0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174` | Legacy bridged |

### USDT (Tether)

| Chain | Address | Notes |
|-------|---------|-------|
| Ethereum | `0xdAC17F958D2ee523a2206206994597C13D831ec7` | 6 decimals, no return value on transfer |
| Arbitrum | `0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9` | Bridged USDT |
| Optimism | `0x94b008aA00579c1307B0EF2c499aD98a8ce58e58` | Bridged USDT |
| Polygon | `0xc2132D05D31c914a87C6611C10748AEb04B58e8F` | Bridged USDT |

### DAI (MakerDAO)

| Chain | Address | Notes |
|-------|---------|-------|
| Ethereum | `0x6B175474E89094C44Da98b954EedeAC495271d0F` | 18 decimals |
| Arbitrum | `0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1` | Bridged DAI |
| Optimism | `0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1` | Same address as Arbitrum (CREATE2) |
| Polygon | `0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063` | Bridged DAI |

## Wrapped Tokens

### WETH (Wrapped Ether)

| 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 |

### wstETH (Lido Wrapped Staked ETH)

| Chain | Address | Notes |
|-------|---------|-------|
| Ethereum | `0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0` | Canonical wstETH |
| Arbitrum | `0x5979D7b546E38E9aB8E801a884a0710832C3fD7b` | Bridged wstETH |
| Optimism | `0x1F32b1c2345538c0c6f582fCB022739c4A194Ebb` | Bridged wstETH |
| Base | `0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452` | Bridged wstETH |
| Polygon | `0x03b54A6e9a984069379fae1a4fC4dBAE93B3bCCD` | Bridged wstETH |

## DEX Routers

### Uniswap

| 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` |

### Uniswap V2 (Ethereum only)

| Contract | Address |
|----------|---------|
| V2 Router | `0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D` |
| V2 Factory | `0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f` |

## Lending

### Aave V3

| Contract | Ethereum | Arbitrum | Optimism | Base | Polygon |
|----------|----------|----------|----------|------|---------|
| Pool | `0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2` | `0x794a61358D6845594F94dc1DB02A252b5b4814aD` | `0x794a61358D6845594F94dc1DB02A252b5b4814aD` | `0xA238Dd80C259a72e81d7e4664a9801593F98d1c5` | `0x794a61358D6845594F94dc1DB02A252b5b4814aD` |
| PoolAddressesProvider | `0x2f39d218133AFaB8F2B819B1066c7E434Ad94E9e` | `0xa97684ead0e402dC232d5A977953DF7ECBaB3CDb` | `0xa97684ead0e402dC232d5A977953DF7ECBaB3CDb` | `0xe20fCBdBfFC4Dd138cE8b2E6FBb6CB49777ad64D` | `0xa97684ead0e402dC232d5A977953DF7ECBaB3CDb` |

### Compound V3 (Comet)

| Market | Ethereum | Arbitrum | Base | Polygon |
|--------|----------|----------|------|---------|
| USDC Comet | `0xc3d688B66703497DAA19211EEdff47f25384cdc3` | `0xA5EDBDD9646f8dFF606d7448e414884C7d905dCA` | `0xb125E6687d4313864e53df431d5425969c15Eb2F` | `0xF25212E676D1F7F89Cd72fFEe66158f541246445` |
| WETH Comet | `0xA17581A9E3356d9A858b789D68B4d866e593aE94` | `0x6f7D514bbD4aFf3BcD1140B7344b32f063dEe486` | `0x46e6b214b524310239732D51387075E0e70970bf` | -- |

## Oracles

### Chainlink Price Feeds

| 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` |

### Chainlink Infrastructure

| Contract | Ethereum | Arbitrum | Base |
|----------|----------|----------|------|
| Feed Registry | `0x47Fb2585D2C56Fe188D0E6ec628a38b74fCeeeDf` | -- | -- |
| VRF Coordinator V2.5 | `0xD7f86b4b8Cae7D942340FF628F82735b7a20893a` | `0x3C0Ca683b403E37668AE3DC4FB62F4B29B6f7a3e` | `0xd5D517aBE5cF79B7e95eC98dB0f0277788aFF634` |

## Infrastructure

### Multicall

| Contract | Address | Chains |
|----------|---------|--------|
| Multicall3 | `0xcA11bde05977b3631167028862bE2a173976CA11` | All major EVM chains (deterministic CREATE2 deployment) |

### CREATE2 Deployers

| Contract | Address | Chains |
|----------|---------|--------|
| Deterministic Deployment Proxy | `0x4e59b44847b379578588920cA78FbF26c0B4956C` | All major EVM chains |
| Create2Deployer (OpenZeppelin) | `0x13b0D85CcB8bf860b6b79AF3029fCA081AE9beF2` | All major EVM chains |

### ENS (Ethereum Only)

| Contract | Address |
|----------|---------|
| ENS Registry | `0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e` |
| Public Resolver | `0x231b0Ee14048e9dCcD1d247744d114a4EB5E8E63` |
| Reverse Registrar | `0xa58E81fe9b61B5c3fE2AFD33CF304c454AbFc7Cb` |
| ETH Registrar Controller | `0x253553366Da8546fC250F225fe3d25d0C782303b` |

### Safe (Gnosis Safe)

| 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 |

### Permit2 (Uniswap)

| Contract | Address | Chains |
|----------|---------|--------|
| Permit2 | `0x000000000022D473030F116dDEE9F6B43aC78BA3` | All major EVM chains (deterministic CREATE2) |

## Bridges

### Arbitrum Native Bridge

| Contract | Address | Chain |
|----------|---------|-------|
| L1 Gateway Router | `0x72Ce9c846789fdB6fC1f34aC4AD25Dd9ef7031ef` | Ethereum |
| L1 ERC20 Gateway | `0xa3A7B6F88361F48403514059F1F16C8E78d60EeC` | Ethereum |
| L2 Gateway Router | `0x5288c571Fd7aD117beA99bF60FE0846C4E84F933` | Arbitrum |
| Inbox | `0x4Dbd4fc535Ac27206064B68FfCf827b0A60BAB3f` | Ethereum |

### Optimism Native Bridge

| Contract | Address | Chain |
|----------|---------|-------|
| L1StandardBridge (Proxy) | `0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1` | Ethereum |
| L2StandardBridge | `0x4200000000000000000000000000000000000010` | Optimism (predeploy) |
| L1CrossDomainMessenger (Proxy) | `0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1` | Ethereum |
| L2CrossDomainMessenger | `0x4200000000000000000000000000000000000007` | Optimism (predeploy) |
| OptimismPortal (Proxy) | `0xbEb5Fc579115071764c7423A4f12eDde41f106Ed` | Ethereum |

### Base Native Bridge

| Contract | Address | Chain |
|----------|---------|-------|
| L1StandardBridge (Proxy) | `0x3154Cf16ccdb4C6d922629664174b904d80F2C35` | Ethereum |
| L2StandardBridge | `0x4200000000000000000000000000000000000010` | Base (predeploy) |
| L1CrossDomainMessenger (Proxy) | `0x866E82a600A1414e583f7F13623F1aC5d58b0Afa` | Ethereum |
| L2CrossDomainMessenger | `0x4200000000000000000000000000000000000007` | Base (predeploy) |
| OptimismPortal (Proxy) | `0x49048044D57e1C92A77f79988d21Fa8fAF36f97B` | Ethereum |

## Governance

### Major Protocol Governance

| 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 |

### Governance Tokens

| Token | Address | Chain |
|-------|---------|-------|
| UNI | `0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984` | Ethereum |
| COMP | `0xc00e94Cb662C3520282E6f5717214004A7f26888` | Ethereum |
| AAVE | `0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9` | Ethereum |
| LDO | `0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32` | Ethereum |
| LINK | `0x514910771AF9Ca656af840dff83E8264EcF986CA` | Ethereum |
| MKR | `0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2` | Ethereum |
| CRV | `0xD533a949740bb3306d119CC777fa900bA034cd52` | Ethereum |

## OP Stack Predeploys

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` |

## How to Verify

Always verify addresses onchain before using them in production. Addresses in this reference may become outdated if protocols upgrade their proxies.

### Using cast (Foundry)

Check if code exists at an address:

```bash
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:

```bash
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:

```bash
# EIP-1967 implementation slot
cast storage 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 \
  0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc \
  --rpc-url $ETH_RPC_URL
```

### Using Etherscan API

```bash
# 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`

### Checksum Verification

Verify an address is correctly checksummed:

```bash
cast to-check-sum-address 0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
```

## Important Caveats

- **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.

## References

- [Circle USDC Addresses](https://developers.circle.com/stablecoins/docs/usdc-on-main-networks)
- [Uniswap Deployments](https://docs.uniswap.org/contracts/v3/reference/deployments)
- [Aave V3 Deployed Contracts](https://docs.aave.com/developers/deployed-contracts/v3-mainnet)
- [Compound V3 Deployments](https://docs.compound.finance/protocol/markets/)
- [Chainlink Feed Registry](https://docs.chain.link/data-feeds/feed-registry)
- [Safe Deployments](https://github.com/safe-global/safe-deployments)
- [OP Stack Predeploys](https://docs.optimism.io/chain/addresses)
- [Arbitrum Bridge Contracts](https://docs.arbitrum.io/build-decentralized-apps/reference/useful-addresses)
- [ENS Deployments](https://docs.ens.domains/learn/deployments)
- [Multicall3](https://www.multicall3.com/)

