Reference: Resolver Catalog
ChainRender ships a large library of resolvers — on-chain contracts that supply live data or media to your UI. All
implement supportsKind + resolve; many implement richer interfaces (IChartData, ITableSource, IRouteSource).
Data & DeFi
- OracleFeed / Chainlink / UniswapV3Price — live price feeds, rendered honestly (stale feeds are marked, never presented as current).
- Aave reserve / ProtocolStat — DeFi protocol state.
- SwapFlow / ZQuoter — swap quotes and (via
IRouteSource/RouteRenderer) route diagrams of any topology.
Identity & Privacy
- EnsProfile — live ENS identity as UI. Credential / BoundCredential — selective-disclosure + bound
single-use credentials (ZK). Identity — attested claims. Unified via
IPrivacyResolver.
Reputation & social (session additions)
- EfpResolver (
efp-follows·efp-tag·efp-state·efp-list-size) — reads EFP (Ethereum Follow Protocol) list ops on chain and replays them for a forward relationship to a caller-named list. Grade A (forward read, bounded scan). args (follows/state):(listRecords, slot, target); (tag):(listRecords, slot, target, tag); (size):(listRecords, slot). Follower counts / reverse lookups are off-chain (indexer) → graded ≤ C, not offered here. - AddressReputationResolver (
rep-vouch·rep-tally) — renders delegated address vouches from an ownerlessAddressAttestationRegistry: one attester's status, or a transparent k-of-n over a caller-supplied attester set. On-chain read; delegated meaning → grades ≤ C. Never a global score. args (vouch):(registry, attester, subject, topic); (tally):(registry, attesters[], subject, topic). - ReputationAggregateResolver (
rep-aggregate) — composes manyIReputationSourceadapters (EFP, vouches, EAS, ERC-725/735, future sources) into a transparent k-of-n with the grade capped at the weakest source. args:(subject, sources[], ctxs[]). - ERC-725Y / ERC-735 accounts (the standard behind LUKSO Universal Profiles) — read an ERC-725Y data key or ERC-735
claim today via
staticread(CallResolver), against a co-located account (the chain the resolver is deployed on: Sepolia/Robinhood/Arc); a dedicatedErc725ClaimResolveris planned. Owned/mutable source → grades ≤ C. LUKSO's chain is not integrated — aSTATICCALLis same-chain only, so live LUKSO UPs are out of reach until ChainRender is deployed on LUKSO.
All view-only, fail-closed ("unavailable"), ownerless, immutable, caller-supplied-address. See Reputation Capabilities.
Media (all fully on-chain, grade A)
- NftImage / Erc721Metadata — on-chain NFT media. GenArt / VectorArt / GradientIdenticon / Gradient — deterministic generative art. SdfScene / PointCloud — 2D/3D scenes with a poster floor + optional GPU enhancement. Geo — fully on-chain cartography.
Structured
- Chart (
IChartData) — line/area/bar/scatter/pie. Table (ITableSource) — paginated data tables. - Progress / Allocation — progress bars, allocation displays.
Every media resolver has an on-chain poster floor — even GPU-enhanced scenes degrade to a verifiable on-chain image, so the app never depends on the client's GPU to stay grade A.
DeFi & contract-read resolvers
- UniswapV3PriceResolver (
uniV3Price) -- live V3 pool spot price fromslot0().sqrtPriceX96. args:(pool, dec0, dec1, invert). - UniswapV4PriceResolver (
uniV4Price) -- live V4 pool spot price via theStateViewlensgetSlot0(poolId)(same Q64.96 math as V3; kept alongside V3, not a replacement). args:(stateView, poolId, dec0, dec1, invert). - CallResolver (
staticread) -- the generic view reader: staticcalls any contract's view function and formats the result viaReadFormat(uint/int/address/bool/bytes32/string). This is how you render any Uniswap V4 hook's state (swap counters, dynamic fees, order books) -- no special hook resolver needed. args:(target, callData, retType, fmt, dec, frac). - MultiCallResolver (
multiread) -- batch severalstaticread-shaped reads into one rendered result (e.g. a hook dashboard).
All are immutable, ownerless, view-only, and fail closed to a fallback string on any revert or missing contract. See Rendering Uniswap Hooks for the hook-rendering pattern.
DeFi position, quote & flow resolvers (session additions)
- UniswapV3PositionResolver (
uniV3Position) — an LP NFT's pair/fee/tick-range/liquidity/fees. args:(positionManager, tokenId, field). - AavePositionResolver (
aavePosition) — a lending position: collateral/debt/borrowing-power/health factor. args:(pool, user, field). field 4 = health factor (∞when no debt). - UniswapQuoteResolver (
uniQuote) — expected swap output before signing (QuoterV2, staticcalled). args:(quoter, tokenIn, tokenOut, amountIn, fee, outDecimals, field). ESTIMATE — swap must still carry min-out. - ApprovalStateResolver (
approvalState) — Approve-vs-Swap gating via ERC-20 allowance. args:(token, owner, spender, needed, field). field 0 = Approved / Needs approval / Unlimited. - CurvePoolResolver (
curvePool) — Curve get_dy quote + balances (classic int128 stable pools). args:(pool, i, j, dx, outDecimals, field). - PortfolioResolver (
portfolio) — aggregated TOTAL summing many numeric reads (complementsmultireadwhich joins). args:(Read[]{target,callData,mulScale,divScale}, outDecimals, field). Fail-closed per read (partial total). - UniswapV4PriceResolver (
uniV4Price) — live V4 pool price (StateView.getSlot0). args:(stateView, poolId, dec0, dec1, invert).
All view-only, fail-closed ("unavailable"), ownerless, immutable. See DeFi Capabilities for the full picture + the honest swap flow, and Sepolia DeFi Addresses for which protocols exist on Sepolia.
CoW / intent-DeFi resolvers (session additions)
Intent-based DeFi — CoW Protocol conditional/programmatic orders — rendered + verified trustlessly. Deployed on Sepolia (where ComposableCoW lives); portable to any chain with ComposableCoW, since its address is a caller argument. Full treatment in Intent DeFi & CoW Protocol.
- CowTwapResolver (
cowTwap) — a TWAP order's live schedule (part X/N · next-slice countdown · per-part sell/limit) decoded from theTWAP.Datadefinition +block.timestamp. Pure arithmetic, Grade A. Renders the definition's schedule, not proof of registration. args:(twapData, sellDecimals, buyDecimals, field). - CowConditionalOrderResolver (
cowOrder) — live tradeability this block via a STATICCALL to the real ComposableCoWgetTradeableOrderWithSignature, rendering a field of the discreteGPv2Orderit would emit, and failing closed to"not active"when none is valid. Grade A. args:(composableCow, owner, receiver, salt, staticInput, offchainInput, proof[], sellDecimals, buyDecimals, field). - CowIntentVerifyResolver (
cowIntent) — "verify what you sign": recomputeskeccak256(fullAppData)on chain and compares it to the order's committedappData→"verified"/"app-data mismatch"(field 0), or the computed hash as hex (field 1). Integrity, never a safety verdict; fail-closed. Grade A. args:(fullAppData, expected, field). The human-readable pre/post-hook plan is a ⚙ client decode (webapps/lib/cr-cow-intent.js) over the hash-verified document — rendered only after"verified", unknown selectors markedOPAQUE, never "safe to sign".
Tokenized-vault resolver (session addition)
- VaultResolver (
vault4626·vault7540) — tokenized-vault NAV and async queue.vault4626renders NAV per share (convertToAssetsof one share), total assets, or share supply;vault7540renders the ERC-7540 pending/claimable redeem & deposit queue. Genuine on-chainviews → Grade A on the data edge; the trust boundary is the vault's own accounting (stated, never hidden). Fails closed to"unavailable"on a non-vault/revert/degenerate decimals. args (4626):(vault, assetDecimals, shareDecimals, field); (7540):(vault, controller, requestId, assetDecimals, shareDecimals, field). See RWA Capabilities.
RWA & compliance resolvers
Real-world-asset resolvers display on-chain reserve, compliance, and credential state — ChainRender never becomes the reserve oracle, the compliance authority, or the issuer. Reads are on-chain; where the underlying authority is mutable (an agent-updated identity registry), the binding grades ≤ C via the dependency axis, not the data edge.
- ProofOfReserveResolver (
por-coverage·por-reserves·por-supply) — coverage% = attested reserves ÷ tokentotalSupply, with provenance (feed, round) + freshness and a backed / under-collateralized badge. Grade A (both reads are on-chain). args:(reserveFeed, token, fracDigits, maxStaleSeconds)—maxStaleSeconds0 = show age but never assert stale; >0 = flagSTALEpast that age. Sibling kinds return the reserve (por-reserves) and supply (por-supply) figures. (docs/131) - Erc3643Resolver (
erc3643-status·erc3643-verified·erc3643-frozen·erc3643-can-transfer) — ERC-3643 (T-REX) compliance display: holder verified/frozen status via the token's identity registry +isFrozen, and acanTransferpreview. DISPLAY only, never enforcement — a real transfer re-checks on chain. The identity registry / compliance module are agent-mutable, so a binding grades ≤ C (DEP_MUTABLE), never A, even though the read itself is on-chain. args (status/verified/frozen):(token, holder); (can-transfer):(token, from, to, amount). (docs/133) - CredentialLifecycleResolver (
cred-status·cred-valid) — issuer-bound credential lifecycleVALID / EXPIRED / REVOKED / UNKNOWN(or "issuer mismatch") from a caller-suppliedCredentialStatusRegistry, with issuer-key provenance;cred-validcollapses it to a one-word gate. Grade A read (the authority behind it is what you trust). args:(registry, credentialId, expectedIssuer)—expectedIssueraddress(0)disables the issuer-key binding check. Composes with the ZK credential kinds (anonymous membership + revocable, issuer-bound validity). (docs/134)
All view-only, fail-closed ("unavailable"), ownerless, immutable, caller-supplied-address. See RWA Capabilities for the full picture and the display-not-enforcement discipline.
Settlement / escrow resolver (session addition)
The programmable-settlement framework (escrow, Kiva-class lending, crowdfunding) renders through one resolver that reads a settlement agreement's own on-chain state — never off-chain — and renders the honest card with the trust-grade split the framework is built on.
- SettlementCardResolver (
settle-status·settle-principal·settle-repaid) — reads a settlement agreement (AttestedLoanChannel/LoanChannel/ anyISettlementView:principal/totalRepaid/status/defaulted) and renders principal (in asset units), repaid % (totalRepaid ÷ principal), and a status word (funded/disbursed/settled/defaulted). Grade A (every figure is an on-chain read), with the card disclosing the split in words: escrow + distribution are on-chain ✓ · the disburse/repay legs are attested by a partner (≤ C), not enforced by code — a faithful render of state that shows where trust actually sits, never "trustless lending". args (all kinds):(agreement, assetDecimals, fracDigits)—assetDecimalsis the escrowed asset's decimals (18 = native ETH, 6 = USDC). Fails closed to "unavailable". (docs/172 §8/§9, docs/173)
Oracle, ENS & attestation resolvers
- OracleFeedResolver (
price) — reads an AggregatorV3-shaped feed as on-chain state, rendered with provenance (feed, round) and freshness (STALEpast a caller bound). Grade A. args:(feed, fracDigits, maxStaleSeconds). ChainRender blesses no oracle — the feed is caller-supplied. - EnsResolver (ENS record kinds) — read an ENS text record (
(node, key)), resolve addr ((node)), or the primary reverse name ((node)), live on-chain — Grade A. The ENS-v2 Universal Resolver kind (CCIP-read / EIP-3668) reaches an off-chain gateway, so it declaresCLIENT_FETCHand grades ≤ C (Live) by the data-edge rule — the one deliberately off-chain kind in the first-party set. args (ENS-v2):(dnsName, call). See ENS Names & Integration. - EnsMultichainResolver (
ensApp·ensNameChain) — two additive ENS reads beyond records:ensAppreads a name's conventionalchainrender.apptext key (ENS as ChainRender's own naming layer), andensNameChainis the ENSIP-19 multichain verified reverse — the primary name for an address on a given chain (per-coinTypereverse namespace), requiring the forward round-tripaddr(namehash(name), coinType) == whoso an unverified reverse can never be shown. Grade A (pure on-chain reads), fail-closed to"-". args (ensApp):(node); (ensNameChain):(who, coinType)where an EVM coinType is0x80000000 | chainId. The ENS registry is supplied at construction, never hardcoded. See ENS Names & Integration. - AttestationResolver (EAS) — read whether an EAS attestation is valid for
(subject, schema, uid)(verified / unverified — reveals the claim, not the data), or the claimed string a subject published(uid, schema, subject). Grade A read (a mutable attester is the authority). See Data Sources.