⚠️ 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.
Guided Tours

Tour: Doorstep

A public on-chain tribute. A knock burns a token to a door; the aggregate — total burned, knock count, loudest knock — is read from a DoorRegistry view (Grade A). The message history lives only in event logs and is deliberately not rendered as Grade A — ChainRender renders the public tribute, never an inbox. This tour reuses the spine from Settlement Desk.


1. Import

{
  "type": "box",
  "direction": "column",
  "children": [
    { "type": "text", "content": "Doorstep", "role": "heading" },
    { "type": "text", "content": "A public on-chain tribute. The identicon is the pure on-chain floor; the aggregate is a Grade-A view read." },
    {
      "type": "box",
      "direction": "row",
      "children": [
        { "type": "image", "bind": "gidenticon", "provenance": "computed", "argValues": {} },
        { "type": "slot", "bind": "door-knocks", "argValues": { "registry": "0x2222222222222222222222222222222222222222", "target": "0x0000000000000000000000003333333333333333333333333333333333333333", "assetDecimals": "18", "fracDigits": "4" } }
      ]
    },
    { "type": "text", "content": "Trust, declared on-chain", "role": "heading" },
    { "type": "slot", "bind": "trust-facets", "argValues": { "subject": "0x2222222222222222222222222222222222222222" } }
  ]
}

2. The identicon is the floor — it needs nothing deployed

The image node bound to gidenticon is the pure on-chain-deterministic floor: a symmetric identicon computed from an address with keccak, in the browser. Same address → same SVG, forever, no contract and no network. It renders on import, before you touch a chain. See The Floor and On-Chain Icons.

3. door-knocks is Grade A — the message feed is not

door-knocks reads the DoorRegistry aggregate via a view: Grade A.

  • registry — your deployed DoorRegistry.
  • target — the door key: bytes32(uint160(address)) for an address door, or an ENS namehash. (The example pads an address into 32 bytes.)

The messages are a separate, honest capability: door-feed reads the Knock event logs via eth_getLogs. That's on-chain data but not a re-executable view, so it grades ≤ C and is labeled off-chain — never dressed as Grade A. If you want the message list, add a door-feed slot with { registry, target }; its badge will correctly read ≤ C. Keeping the aggregate (Grade A) and the feed (≤ C) as two binds is the point: the grade on each is honest.

4. Preview, deploy, grade

As before: placeholders → door-knocks shows "unavailable" (the identicon still renders); set Interpreter + RPC; deploy DoorResolver + TrustDisclosureResolver (ownerless, once per chain) and a DoorRegistry that's had at least one knock, so there's an aggregate to read. Replace 0x2222… and the target, preview, and the tribute renders live, Grade A.

That's the full set. You've imported, fixed the compile gotcha, previewed fail-closed, synced the vocabulary, and taken an app to live on-chain data — the complete ChainRender build loop.

← Back to Guided Tours