⚠️ 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.
Guides

Guide: Bind Live On-Chain Data

Goal: show real, current chain state (a price, a balance) in your UI.

Add a data slot bound to a resolver. The resolver is read at render time, so the value is always current:

import { compose } from "@chainrender/client";

const card = compose.box([
  compose.heading("ETH / USDC"),
  compose.slot("feed", { resolver: "0x<oracle-resolver>", arg: encodedArgs  }) // slot(bind, { resolver, arg }),
]);

The bound read adds only a READ_CHAIN capability — your component stays grade A. If the resolver reverts or is missing, the slot fails closed to "unavailable"; it never breaks the render or shows a fabricated value.

Pick a resolver from the Resolver Catalog, or write your own implementing supportsKind + resolve. See Concepts → Resolvers.