DeFi Protocol Availability by Chain
A DeFi resolver renders data from a protocol's own contracts, so it can only return data on a chain where that protocol actually exists. Protocol availability varies by chain — this page helps you know which resolvers will return live data on which network when you build a DeFi app.
Verify the protocol address before wiring it into an app. Testnet deployments differ from mainnet and move over time. Confirm the target protocol has code on your chain (
eth_getCode) and returns data. Fail-closed means a wrong or absent address renders "unavailable" rather than breaking your app — safe, but you get no data.
Protocol availability
| Protocol | Ethereum mainnet | Major L2s (Base/Arbitrum) | Sepolia testnet |
|---|---|---|---|
| Chainlink feeds | Yes | Yes | Yes |
| Uniswap V3 | Yes | Yes | Yes |
| Uniswap V4 | Yes | Yes | Yes (verify address) |
| Aave V3 | Yes | Yes | Yes (test market) |
| Curve | Yes | Yes | Thin / often absent |
So on Sepolia, resolvers backed by Chainlink, Uniswap V3, Uniswap V4, and Aave can be tested with live data; Curve has little testnet presence, so a Curve-backed resolver is best tested on mainnet or an L2 where Curve pools exist.
Resolver readiness by dependency
| Resolver | Depends on | Where it returns data |
|---|---|---|
| ApprovalStateResolver | any ERC-20 | Any chain — works everywhere |
| PortfolioResolver | any contracts | Any chain — works everywhere |
| ChainlinkFeedResolver | a Chainlink feed | Anywhere Chainlink feeds exist |
| UniswapV3PriceResolver / PositionResolver | Uniswap V3 | Anywhere V3 is deployed (incl. Sepolia) |
| UniswapV4PriceResolver | Uniswap V4 StateView | Anywhere V4 is deployed (verify the StateView address) |
| AaveReserveResolver / AavePositionResolver | Aave V3 Pool | Anywhere Aave V3 is deployed (incl. Sepolia test market) |
| UniswapQuoteResolver | Uniswap V3 QuoterV2 + a funded pool | Anywhere V3 + liquidity exist |
| CurvePoolResolver | a Curve pool | Mainnet / L2s (thin on Sepolia) |
The chain-agnostic resolvers (approval, portfolio) and any read done through the generic staticread /multiread
resolvers work on any chain — they don't depend on a specific protocol being present.
Finding the right address
The resolver takes the protocol contract's address as a caller argument (ChainRender blesses no protocol). To find it for your chain:
- Uniswap — the Uniswap deployments pages, filtered to your chain (addresses differ per chain; do not assume mainnet addresses carry over).
- Aave — the Aave address book for your market.
- Chainlink — the Chainlink data-feeds directory for your chain.
- Curve — the Curve pool registry / factory for your chain.
Then confirm the address has code (eth_getCode) and returns a value before wiring it into a slot.
The takeaway
Resolvers are correct code that read a protocol's own contracts. Whether one returns live data depends only on whether that protocol is deployed on the chain you're building for — which you confirm per chain. On testnets, lean on the protocols with strong testnet presence (Chainlink, Uniswap, Aave); reach for mainnet or an L2 when you need a protocol (like Curve) that isn't on the testnet.
Related
- DeFi Capabilities — the complete guide to what ChainRender can do with DeFi.
- Resolvers — how the resolver mechanism works.