INVAR Open app

Docs

Everything here is re-runnable

No API key, no proxy, and no build step. Clone it, serve it over HTTP, and every number on this site can be recomputed from the same modules the pages import.

The tools

CommandWhat it establishes
node tools/palette.mjsSolves every colour on the site and prints the contrast of every ink on every surface. Three preferences; the rest is derived.
node js/invar.jsThe alloy model and its self-checks. One fitted parameter, set at room temperature; every other number is a prediction.
node js/sessions.jsThe exchange calendar, checked against published holiday dates and both daylight-saving transitions.
node tools/scan-assets.mjsWalks every pool creation from genesis and discovers the tokenised equities by their own on-chain name.
node tools/scan-clock.mjsMeasures the block time, the state-pruning horizon, and where the clock actually goes.
node tools/scan-tape.mjsSamples transfers across the chain’s active range and classifies each against the calendar.
node tools/verify-contract.mjsCompiles Bar.sol, executes twenty properties on a real EVM, then breaks it eight ways.
node tools/verify-app.mjsExecutes the front end’s own calldata against a real tokenised equity.
node tools/build.mjsWrites every page. The shell exists once.
node tools/validate.mjsRefuses to let any of the above disagree with what is shipped.

No key and no proxy

The public Robinhood Chain node answers a browser preflight with access-control-allow-origin: *. That single fact is why the Comparator and the app are pages rather than serverless functions, and why there is no server-side code in this repository at all. The Content-Security-Policy shipped with the site has its connect-src built from js/chain.js at build time, so an endpoint added there cannot be blocked in production by a header nobody remembered to update.

What is shared between the scanners and the pages

js/chain.js, js/sessions.js, js/bar.js, js/abi.js and js/invar.js are imported by both. That is deliberate: a page that re-checks a snapshot with different code than the snapshot was built with is not checking it.

Selectors and topics

None are remembered. Every one is derived from its signature text by js/keccak.js at load. A wrong selector reverts against a contract with no fallback — which reads exactly like “this contract cannot do that” — and silently returns garbage against one that has one.