⚠️ Alpha · testnets only. ChainRender is in active alpha and deployed on testnets only — Ethereum Sepolia, the Robinhood Chain Testnet, and the Circle Arc Testnet — not on any mainnet. Contracts, addresses, and APIs may change. Do not use with real funds or production assets.
Concepts

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