Trusted Setup
SEAL uses PLONK with a universal KZG structured reference string. The setup provenance and full verification are separate from circuit and deployment acceptance.
Universal SRS provenance and verification
The phase-one manifest seal-pool/packages/circuits/scripts/powers-of-tau.json pins Perpetual Powers of Tau checkpoint 0080, its byte length, SHA-256, BLAKE2b-512 and upstream provenance. Full verification checks the contribution chain, beacon and prepared sections and can take over an hour. No circuit-specific second-phase ceremony is required.
Verify the universal SRS
Fetch the pinned public file if it is absent and check its exact byte length and digest:
npm ci
npm run check:srs
For full contribution-chain, beacon and prepared-section verification, retain a fresh record in a new output directory:
mkdir -p .local
npm run verify:srs -- .local/phase1-new > .local/phase1-new.console.log 2>&1
The verification script seal-pool/packages/circuits/scripts/phase1-record.ts records the setup provenance, verification result and complete log. It leaves an INCOMPLETE marker until verification finishes. Only a completed record with status: "verified" is reusable. Check an existing local record with node --experimental-strip-types seal-pool/packages/circuits/scripts/phase1-record.ts check RECORD_DIRECTORY [PTAU].
check:srs checks file integrity; verify:srs runs the full cryptographic checks. SRS verification alone does not establish circuit, prover, verifier or deployment safety.
Keys are deterministic. Development and production can therefore have identical key bytes; production acceptance binds the reviewed circuit, SRS, generated prover, Solidity runtime and release evidence. A key-hash blacklist cannot establish that acceptance.
See Proving, Cryptography and Audits for the remaining assumptions and release status.