Browser trust chain
- Runtime configuration provides the manifest URL and expected SHA-256 pin.
- The browser fetches with
cache: no-storeand enforces the manifest byte cap. - It hashes the raw bytes before parsing JSON or following a pointer.
- In every supported deployment, a missing pin or hash mismatch rejects the manifest.
- The parsed manifest names the setup record and exact proving-file hashes.
- The browser caps and hashes the setup record before parsing it.
- Status, supersession, chain, pool, verifier, verifier bytecode hash, and public-input order must match the expected deployment.
- The browser caps the WASM and zkey and checks their exact SHA-256 values.
- Proof generation stays locked until every check passes.
Byte limits
Each cap leaves documented room above the current file while limiting memory and network use.
The browser rejects a declared
Content-Length above the cap immediately. A streamed byte counter enforces the same cap when that header is missing or false.
Setup-record binding
The record must agree with both manifest and bundled deployment expectations:- Approval status appropriate for chain
- No supersession marker
- Chain ID and pool
- Withdrawal verifier and bytecode hash
- Deposit verifier binding when required by the selected operation
- Exact positional public-input order
- WASM and zkey hashes
approvedBy and approvedAt are display metadata only. Byte authenticity and deployment approval come from the external pin and release evidence.