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

Reference: Capabilities (what ChainRender can do, and how)

Every capability an app can use, with the mechanism, the arguments, the trust grade it earns and when to reach for it. This is the same capability pack the visual builder gives its AI, from the same file (ai/capability-pack.json), so an AI reading this page and the builder's AI see identical guidance.

Two companion pages are exact by construction: All Resolver Kinds (every kind's arguments and encoding, and where its contract is deployed) and Deployed Addresses (every address, per chain). Take arguments and addresses from those pages, never from an example below.

Workflow

  • TARGET: the builder tells you to produce a component | miniapp | standalone (see outputTargets). Structure your output to match. If not told, infer from complexity; default to component.
  • Compose a Node tree using ONLY the nodeTypes below.
  • For live data, use a slot/image with a resolver 'bind' from resolverKinds.
  • For user actions (write/mint/claim), use a button with a declared action {to, sig, value?, args}.
  • Keep it Grade A: on-chain reads + on-chain art, no off-chain fetch. Rich media (p5/three) is ⚙, honestly labeled.
  • The output is graded + validated + compiled by ChainRender — you don't need to be trusted, your output is checked.

Node types

Type What it is
box container; direction row|column; holds children; the layout primitive. Layout/spacing/surface style tokens are client 0.20 Enhanced mode (VERSION_5): its interpreter is deployed, but the viewer does not style them yet (docs/202 phase 3), so do not use them.
text text/heading/status/label/note (role attr); the content primitive
button a clickable that carries a declared action (or is inert); NEVER arbitrary code
input a form field (text/number); its value feeds action args via $name
icon a named on-chain icon glyph
link an anchor (href)
slot binds live on-chain DATA via a resolver (renders a value/region)
image binds on-chain MEDIA/art via a resolver (renders SVG/data-URI)
ref references another registered component by hash (composition)

Capability bits (declare what the app does)

Bit When to declare it
READ_CHAIN the universal baseline; any on-chain read. Grade A.
WRITE_CHAIN declare when the app has a state-changing action (button that writes).
TRANSFER_VALUE declare when an action carries ETH value (e.g. payable mint). Value-smuggle is refused if undeclared.
SIGN_MESSAGE declare for EIP-712 typed signing.
BATCH_EXECUTE declare for batched actions (one signature, N gated calls).
CLIENT_FETCH declare for an off-chain fetch (drops grade to C unless it's a fail-closed enhancement over a floor).
GPU_EXECUTE declare for GPU/rich-media enhancement (SDF ray-march, p5/three) — must have an on-chain poster floor.

Output targets

The builder tells you WHICH target to produce (a user choice). Structure your output to match it. If unspecified, infer from complexity: a single piece → component; a self-contained embeddable widget → mini-app; a multi-screen app with navigation → standalone. Default to 'component' when ambiguous.

Target What Produce Compiled by Use when
component A single reusable node tree — one registered component, one content hash. Return ONE Node tree (a box with children). No views, no composition. compileComponent(tree) → { hash, hex } a card, a chart, a mint widget, a profile badge — a piece meant to stand alone or be embedded/referenced elsewhere.
miniapp A composition: a scene/shell + N placed components in a declared arrangement. Forkable, embeddable, capability envelope = UNION of placed components. Return an array of component trees + an arrangement (which component goes where). Each component is compiled, then combined via buildComposition. buildComposition({ components, arrangement }) → forkable manifest a self-contained widget others can fork or place — a Farcaster frame, an embeddable dashboard, a composed studio. Smaller than a full app, more than one component.
standalone A full app: multiple VIEWS with in-app navigation + its own capability envelope + (optional) a persistent shell. Return an array of view trees (each a Node tree) + the nav type (tabs/wizard/master-detail/modal) + an optional shell. Each view compiles to a hash; combine with buildTabs/buildWizard/buildMasterDetail/buildModal. buildTabs([viewHashes], {shell}) (or buildWizard/buildMasterDetail/buildModal) → app root hash a multi-screen app — Mint/Gallery/My-NFTs; Quote/Venues/Route; a wizard flow. The flagship pattern.

Capabilities by category

72 capabilities in 25 categories:

Data / live reads (12) · Identity / ENS (7) · Privacy / credentials (2) · Privacy / attestation (1) · Visual / on-chain art (6) · Visual / rich media (1) · Visual / effects (2) · Visual / media (1) · Charts (1) · Structure / UI (5) · Actions / write (3) · Actions / sign (1) · Actions / verify (1) · Composition (3) · Presentation / theming (1) · Naming / ENS subnames (2) · Naming / versioning (1) · Trust (1) · DeFi / positions & trade (7) · RWA / compliance (3) · Reputation / social (4) · DeFi / intent & programmatic orders (3) · RWA / tokenized vaults (2) · Multiplayer / games (1) · Backend / app contract (1)

Data / live reads

Chainlink price

How slot bind 'oracle-feed'
Arguments feed:address, fracDigits:uint8, maxStaleSeconds:uint256
Grade A
Use when show a live token price from a Chainlink feed; stale feeds are badged, never faked
Example slot bind=oracle-feed arg=encode(feedAddr, 4, 3600)
See reference/data-sources

Chainlink history chart

How image bind "chart" with argValues {feed, points, chartType, title, decimals}; the builder fills ChartSlotAdapter + ChainlinkChartSource (chart.chainlinkHistoryChartArgs)
Grade A
Use when a live price-history line chart driven by a Chainlink feed's on-chain rounds
See reference/data-sources

Uniswap V3 price

How slot bind via UniswapV3PriceResolver
Grade A
Use when live spot/TWAP price from a Uniswap V3 pool
See reference/data-sources

Aave reserve

How slot via AaveReserveResolver
Grade A
Use when live lending-pool rate/reserve data
See reference/data-sources

ERC-20 balance

How slot via Erc20BalanceResolver
Grade A
Use when a wallet's token balance, formatted with the token's own decimals
See reference/data-sources

The viewer's own wallet (balance, token balance, ENS name, identicon)

How a client slot whose account arg is "$viewer": { "type": "slot", "bind": "erc20balance", "argValues": { "token": "0x…", "account": "$viewer" } } (identicon / gidenticon on an image node). Leave out resolver and arg.
Arguments balance / balanceWei {account}, erc20balance / erc20balanceRaw {token, account}, ensName {who}, identicon / gidenticon {account} — the account arg is "$viewer"
Grade ⚙ above the floor: the on-chain render shows the fallback text to everyone; a ChainRender viewer fills it with this chain's own resolver only after the person chooses to show their data in this app
Use when show the connected person their own balance, token balance, primary ENS name or identicon. Not for anything that decides what the app shows or does: "$viewer" never goes into an action, a signature or a condition. No other kind can read it (no portfolio total).
See guides/viewer-reads

Transfer history (client-side, from logs)

How a client slot bound to "transfers": { "type": "slot", "bind": "transfers", "argValues": { "kind": "token-transfers", "account": "$viewer", "token": "0x…", "blocks": "5000", "limit": "20" } }
Arguments kind (token-transfers, erc20-transfers, nft-transfers, native-transfers), account ("$viewer" or an address) and/or token (an address), blocks 1..45000 (default 5000), limit 1..50 (default 20)
Grade ⚙ above the floor: the viewer reads the chain's logs (paged eth_getLogs) and states the block window it read; zero-value and dust transfers are hidden and counted, look-alike addresses are flagged, tokens the app did not name are marked unverified
Use when recent transfers for the viewer (needs their choice to show their data) or for a fixed address or token. Say next to it that it covers a recent block window, not all time.
See guides/viewer-reads

ERC-721 metadata

How image bind 'nftImage' + Erc721/NftImageResolver
Grade A
Use when render an NFT's on-chain art/metadata from its tokenURI
See guides/nft-collection-frontend

Generic view read (CallResolver)

How slot bind 'staticread' → CallResolver
Arguments target, callData, returnType, format
Grade A
Use when READ ANY view function on ANY contract (the developer's own contract) — the most important reader for custom backends
Example read totalSupply()/mintPrice()/balanceOf(addr) on a custom ERC-721
See reference/data-sources

Multi-call read

How MultiCallResolver (join/sum/reduce)
Grade A
Use when combine several view reads into one value/list
See reference/data-sources

Computed read

How ComputeResolver
Grade A
Use when a derived value from a small on-chain computation over reads
See reference/data-sources

Event reads / live regions

How slot marked live (DataBinder)
Grade A
Use when a value that re-reads each block (a ticking counter, a live rate)
See guides/live-data-and-events

Identity / ENS

ENS name

How slot bind 'ensName'
Arguments node:bytes32 (namehash)
Grade A
Use when reverse-resolve an address to its ENS name (forward-verified, anti-spoof)
See guides/ens-integration

ENS text record

How slot bind 'ensText'
Arguments node:bytes32, key:string
Grade A
Use when read an ENS text record (avatar, url, description)
See guides/ens-integration

ENS address

How slot bind 'ensAddr'
Arguments node:bytes32
Grade A
Use when resolve an ENS name to its address

ENS v2 (CCIP/offchain-aware)

How slot bind 'ensV2'
Arguments dnsName:bytes, call:bytes
Grade A
Use when universal-resolver path; offchain records surface as 'off-chain (CCIP)'

ENS profile (identicon/avatar)

How image bind 'gidenticon' (on-chain identicon). An ENS avatar is an off-chain pointer: read the avatar text record with 'enstext', and any image fetched from it is CLIENT_FETCH
Grade A (identicon) / C (fetched avatar)
Use when a profile picture — on-chain identicon (A) or ENS avatar (needs CLIENT_FETCH → C)

ENS app manifest

How slot bind 'ensApp' (ENS text key chainrender.app)
Arguments node:bytes32 (ENS namehash)
Grade A
Use when read a name app-manifest text key (chainrender.app) and render/launch the on-chain app it names — ENS as the naming layer for ChainRender apps (dogfood chainrender.eth); works wherever ENS text resolves
See guides/ens-integration

ENSIP-19 multichain primary name

How slot bind 'ensNameChain' (per-coinType verified reverse)
Arguments who:address, coinType:uint256 (ENSIP-11: 0x80000000 | chainId; mainnet=60)
Grade A
Use when the primary ENS name an address resolves to ON A GIVEN CHAIN (chain-aware identity), forward-verified addr(node,coinType)==who. Renders a live name only where an ENSIP-19 reverse registrar for that coinType is populated
See guides/ens-integration

Privacy / credentials

Selective-disclosure credential

How slot bind 'credential'
Arguments statementId:bytes32, a/b/c (Groth16 proof), pub:uint256[]
Grade A
Use when prove membership of a set (allowlist/DAO) WITHOUT revealing which member; a valid proof renders the checkmarked statement, a bad one renders 'Unverified'
See concepts/privacy

Bound single-use credential

How slot bind 'credential-bound' + NullifierRegistry
Arguments statementId, proof, pub:uint256[4]
Grade A
Use when a non-transferable, single-use credential (nullifier prevents replay; consuming it is a separate WRITE)
See concepts/privacy

Privacy / attestation

Attested identity claim (EAS)

How slot bind 'identityVerified' / 'identityClaim'
Arguments subject:address, schema:bytes32, uid:bytes32
Grade A
Use when render 'subject holds attestation X from attester Y' via EAS
See concepts/privacy

Visual / on-chain art

Generative art

How image bind 'genart'
Arguments seed
Grade A
Use when deterministic on-chain generative SVG art from a seed
See concepts/visual-media

Gradient identicon

How image bind 'gidenticon'
Arguments account
Grade A
Use when a unique on-chain identicon/logo for an address
See concepts/visual-media

Vector art

How image bind 'vecart'
Arguments seed
Grade A
Use when high-fidelity on-chain vector art
See concepts/visual-media

SDF 2D/3D scene

How image bind 'sdfscene' (provenance computed or computed-gpu)
Arguments seed
Grade A (poster) / ⚙ (GPU)
Use when signed-distance-field geometry; on-chain poster floor + optional GPU ray-march enhancement
See guides/building-a-scene

Point cloud

How image bind pointcloud
Grade A (poster) / ⚙ (WebGL)
Use when point-based scene; on-chain poster + WebGL enhancement
See concepts/advanced-scenes

On-chain cartography

How geoatlas renderer
Grade A
Use when a fully on-chain world map (Real-Earth atlas, equirectangular)
See concepts/visual-media

Visual / rich media

p5.js / three.js interactive

How image bind 'p5'/'three' scene binding (libHash + seed + entry)
Grade ⚙
Use when a playable/interactive sketch (game, physics toy, dataviz); library + sketch stored on-chain, runs client-side over a poster floor, fails closed. Requires GPU_EXECUTE + a poster floor.
See concepts/rich-media-p5-three

Visual / effects

Post-processing effects

How EffectPresetRegistry (CRT/glass/vignette/scanlines/grain)
Grade A (SVG-filter floor)
Use when stack visual effects over a scene; each has an on-chain SVG-filter floor
See guides/applying-effects

Declarative SVG animation

How SvgAnim (TIME-driven)
Grade A
Use when declarative animation (no script loop)
See concepts/visual-media

Visual / media

On-chain NFT media + provenance

How NftImageResolver / media provenance
Grade A
Use when render an NFT's on-chain media with verified provenance (off-chain pointers refused)
See guides/nft-collection-frontend

Charts

Chart (line/area/bar/scatter/pie/donut)

How image bind chart + ChartSlotAdapter + IChartData source (chart.encodeChartSlotArgs); a Chainlink price history is authored from argValues (see "Chainlink history chart")
Grade A
Use when a data chart, static or bound to a live on-chain source; fails closed to axes-only
See guides/add-chart

Structure / UI

Responsive layout

How box layout {kind: stack|grid|flow, columns, breakpoints}
Grade A
Use when responsive grids/stacks/flow with container-query breakpoints
See concepts/render-pipeline

Multi-view app

How buildTabs / buildWizard / buildMasterDetail / buildModal (compile views → combine)
Grade A
Use when in-app navigation: tabs, ordered wizard, list→detail, or a modal overlay; reachability enforced (no stranded views)
Example buildTabs([quoteHash, venuesHash, routeHash], {shell})
See guides/multi-view-app

Data table

How TableRenderer (static/bound/paginated)
Grade A
Use when a semantic table; rows can be pulled live from an ITableSource; paginated for large sets
See reference/feature-catalog

Interactive controls

How ControlRenderer (toggle/select/slider/search)
Grade A
Use when controls that bind to a display PARAMETER (never a consequence); interaction adds no capability
See reference/feature-catalog

Source-code component

How SourceRenderer + SourceStore
Grade A
Use when display on-chain source, line-numbered + escaped (adversarial source can't break out)

Actions / write

Declared action (button)

How button action {to, sig, value?, args}
Grade A
Use when any state-changing call (mint/claim/swap/transfer) — the runtime constructs EXACTLY the declared calldata; the button can't call anything else or smuggle value
Example button action={to:0xNFT, sig:'mint(uint256)', value:'0x...', args:'$qty'}
See guides/declare-action

Batched action

How batch of declared actions
Grade A
Use when one signature, N gated calls; each member must be in the bound interface (no smuggling)
See guides/declare-action

Funds held by a rule (escrow)

How your own escrow contract in the GoalEscrow shape (per-item parameters, pull payments, outcome from on-chain facts only)
Arguments create(...); contribute(id) payable; payOut(id); refund(id)
Grade A (custody and release enforced by your contract); anything decided off-chain must name who attests it
Use when hold funds until a rule releases them. The settlement framework (SettlementChannel, LoanChannel, AgreementRegistry) is built but NOT deployed — check Deployed Addresses
Example GoalEscrow: all-or-nothing fundraising with refunds
See guides/payments-escrow-settlement

Actions / sign

Typed signing (EIP-712)

How declared sign action
Grade A
Use when gather an EIP-712 signature (permits, votes, orders); chainId-checked. The message is signed exactly as written: no $name inputs, literal values that fit their types (review rule sign-message)
See guides/wallet-and-signing

Actions / verify

Signature verification (1271/6492)

How SignatureVerifier (bind 'verifysig')
Grade A
Use when verify a signature on-chain, incl. smart-account (ERC-1271) and pre-deploy (6492)

Composition

Mini-app / composition

How CompositionRouter + ref nodes (sockets)
Grade A
Use when compose multiple components/scenes into one app; capability envelope is the UNION of children (no escalation)
See concepts/composition

App DNA / forking

How AppRegistry lineage
Grade A
Use when fork an app; the parent is recorded on-chain (traceable lineage)
See concepts/composition

Farcaster mini-app

How miniapp adapter (buildManifest/buildEmbed)
Grade A
Use when package an app as a Farcaster mini-app / Frame
See guides/farcaster-miniapp

Presentation / theming

Design tokens + theming

How ThemeTokens (defaultTokens/darkDefaults/highContrastDefaults) → CSS
Grade A
Use when theme an app; render-time (zero gas, no redeploy); light/dark/high-contrast; contrast invariants enforced
See guides/authoring-themes

Naming / ENS subnames

Register a subname (open floor)

How action → SubnameStakeRegistrarV2.register(label, componentHash) payable(stake)
Grade A
Use when claim myapp.chainrender.eth anonymously — permissionless, gated only by a REFUNDABLE anti-spam stake; label must pass the on-chain charset gate (lowercase a-z0-9-, no confusables)
See guides/registering-a-name

Register verified (own the ENS name)

How action → registerVerified(label, componentHash, ensNode)
Grade A
Use when claim label VERIFIED — enforces you own
See guides/registering-a-name

Naming / versioning

Versioned name

How SubnameVersionRegistry (append-only + timelock + freeze)
Grade A
Use when safe app updates through a name; version history is immutable, timelocks only grow, freeze seals it
See concepts/versioning

Trust

Trust grade + enforcer

How grade() + validateApp() (automatic)
Grade n/a
Use when ALWAYS runs on the composed app: A/B/C letter + itemized deviations; the enforcer REFUSES unsafe apps (arbitrary-code escape hatch, dishonest capability envelope, unknown vocabulary). You don't invoke it — it's the safety net over your output.
See concepts/trust-grade

DeFi / positions & trade

Uniswap V4 price

How slot bind 'uniV4Price' (StateView lens)
Arguments stateView:address, poolId:bytes32, dec0:uint8, dec1:uint8, invert:bool
Grade A
Use when live V4 pool spot price via StateView.getSlot0; additive to V3, not a replacement
See concepts/rendering-uniswap-hooks

Uniswap V3 LP position

How slot bind 'uniV3Position'
Arguments positionManager:address, tokenId:uint256, field:uint8 (0=summary 1=liquidity 2/3=feesOwed 5/6=tickLower/Upper)
Grade A
Use when render an LP NFT's pair/fee/tick-range/liquidity/fees owed
See concepts/defi-capabilities

Aave position / health factor

How slot bind 'aavePosition'
Arguments pool:address, user:address, field:uint8 (0=summary 1=collateralUsd 2=debtUsd 3=availableUsd 4=healthFactor 5=liqThresholdPct 6=ltvPct)
Grade A
Use when a lending position with collateral/debt/borrowing-power and the liquidation-risk HEALTH FACTOR (field 4; shows infinity when no debt)
See concepts/defi-capabilities

Uniswap pre-trade quote

How slot bind 'uniQuote' (QuoterV2, staticcalled)
Arguments quoter:address, tokenIn:address, tokenOut:address, amountIn:uint256, fee:uint24, outDecimals:uint8, field:uint8 (0=formatted 1=raw 2=gasEstimate)
Grade A
Use when expected swap output BEFORE signing; ESTIMATE only — the swap action must still carry its own min-out
See concepts/defi-capabilities

Approval-state gate

How slot bind 'approvalState' (ERC-20 allowance)
Arguments token:address, owner:address, spender:address, needed:uint256, field:uint8 (0=word 1=raw allowance 2=bool covered)
Grade A
Use when Approve-vs-Swap gating — show whether an owner has approved a spender for enough of a token before offering the action
See concepts/defi-capabilities

Curve pool quote

How slot bind 'curvePool' (get_dy)
Arguments pool:address, i:int128, j:int128, dx:uint256, outDecimals:uint8, field:uint8 (0=get_dy formatted 1=raw 2=balance(i) 3=coin(i))
Grade A
Use when Curve stable-pool quote/balances, broadening AMM coverage beyond Uniswap; get_dy is an ESTIMATE
See concepts/defi-capabilities

Portfolio total

How slot bind 'portfolio' (sum of reads)
Arguments reads:tuple(address target,bytes callData,uint8 mulScale,uint8 divScale)[], outDecimals:uint8, field:uint8 (0=formatted total 1=raw 2=count succeeded)
Grade A
Use when an aggregated TOTAL summing many numeric on-chain reads (complements multiread which joins); fail-closed per read (partial total)
See concepts/defi-capabilities

RWA / compliance

Proof-of-Reserve coverage

How slot bind 'por-coverage' (siblings 'por-reserves' / 'por-supply')
Arguments reserveFeed:address, token:address, fracDigits:uint8, maxStaleSeconds:uint256
Grade A
Use when coverage% = attested reserves / token totalSupply, with provenance (feed, round) + freshness and a backed / under-collateralized badge
See concepts/rwa-capabilities

ERC-3643 (T-REX) compliance display

How slot bind 'erc3643-status' (siblings 'erc3643-verified' / 'erc3643-frozen' / 'erc3643-can-transfer')
Arguments token:address, holder:address (can-transfer: token, from, to, amount)
Grade ≤ C
Use when DISPLAY a holder's ERC-3643 compliance (verified/frozen) or a canTransfer preview — never enforcement; a real transfer re-checks on chain. Identity registry is agent-mutable → ≤ C (DEP_MUTABLE), even though the read is on-chain
See concepts/rwa-capabilities

Credential lifecycle

How slot bind 'cred-status' (sibling 'cred-valid')
Arguments registry:address, credentialId:bytes32, expectedIssuer:address (address(0) disables the issuer-key check)
Grade A
Use when issuer-bound credential status VALID / EXPIRED / REVOKED / UNKNOWN with issuer-key provenance; cred-valid collapses it to a one-word gate
See concepts/rwa-capabilities

Reputation / social

EFP relationship (Ethereum Follow Protocol)

How slot bind 'efp-state' (siblings 'efp-follows' / 'efp-tag' / 'efp-list-size')
Arguments listRecords:address, slot:uint256, target:address (efp-tag adds tag:string)
Grade A
Use when does a caller-named EFP list currently follow / block / mute / tag a target (FORWARD read, bounded scan). Follower counts / reverse lookups are OFF-CHAIN (indexer) → grade ≤ C, never render them as an on-chain fact
See concepts/reputation-capabilities

Delegated address vouch

How slot bind 'rep-vouch' (sibling 'rep-tally' = transparent k-of-n)
Arguments registry:address, attester:address, subject:address, topic:bytes32 (rep-tally: registry, attesters[], subject, topic)
Grade ≤ C
Use when one attester's vouch (vouched/expired/revoked/unknown) or a k-of-n over a CALLER-supplied attester set. Delegated to a mutable attester → ≤ C. Never a global score; change the set, change the answer
See concepts/reputation-capabilities

Cross-source reputation aggregate

How slot bind 'rep-aggregate' (IReputationSource adapters)
Arguments subject:address, sources:address[], ctxs:bytes[] (per-source abi-encoded context)
Grade = weakest source
Use when transparent k-of-n across caller-supplied sources (EFP, vouches, EAS, ERC-725, future), rendered 'k/n (grade X)' where X is capped at the weakest source. An A EFP follow can't launder a C vouch into trustlessness
See concepts/reputation-capabilities

ERC-725Y / ERC-735 account claim (same-chain)

How slot bind 'staticread' (CallResolver) at the account's ERC-725Y data key — STATICCALL against a co-located contract on the resolver's chain (typed Erc725ClaimResolver planned)
Arguments target:address (the ERC-725Y/735 account, on the resolver's chain), callData (getData(key)), returnType, format
Grade ≤ C
Use when read an ERC-725Y data key or ERC-735 claim from an account co-located on the resolver's chain (Sepolia/Robinhood/Arc) — the standard behind LUKSO Universal Profiles, but LUKSO's chain is NOT integrated (a STATICCALL can't reach a UP that lives only on LUKSO). Owned/mutable source → ≤ C, rendered as 'the current claim of authority Y', never as proof
See concepts/reputation-capabilities

DeFi / intent & programmatic orders

CoW conditional order (live)

How slot bind 'cowOrder' (ComposableCoW.getTradeableOrderWithSignature, staticcalled)
Arguments composableCow:address, owner:address, handler:address, salt:bytes32, staticInput:bytes, offchainInput:bytes, proof:bytes32[], sellDec:uint8, buyDec:uint8, field:uint8 (0=status 1=sellAmount 2=buyAmount 3=validTo 4=partiallyFillable)
Grade A
Use when render the DISCRETE order a CoW Composable-CoW conditional order (TWAP/StopLoss/GoodAfterTime/…) would emit THIS block, with no server; a revert = no valid order now -> 'not active' (fail-closed). The first intent-DeFi resolver: a trustless, serverless order monitor
See concepts/defi-capabilities

CoW TWAP schedule

How slot bind 'cowTwap' (pure decode of TWAP.Data + block.timestamp; no external call)
Arguments staticInput:bytes (the TWAP.Data blob), sellDec:uint8, buyDec:uint8, field:uint8 (0=summary 1=partSellAmount 2=minPartLimit 3=currentPart 4=totalParts 5=secondsToNext 6=status 7=interval)
Grade A
Use when render a TWAP order's schedule progress — 'part 3/10 - live', next-slice countdown, per-part sell/min-limit, status pending/active/gap/finished. Renders the DEFINITION's schedule (not proof of registration) — pair with 'cowOrder' for live tradeability
See concepts/defi-capabilities

CoW app-data integrity (what am I signing)

How slot bind 'cowIntent' (on-chain keccak256 of the app-data document)
Arguments fullAppData:bytes (the stringified app-data doc shown to the user), expectedAppData:bytes32 (order appData, e.g. from cowOrder), field:uint8 (0=verdict verified/app-data mismatch 1=computed hash hex)
Grade A
Use when anti-phishing 'verify what you sign': prove a presented CoW app-data document (carrying the order metadata + pre/post hooks) is byte-identical to the hash the order committed (keccak256(fullAppData)). Tamper one byte -> app-data mismatch. The human-readable hook plan is a CLIENT decode over these hash-verified bytes (pair with cowOrder)
See concepts/defi-capabilities

RWA / tokenized vaults

ERC-4626 vault (NAV / totals)

How slot bind 'vault4626' (ERC-4626 view reads, staticcalled)
Arguments vault:address, assetDec:uint8, shareDec:uint8, field:uint8 (0=NAV per share in asset units 1=totalAssets 2=totalSupply shares 3=shares per 1 asset)
Grade A
Use when render a tokenized vault's NAV per share, total assets, share supply — the tokenized-treasury surface; convertToAssets is the vault's OWN accounting (state the trust boundary). Composes with por-coverage + oracle-feed for a full vault panel
See concepts/defi-capabilities

ERC-7540 async vault (redemption queue)

How slot bind 'vault7540' (ERC-7540 request-state view reads, staticcalled)
Arguments vault:address, controller:address, requestId:uint256 (0 for single-slot), assetDec:uint8, shareDec:uint8, field:uint8 (0=pending redeem shares 1=claimable redeem shares 2=pending deposit assets 3=claimable deposit assets)
Grade A
Use when render the async request/settle queue (pending/claimable redeem & deposit) for a controller — the redemption queue RWA/T-bill funds hide behind a dashboard, read trustlessly
See concepts/defi-capabilities

Multiplayer / games

Two-player game: on-chain lobby + settlement

How GameLobbyV2 (waiting room, escrowed stakes) + GameChannelV2 (settles signed peer-to-peer moves through your IGameRulesV2; force-move; equivocation proofs)
Arguments createOffer(rules, stake, guard, responseWindow, signer) payable(stake); join(offerId) payable(stake); joinWithSigner(offerId, signer)
Grade A for the lobby floor and the settlement; the game screen (signing moves, transport) is a client page, labelled as such
Use when a turn-based two-player game with an on-chain waiting room and an enforced result (tic-tac-toe, commit-reveal games). NOT for real-time games (racing, physics): the rules cannot check them — no stakes on those. Exactly two players.
Example floor: staticread slots on GameLobbyV2.offerCount()/offerStake(id) + a button action {to: GameLobbyV2, sig: 'join(uint256)', value: '', args: '$offerId'}; rules: TicTacToeRules or RockPaperScissorsRulesV2
See guides/multiplayer-and-lobbies

Backend / app contract

Your own app contract (backend in Solidity)

How an ownerless contract with single-value views (read by 'staticread' via CallResolver) and functions called by declared actions
Arguments views: one value per function (e.g. raisedOf(uint256)); actions: {to, sig, value?, args}
Grade A when the contract is ownerless and every displayed value is read on-chain
Use when the app has its own rules or state (fundraise, vote, registry, escrow, game rules) that existing resolvers cannot read
Example contracts/examples/GoalEscrow.sol: slot staticread raisedOf(0) formatted FIXED 18; button contribute(uint256) value '10000000000000000'
See guides/app-contract