PWA boot-blob — a layer-1, verifiable UI for Hooks #759
Replies: 2 comments
-
|
PoC's up 👇 a working SetBoot transactor + PWABoot amendment — tested (set/replace/delete, draft on purpose — opened early so we shape the ledger object together (per-account vs |
Beta Was this translation helpful? Give feedback.
-
|
Verify-core proof landed — the next step I flagged on this PoC. Both core links are now proven for all inputs (xahc-prover): boot-only-the-pinned-blob (the gate) and owner-only + strictly-monotonic re-pin (no downgrade). Writeup + runnable demo: Proving the gate surfaced the next gap: since sfBootBlob is owner-mutable, an authorized owner can re-pin to a new blob that's itself regressed/malicious — gate + authz both pass, target's unsafe. "Authorized ≠ safe." A way to close it without touching SetBoot: a re-pin is certified only if the new blob re-proves its named invariants → signed proof-registry entry (fail-closed: an unproven blob can't be certified) → a watcher that flags the moment deployed code ≠ proven code. An upgradeable boot target that's always provably-current or loudly flagged. Honest residual — maps onto the open stage-2 sandbox question: this proves the named invariants, not stage-2 sandboxing or any dimension you don't prove. SetBoot still stores the blob verbatim; this is an assurance layer, not a node check. Design question: re-pin certification at protocol-level (a field/flag on SetBoot), wallet-UX, or pure tooling? My lean is tooling + wallet-UX, keeping SetBoot minimal. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
The problem
In every "decentralized" app the contract is trustless but the UI is not — it lives on
a web host that can be rugged, MITM'd, or silently swapped. We can close that last gap on
Xahau: a UI whose root of trust is the ledger itself.
The idea (credit to Richard Holland)
Store a very small PWA "bootloader" on-chain — the only thing a wallet has to trust.
It loads a larger stage-2 app from anywhere (Evernode / IPFS / magnet) and verifies it
before executing a byte. A secure-boot chain, rooted in the ledger. Richard's framing:
"fairly similar to remarks, but a dedicated PWA boot blob for each account or hook."
Why it's the provable version
A bootloader's verify core is small + bounded, and its safety property is one invariant:
never run bytes whose hash ≠ the pinned policy — exactly what
xahc-prover proves on Hooks (
accept ⟹ condition). So this closes one link — the gate's accept logic:accept ⟹ candidate hash == pinned hash (32B), the same byte-exact discipline as the guardrail's dst-lock. Three things stay out of model and trusted, and I want to be explicit: (1) the on-chainSetBoottx stores the blob verbatim and verifies nothing — the pin/compare is a wallet-side convention, not protocol-enforced; (2) the wallet'sSHA-512Halfover the fetched stage-2 bytes; (3) stage-2 sandboxing. It proves the gate, not the whole boot chain — and the proven artifact is a reference model, not a deployed hook.Proposed v1 (a storage primitive only)
xahaud's job is to store + serve the blob; the bootloader runtime
(fetch/verify/sandbox) is wallet-side. Modeled on the Remarks amendment:
SetBoottransactor +sfBootBlob(VL), amendment-gated, fee scaled per byteso the stub stays small (proposed cap ~4 KB);
tfBootImmutableto lock it (fixed-pin);only to its own Hook, no arbitrary egress).
A reference PoC (boot-blob + a "loads-only-verified" proof against a proven
agent_guardrailHook) is in progress so we react to running code, not theory. (Buildrig is up; a
SetBootscaffold is drafted against the Remarks pattern.)Open design questions
Ledger (for Richard Holland):
from day one?
ltBOOTobject(cleaner for owner-reserve + per-hook keying)? Leaning dedicated long-term, field for the
PoC.
Wallet (for Wietse Wind):
4. The capability/sandbox model is yours to shape — what constraints does Xaman want
on stage-2 (Hook-only messaging? no network? scoped signing only)? Xaman already ships the
webview surface, so it's the natural delivery path.
Context
Builds on the Hooks pipeline: write (xahc) →
simulate (xahau-mcp) → prove
(xahc-prover) → watch
(xahc-watch), with
(evernode-mcp) for stage-2 delivery.
Modeled on the Remarks amendment (#301).
Beta Was this translation helpful? Give feedback.
All reactions