Contract Addresses
A wrong address usually does not revert. It reads zero, fills at a terrible price, or takes the funds. Nothing in the build fails, so nothing reminds you: the check has to be a habit, not a reaction.
Confirm every address on the chain you are wiring it for, before it reaches anything that moves funds. A remembered address, a tutorial, a config you inherited, or a dated table — this document included — tells you what to look for. None of them discharges the check, and a "verified" stamp only ever meant "on some chain, on some day, for some deployment".
bashcast code <address> --rpc-url <RPC FOR THE TARGET CHAIN> # code is here, not just on mainnet cast call <address> "symbol()(string)" --rpc-url <same rpc> # identity, not just presence: # symbol() / factory() / typeAndVersion() / owner()
Then settle it against the protocol's own deployment list — its docs, or the deployments/ directory of its repo — and the target chain's explorer. When you hand over code someone else will run, say in the deliverable which addresses must be re-checked before real funds move; whoever runs it did not watch you check.
Four ways a verified address is still the wrong one
Same protocol, different chain. CREATE2 and vanity addresses prove nothing cross-chain. Uniswap v4 lands on a different address on every chain, and v3 is not uniform either — its Base router is a different address from its mainnet one. Treat same-address-everywhere as a claim to verify per chain, never a property a brand has. A vanity address can hold a live contract on one chain and nothing on another. The reverse also holds: nothing at that address is not absence from the chain — the protocol may well be deployed there at an ordinary address, so check its deployment list before telling anyone a chain is unsupported.
Same protocol, older deployment. Deprecated contracts stay live and keep answering symbol(). The classic tell is a balance or state read that returns 0 without reverting: right ABI, right chain, superseded deployment (V1 vs V2 token, legacy vs current pool or router). Getting the symbol you expected is not evidence the deployment is current; the protocol's contract list is.
Right protocol, wrong contract. One brand often runs more than one AMM. Aerodrome's v2-style Router cannot reach Slipstream, its concentrated-liquidity deployment — separate factory, separate router, keyed by tickSpacing rather than fee — and the deeper Base USDC/WETH book sits there rather than in the vAMM pools. Measured 2026-08-12 on one 500k USDC→WETH clip: about −14 bps through Slipstream against about −1,283 bps through the vAMM Router, with both addresses genuine and both calls succeeding. That is one pair on one day, not a standing ranking — for anything size-sensitive, quote each candidate pool at the real clip size and choose from the numbers.
Bridged where you meant native. Many chains carry both a canonical-bridge and an issuer-native version of the same token (USDC vs USDC.e / USDbC, and the same pattern elsewhere). Different address, different liquidity, same ticker in most UIs. Choose deliberately; default to native.
Choosing a venue
Do not route by reflex and do not assert dominance. The deepest venue on an L2 is often not the one you would name on mainnet — Aerodrome on Base, Velodrome on Optimism, Camelot on Arbitrum are genuine contenders — but no venue leads on every metric and the ranking moves month to month. Name the metric you mean: routed volume and depth for the pair being swapped decide execution quality, aggregate chain TVL does not. Back the choice with a live quote, pool reserves, or a current per-venue volume figure rather than a reputation. An aggregator is a legitimate answer when you also show which venues it is sourcing.
Address tables
Checked onchain 2026-10-20/21: code present plus an identity call on each listed chain. A starting point, not a substitute for the check above.
Tokens
| Token | Mainnet | Arbitrum | Optimism | Base |
|---|---|---|---|---|
| USDC (native) | 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 | 0xaf88d065e77c8cC2239327C5EDb3A432268e5831 | 0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85 | 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 |
| USDT (bridged on Optimism and Base; USD₮0 on Arbitrum) | 0xdAC17F958D2ee523a2206206994597C13D831ec7 | 0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9 | 0x94b008aA00579c1307B0EF2c499aD98a8ce58e58 | 0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2 |
| DAI | 0x6B175474E89094C44Da98b954EedeAC495271d0F | 0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1 | 0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1 | 0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb |
| WETH | 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 | 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1 | 0x4200000000000000000000000000000000000006 | 0x4200000000000000000000000000000000000006 |
| wstETH | 0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0 | 0x5979D7b546E38E414F7E9822514be443A4800529 | 0x1F32b1c2345538c0c6f582fCB022739c4A194Ebb | 0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452 |
| LINK | 0x514910771AF9Ca656af840dff83E8264EcF986CA | 0xf97f4df75117a78c1A5a0DBb814Af92458539FB4 | 0x88Fb150BDc53A65fe94Dea0c9BA0a6dAf8C6e196 |
Native USDC elsewhere: Polygon 0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359, zkSync Era 0x1d17CBcF0D6D143135aE902365D2E5e2A16538D4. Circle-native USDC has 6 decimals. Bridged or pegged USDC can differ (Binance-Peg USDC on BNB Chain has 18); read decimals().
Mainnet only: stETH 0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84 (also the Lido deposit contract), rETH 0xae78736Cd615f374D3085123A210448E74Fc6393, WBTC 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599, UNI 0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984, AAVE 0x7Fc66500c84A76Ad7e9c93437bFc5Ac33E2DDaE9, COMP 0xc00e94Cb662C3520282E6f5717214004A7f26888, MKR 0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2, LDO 0x5A98FcBEA516Cf06857215779Fd812CA3beF1B32, CRV 0xD533a949740bb3306d119CC777fa900bA034cd52.
Uniswap
| Contract | Mainnet | Arbitrum | Optimism | Base |
|---|---|---|---|---|
| V3 Factory | 0x1F98431c8aD98523631AE4a59f267346ea31F984 | 0x1F98431c8aD98523631AE4a59f267346ea31F984 | 0x1F98431c8aD98523631AE4a59f267346ea31F984 | 0x33128a8fC17869897dcE68Ed026d694621f6FDfD |
| V3 SwapRouter02 | 0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45 | 0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45 | 0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45 | 0x2626664c2603336E57B271c5C0b26F421741e481 |
| V4 PoolManager | 0x000000000004444c5dc75cB358380D2e3dE08A90 | 0x360E68faCcca8cA495c1B759Fd9EEe466db9FB32 | 0x9a13F98Cb987694C9F086b1F5eB990EeA8264Ec3 | 0x498581fF718922c3f8e6A244956aF099B2652b2b |
| V4 PositionManager | 0xbD216513d74C8cf14cf4747E6AaA6420FF64ee9e | 0xd88F38F930b7952f2DB2432Cb002E7abbF3dD869 | 0x3C3Ea4B57a46241e54610e5f022E5c45859A1017 | 0x7C5f5A4bBd8fD63184577525326123B519429bDc |
| Universal Router (V4) | 0x66a9893cC07D91D95644AEDD05D03f95e1dBA8Af | 0xA51afAFe0263b40EdaEf0Df8781eA9aa03E381a3 | 0x851116D9223fabED8E56C0E6b8Ad0c31d98B3507 | 0x6fF5693b99212Da76ad316178A184AB56D299b43 |
| Permit2 | 0x000000000022D473030F116dDEE9F6B43aC78BA3 | same | same | same |
Mainnet only: V2 Router 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, V2 Factory 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f, V3 QuoterV2 0x61fFE014bA17989E743c5F6cB21bF9697530B21e, V3 NonfungiblePositionManager 0xC36442b4a4522E871399CD717aBDD847Ab11FE88, V4 Quoter 0x52F0E24D1c21C8A0cB1e5a5dD6198556BD9E1203, V4 StateView 0x7fFE42C4a5DEeA5b0feC41C94C136Cf115597227. Legacy: V3 SwapRouter 0xE592427A0AEce92De3Edee1F18E0157C05861564, Universal Router (V3) 0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD.
Lending
| Contract | Mainnet | Arbitrum | Optimism | Base |
|---|---|---|---|---|
| Aave V3 Pool | 0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2 | 0x794a61358D6845594F94dc1DB02A252b5b4814aD | 0x794a61358D6845594F94dc1DB02A252b5b4814aD | 0xA238Dd80C259a72e81d7e4664a9801593F98d1c5 |
| Aave V3 PoolAddressesProvider | 0x2f39d218133AFaB8F2B819B1066c7E434Ad94E9e | 0xa97684ead0e402dC232d5A977953DF7ECBaB3CDb | 0xa97684ead0e402dC232d5A977953DF7ECBaB3CDb | 0xe20fCBdBfFC4Dd138cE8b2E6FBb6CB49777ad64D |
| Compound V3 cUSDCv3 (Comet) | 0xc3d688B66703497DAA19211EEdff47f25384cdc3 | 0x9c4ec768c28520B50860ea7a15bd7213a9fF58bf | 0x2e44e174f7D53F0212823acC11C01A11d58c5bCB | 0xb125E6687d4313864e53df431d5425969c15Eb2F |
Morpho Blue: 0xBBBBBbbBBb9cC5e90e3b3Af64bdAF62C37EEFFCb on mainnet and Base. Mainnet Sky/Maker: Pot (DSR) 0x197E90f9FAD81970bA7976f33CbD77088E5D7cf7, sDAI 0x83F20F44975D03b1b09e64809B757c47f942BEeA. Legacy mainnet: Aave V2 LendingPool 0x7d2768dE32b0b80b7a3454c06BdAc94A69DDc7A9, Compound V2 Comptroller 0x3d9819210A31b4961b30EF54bE2aeD79B9c9Cd3B.
Chainlink price feeds
| Feed | Mainnet | Arbitrum | Optimism | Base |
|---|---|---|---|---|
| ETH/USD | 0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419 | 0x639Fe6ab55C921f74e7fac1ee960C0B6293ba612 | 0x13e3Ee699D1909E989722E753853AE30b17e08c5 | 0x71041dddad3595F9CEd3DcCFBe3D1F4b0a16Bb70 |
Mainnet only: BTC/USD 0xF4030086522a5bEEa4988F8cA5B36dbC97BeE88c, USDC/USD 0x8fFfFfd4AfB6115b954Bd326cbe7B4BA576818f6, LINK/USD 0x2c1d072e956AFFC0D435Cb7AC38EF18d24d9127c, stETH/USD 0xCfE54B5cD566aB89272946F602D76Ea879CAb4a8, AAVE/USD 0x547a514d5e3769680Ce22B2361c10Ea13619e8a9. Each feed has its own heartbeat and decimals; read both from the feed.
Bridges and messaging
| Contract | Mainnet | Arbitrum | Optimism | Base |
|---|---|---|---|---|
| Chainlink CCIP Router | 0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D | 0x141fa059441E0ca23ce184B6A78bafD2A517DdE8 | 0x881e3A65B4d4a04dD529061dd0071cf975F58bCD | |
| Across SpokePool | 0x5c7BCd6E7De5423a257D81B442095A1a6ced35C5 | 0xe35e9842fceaCA96570B734083f4a58e8F7C5f2A | 0x6f26Bf09B1C792e3228e5467807a900A503c0281 | 0x09aea4b2242abC8bb4BB78D537A67a245A7bEC64 |
Same address on every chain checked
Confirm code on your target chain before relying on it.
| Contract | Address |
|---|---|
| Safe Singleton 1.4.1 | 0x41675C099F32341bf84BFc5382aF534df5C7461a |
| Safe Singleton 1.3.0 | 0xd9Db270c1B5E3Bd161E8c8503c55cEABeE709552 |
| Safe ProxyFactory 1.4.1 | 0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67 |
| Safe MultiSend 1.4.1 | 0x38869bf66a61cF6bDB996A6aE40D5853Fd43B526 |
| Safe ProxyFactory 1.3.0 | 0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2 |
| Safe MultiSend 1.3.0 | 0xA238CBeb142c10Ef7Ad8442C6D1f9E89e07e7761 |
| ERC-4337 EntryPoint v0.7 | 0x0000000071727De22E5E9d8BAf0edAc6f37da032 |
| ERC-4337 EntryPoint v0.6 | 0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789 |
| ERC-8004 IdentityRegistry | 0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 |
| ERC-8004 ReputationRegistry | 0x8004BAa17C55a88189AE136b182e5fdA19dE9b63 |
| 1inch Aggregation Router V6 | 0x111111125421cA6dc452d289314280a0f8842A65 |
| Seaport 1.5 | 0x00000000000000ADc04C56Bf30aC9d3c0aAF14dC |
| Multicall3 | 0xcA11bde05977b3631167028862bE2a173976CA11 |
| Arachnid CREATE2 deployer | 0x4e59b44847b379578588920cA78FbF26c0B4956C |
Other mainnet contracts
| Contract | Address |
|---|---|
| ENS Registry | 0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e |
| ENS Public Resolver | 0x231b0Ee14048e9dCcD1d247744d114a4EB5E8E63 |
| ENS ETHRegistrarController | 0x59E16fcCd424Cc24e280Be16E11Bcd56fb0CE547 |
| Lido WithdrawalQueue | 0x889edC2eDab5f40e902b864aD4d7AdE8E412F9B1 |
| Curve AddressProvider | 0x5ffe7FB82894076ECB99A30D6A32e969e6e35E98 |
| Balancer V2 Vault | 0xBA12222222228d8Ba445958a75a0704d566BF2C8 |
| EigenLayer StrategyManager | 0x858646372CC42E1A627fcE94aa7A7033e7CF075A |
| EigenLayer DelegationManager | 0x39053D51B77DC0d36036Fc1fCc8Cb819df8Ef37A |
| Yearn V3 VaultFactory 3.0.4 | 0x770D0d1Fb036483Ed4AbB6d53c1C88fb277D812F |
L2-native venues
Aerodrome (Base) and Velodrome (Optimism) run two AMMs each; the router below reaches only the v2-style pools, not Slipstream (see above).
| Contract | Address |
|---|---|
| Aerodrome Router (Base) | 0xcF77a3Ba9A5CA399B7c97c74d54e5b1Beb874E43 |
| Aerodrome PoolFactory (Base) | 0x420DD381b31aEf6683db6B902084cB0FFECe40Da |
| Aerodrome Voter (Base) | 0x16613524e02ad97eDfeF371bC883F2F5d6C480A5 |
| AERO (Base) | 0x940181a94A35A4569E4529A3CDfB74e38FD98631 |
| Velodrome Router (Optimism) | 0xa062aE8A9c5e11aaA026fc2670B0D65cCc8B2858 |
| Velodrome PoolFactory (Optimism) | 0xF1046053aa5682b4F9a81b5481394DA16BE5FF5a |
| VELO v2 (Optimism) | 0x9560e827aF36c94D2Ac33a39bCE1Fe78631088Db |
| Camelot Router, AMM V2 (Arbitrum) | 0xc873fEcbd354f5A56E00E710B90EF4201db2448d |
| GMX V2 ExchangeRouter (Arbitrum) | 0x7dE39FF2e232A2203196788d37e234cF8F1b83f1 |
| GMX V2 DataStore (Arbitrum) | 0xFD70de6b91282D8017aA4E741e9Ae325CAb992d8 |
| Pendle Router (Arbitrum) | 0x888888888889758F76e7103c6CbF23ABbF58F946 |
| SyncSwap Router V2 (zkSync Era) | 0x9B5def958d0f3b6955cBEa4D5B7809b2fb26b059 |
GMX replaces its ExchangeRouter without moving DataStore, and its repo can lag. Before use, confirm the router holds CONTROLLER in the RoleStore (roleStore(), then hasRole(router, keccak256(abi.encode("CONTROLLER")))).
Robinhood Chain (4663)
Launched July 2026, after most training data, so you will not remember these. Checked onchain with cast 2026-08-20; the live catalog is docs.robinhood.com/chain/contracts.
Stock tokens are 18 decimals; USDG is 6. Every stock token shares one AccessControlsRegistry that can pause, block, mint, confiscate and upgrade with no timelock. Splits and dividends change uiMultiplier() (ERC-8056), never the raw balance — index raw amounts.
| Token | Address |
|---|---|
| NVDA | 0xd0601CE157Db5bdC3162BbaC2a2C8aF5320D9EEC |
| TSLA | 0x322F0929c4625eD5bAd873c95208D54E1c003b2d |
| AAPL | 0xaF3D76f1834A1d425780943C99Ea8A608f8a93f9 |
| MSFT | 0xe93237C50D904957Cf27E7B1133b510C669c2e74 |
| AMZN | 0x12f190a9F9d7D37a250758b26824B97CE941bF54 |
| GOOGL | 0x2e0847E8910a9732eB3fb1bb4b70a580ADAD4FE3 |
| META | 0xc0D6457C16Cc70d6790Dd43521C899C87ce02f35 |
| COIN | 0x6330D8C3178a418788dF01a47479c0ce7CCF450b |
| SPCX | 0x4a0E65A3EcceC6dBe60AE065F2e7bb85Fae35eEa |
| SPY | 0x117cc2133c37B721F49dE2A7a74833232B3B4C0C |
| QQQ | 0xD5f3879160bc7c32ebb4dC785F8a4F505888de68 |
| USDG | 0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168 |
| WETH | 0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73 |
| AccessControlsRegistry | 0xe10b6f6B275de231345c20D14Ab812db62151b00 |
Canonical bridge on Ethereum mainnet: Bridge 0xDf8755334ce7A73cCF6b581C02eA649AE3E864b3, Inbox 0x1A07cc4BD17E0118BdB54D70990D2158AbAD7a2D, Outbox 0xf0ce991ea4A0d2400A4AB49b20ae333f6Dce3DE9, L1GatewayRouter 0x6a2E3a1e16FC29f27Ce61429746D558d656975bB, SequencerInbox 0xBd0D173EEb87D57A09521c24388a12789F33ba96, RollupProxy 0x23A19d23e89166adedbDcB432518AB01e4272D94, L1ERC20Gateway 0x85001CC4867C5e1C22dA4B79BB8852B9e2a06da0, L1WethGateway 0xF7e12b9614b509C747ab4423bC4ACF923759Cf1B (L2Beat discovery).
Where to look
- the protocol's docs or the
deployments/directory in its repo — the only source that settles which deployment is current - the target chain's block explorer — code, labels, and activity at that exact address
- DefiLlama for per-chain, per-venue volume and TVL; a live quote from the venue's own quoter beats both
- tokenlists.org or CoinGecko for token addresses, cross-checked against the issuer
Before you finish: send a one-line note via feedback/SKILL.md — issue or praise.


