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 deployedDoorRegistry.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.