1:"$Sreact.fragment"
2:"/_next/static/chunks/27gjg8e11zukd.js"
3:I[22016,["$2"],""]
4:I[39756,["$2"],"default"]
5:I[37457,["$2"],"default"]
:HL["/_next/static/chunks/2o4ecce28ubhf.css","style"]
9:X
d:X
d:C
e:[["children",{"s":"__PAGE__","h":160,"d":{"r":"$Lf","p":"$@10","v":null,"s":"$9"}}]]
a:[["children",{"s":"docs","h":96,"d":{"r":"$Lb","p":"$@c","v":"$d","s":"$9"},"c":"$Qe"}]]
0:{"t":{"t":{"s":"","h":80,"d":{"r":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/2o4ecce28ubhf.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/27gjg8e11zukd.js","async":true}]],["$","html",null,{"lang":"en","className":"Ur3q_a_variable iaM1Ya_variable","children":["$","body",null,{"className":"flex min-h-dvh flex-col","children":[["$","div",null,{"className":"sticky top-0 z-20 border-b border-line bg-bg/85 backdrop-blur","children":["$","div",null,{"className":"container-page flex h-14 items-center justify-between gap-4","children":[["$","div",null,{"className":"flex items-center gap-8","children":[["$","$L3",null,{"href":"/","className":"flex items-center gap-2.5 font-semibold tracking-tight","aria-label":"Provera home","children":[["$","svg",null,{"width":"22","height":"22","viewBox":"0 0 22 22","fill":"none","aria-hidden":true,"children":[["$","rect",null,{"x":"0.75","y":"0.75","width":"20.5","height":"20.5","rx":"5.25","stroke":"currentColor","strokeWidth":"1.5"}],["$","path",null,{"d":"M6.5 11.4l3 3 6-6.8","stroke":"currentColor","strokeWidth":"1.7","strokeLinecap":"round","strokeLinejoin":"round"}]]}],"Provera"]}],["$","nav",null,{"className":"hidden items-center gap-6 text-sm text-muted sm:flex","children":[["$","$L3","/verify",{"href":"/verify","className":"transition-colors hover:text-fg","children":"Verify"}],["$","$L3","/docs",{"href":"/docs","className":"transition-colors hover:text-fg","children":"Docs"}],["$","$L3","/provers",{"href":"/provers","className":"transition-colors hover:text-fg","children":"Run a prover"}]]}]]}],["$","div",null,{"className":"flex items-center gap-2","children":[["$","$L3",null,{"href":"/verify","className":"btn h-8 px-3 text-muted hover:text-fg sm:hidden","children":"Verify"}],["$","$L3",null,{"href":"/docs#quick-start","className":"btn-secondary h-8","children":"Get started"}]]}]]}]}],["$","main",null,{"className":"flex-1","children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}],["$","footer",null,{"className":"mt-24 border-t border-line","children":["$","div",null,{"className":"container-page flex flex-col gap-6 py-10 text-sm text-muted sm:flex-row sm:items-start sm:justify-between","children":[["$","div",null,{"className":"max-w-md","children":[["$","$L3",null,{"href":"/","className":"flex items-center gap-2.5 font-semibold tracking-tight","aria-label":"Provera home","children":[["$","svg",null,{"width":"22","height":"22","viewBox":"0 0 22 22","fill":"none","aria-hidden":true,"children":[["$","rect",null,{"x":"0.75","y":"0.75","width":"20.5","height":"20.5","rx":"5.25","stroke":"currentColor","strokeWidth":"1.5"}],["$","path",null,{"d":"M6.5 11.4l3 3 6-6.8","stroke":"currentColor","strokeWidth":"1.7","strokeLinecap":"round","strokeLinejoin":"round"}]]}],"Provera"]}],["$","p",null,{"className":"mt-3","children":"Open-source software you run yourself. Not audited. There is no hosted Provera service."}]]}],["$","nav",null,{"className":"grid grid-cols-2 gap-x-12 gap-y-2","children":[["$","$L3",null,{"href":"/docs#quick-start","className":"hover:text-fg","children":"Quick start"}],["$","$L3",null,{"href":"/docs#security","className":"hover:text-fg","children":"Security assumptions"}],["$","$L3",null,{"href":"/docs#cli","className":"hover:text-fg","children":"Command-line tool"}],["$","$L3",null,{"href":"/docs#architecture","className":"hover:text-fg","children":"Architecture"}],"$L6","$L7"]}]]}]}]]}]}]]}],"p":"$@8","v":null,"s":"$9"},"c":"$Qa"},"h":{"r":"$L11","p":"$@12","v":null,"s":"$9"}},"a":"$@13","u":"$@14","b":"8KJl1csVP2SWNNGtY9yB2"}
46:"ViewportBoundary"
47:I[97367,["$2"],"$46"]
48:"MetadataBoundary"
49:I[97367,["$2"],"$48"]
4a:"$Sreact.suspense"
4b:I[27201,["$2"],"IconMark"]
6:["$","$L3",null,{"href":"/verify","className":"hover:text-fg","children":"Verify a receipt"}]
7:["$","$L3",null,{"href":"/provers","className":"hover:text-fg","children":"Run a prover"}]
b:["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}]}]]}]
f:["$","$1","c",{"children":[[["$","header",null,{"className":"border-b border-line","children":["$","div",null,{"className":"container-page py-12 sm:py-16","children":[["$","p",null,{"className":"eyebrow","children":"Documentation"}],["$","h1",null,{"className":"mt-3 text-3xl font-semibold tracking-tight sm:text-4xl","children":"Build with Provera"}],["$","div",null,{"className":"mt-4 max-w-2xl text-muted","children":"Provera is software you run yourself. There is no hosted service, account or API key. These docs describe what exists in the repository today and say so where something is not finished."}]]}]}],["$","div",null,{"className":"container-page grid gap-12 py-12 lg:grid-cols-[200px_minmax(0,1fr)]","children":[["$","nav",null,{"className":"hidden lg:block","aria-label":"Sections","children":["$","ul",null,{"className":"sticky top-24 space-y-2 text-sm text-muted","children":[["$","li","quick-start",{"children":["$","a",null,{"href":"#quick-start","className":"hover:text-fg","children":"Quick start"}]}],["$","li","cli",{"children":["$","a",null,{"href":"#cli","className":"hover:text-fg","children":"Command-line tool"}]}],["$","li","deploy",{"children":["$","a",null,{"href":"#deploy","className":"hover:text-fg","children":"Deploying the programs"}]}],["$","li","sdk",{"children":["$","a",null,{"href":"#sdk","className":"hover:text-fg","children":"SDK"}]}],["$","li","proof-types",{"children":["$","a",null,{"href":"#proof-types","className":"hover:text-fg","children":"Proof types"}]}],["$","li","verify",{"children":["$","a",null,{"href":"#verify","className":"hover:text-fg","children":"Verification guide"}]}],["$","li","security",{"children":["$","a",null,{"href":"#security","className":"hover:text-fg","children":"Security assumptions"}]}],["$","li","architecture",{"children":["$","a",null,{"href":"#architecture","className":"hover:text-fg","children":"Architecture"}]}],["$","li","api",{"children":["$","a",null,{"href":"#api","className":"hover:text-fg","children":"Optional: your own API"}]}],["$","li","costs",{"children":["$","a",null,{"href":"#costs","className":"hover:text-fg","children":"Costs"}]}],["$","li","troubleshooting",{"children":["$","a",null,{"href":"#troubleshooting","className":"hover:text-fg","children":"Troubleshooting"}]}]]}]}],["$","article",null,{"className":"prose-docs max-w-[720px] min-w-0","children":[["$","h2",null,{"id":"quick-start","children":"Quick start"}],["$","p",null,{"children":["You need x86-64 Linux (WSL2 on Windows), Docker, and a Solana wallet."," ",["$","a",null,{"href":"/downloads/provera-source.zip","className":"link","children":"Download the source"}]," (Apache-2.0; checksum in"," ",["$","a",null,{"href":"/downloads/SHA256SUMS.txt","className":"link","children":"SHA256SUMS.txt"}],"), unpack it, and from that folder:"]}],["$","div",null,{"className":"mt-4","children":["$","div",null,{"className":"card overflow-hidden","children":[["$","div",null,{"className":"border-b border-line px-4 py-2 font-mono text-[11px] tracking-wide text-faint","children":"1. set up and build"}],["$","pre",null,{"className":"overflow-x-auto p-4 font-mono text-[13px] leading-relaxed text-fg","children":["$","code",null,{"children":"bash scripts/setup-wsl.sh        # Rust, RISC Zero, Docker, Solana CLI, Anchor, Node\n. scripts/wsl-env.sh\ncargo build --release -p prover  # add --features cuda to prove on an NVIDIA GPU\nbash scripts/check-image-id.sh   # your guest is the one this repository describes\nnpm install && npm run build:sdk # the provera command-line tool"}]}]]}]}],["$","div",null,{"className":"mt-4","children":["$","div",null,{"className":"card overflow-hidden","children":[["$","div",null,{"className":"border-b border-line px-4 py-2 font-mono text-[11px] tracking-wide text-faint","children":"2. prove on your own machine"}],["$","pre",null,{"className":"overflow-x-auto p-4 font-mono text-[13px] leading-relaxed text-fg","children":["$","code",null,{"children":"prover prove  --manifest airdrop.json --out proof     # STARK\nprover verify --receipt proof/receipt.bin             # check it\nprover wrap   --receipt proof/receipt.bin --out proof # Groth16, for Solana"}]}]]}]}],["$","div",null,{"className":"mt-4","children":"$L15"}],"$L16","$L17","$L18","$L19","$L1a","$L1b","$L1c","$L1d","$L1e","$L1f","$L20","$L21","$L22","$L23","$L24","$L25","$L26","$L27","$L28","$L29","$L2a","$L2b","$L2c","$L2d","$L2e","$L2f","$L30","$L31","$L32","$L33","$L34","$L35","$L36","$L37","$L38","$L39","$L3a","$L3b","$L3c","$L3d","$L3e","$L3f","$L40","$L41","$L42","$L43","$L44"]}]]}]],null,"$L45"]}]
11:["$","$1","h",{"children":[null,["$","$L47",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","$L49",null,{"children":[["$","div",null,{"hidden":true,"children":["$","$4a",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Documentation — Provera"}],["$","meta","1",{"name":"description","content":"Provera runs computations in a zkVM and returns STARK proofs that they were done correctly, with a path to verification on Solana."}],["$","link","2",{"rel":"icon","href":"/icon.svg?icon.40r_gb96r44xm.svg","sizes":"any","type":"image/svg+xml"}],["$","$L4b","3",{}]]}]}],null]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}]
4c:I[97367,["$2"],"OutletBoundary"]
15:["$","div",null,{"className":"card overflow-hidden","children":[["$","div",null,{"className":"border-b border-line px-4 py-2 font-mono text-[11px] tracking-wide text-faint","children":"3. register on Solana from your own wallet"}],["$","pre",null,{"className":"overflow-x-auto p-4 font-mono text-[13px] leading-relaxed text-fg","children":["$","code",null,{"children":"provera submit --report proof/report-groth16.json \\\n  --deployment deployment.json --keypair ~/.config/solana/id.json"}]}]]}]
16:["$","div",null,{"className":"mt-4","children":["$","div",null,{"className":"card overflow-hidden","children":[["$","div",null,{"className":"border-b border-line px-4 py-2 font-mono text-[11px] tracking-wide text-faint","children":"4. anyone can check it"}],["$","pre",null,{"className":"overflow-x-auto p-4 font-mono text-[13px] leading-relaxed text-fg","children":["$","code",null,{"children":"provera receipt <address> --deployment deployment.json\nprovera check airdrop.json --receipt <address> --deployment deployment.json"}]}]]}]}]
17:["$","p",null,{"children":[["$","code",null,{"children":"deployment.json"}]," names the on-chain programs you are using. There is no public deployment yet, so you create one: ",["$","a",null,{"href":"#deploy","className":"link","children":"deploy the programs"}]," to a local validator or devnet with one script. To try everything without spending anything, run"," ",["$","code",null,{"children":"bash scripts/localnet-up.sh"}]," and then ",["$","code",null,{"children":"bash scripts/cli-localnet-test.sh"}],", which performs all four steps with a fresh wallet."]}]
18:["$","h2",null,{"id":"cli","children":"Command-line tool"}]
19:["$","p",null,{"children":[["$","code",null,{"children":"provera"}]," talks only to a Solana RPC node. Run it as"," ",["$","code",null,{"children":"node packages/cli/bin/provera.mjs"}],", or link it with ",["$","code",null,{"children":"npm link -w @provera/cli"}],"."]}]
1a:["$","table",null,{"children":[["$","thead",null,{"children":["$","tr",null,{"children":[["$","th",null,{"children":"Command"}],["$","th",null,{"children":"What it does"}]]}]}],["$","tbody",null,{"children":[["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"provera evaluate <dataset>"}]}],["$","td",null,{"children":"Recomputes the commitment and totals and says whether the rule holds. No proof, no network."}]]}],["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"provera submit"}]}],["$","td",null,{"children":["Sends a Groth16-wrapped proof to the registry from your wallet, then reads the receipt back. A proof that does not verify is rejected in simulation and costs nothing. Mainnet needs ",["$","code",null,{"children":"--yes-mainnet"}],"."]}]]}],["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"provera receipt <address>"}]}],["$","td",null,{"children":["Reads a receipt from finalized chain state and refuses it unless the registry in your deployment file owns it. ",["$","code",null,{"children":"--image"}]," also pins the guest image."]}]]}],["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"provera check <dataset>"}]}],["$","td",null,{"children":"Confirms that a receipt is about exactly that dataset. Exits non-zero if not."}]]}]]}]]}]
1b:["$","p",null,{"children":["Add ",["$","code",null,{"children":"--json"}]," for machine-readable output and ",["$","code",null,{"children":"--rpc <url>"}]," to use your own RPC provider."]}]
1c:["$","h2",null,{"id":"deploy","children":"Deploying the programs"}]
1d:["$","p",null,{"children":"On-chain verification needs three programs on the cluster: RISC Zero’s verifier router and Groth16 verifier, and the Provera registry. Whoever deploys them controls which guest images the registry accepts, so a project that does not want to rely on someone else’s deployment runs its own."}]
1e:["$","div",null,{"className":"mt-4","children":["$","div",null,{"className":"card overflow-hidden","children":[["$","div",null,{"className":"border-b border-line px-4 py-2 font-mono text-[11px] tracking-wide text-faint","children":"local validator (free, instant)"}],["$","pre",null,{"className":"overflow-x-auto p-4 font-mono text-[13px] leading-relaxed text-fg","children":["$","code",null,{"children":"BUILD_ONLY=1 bash scripts/localnet-e2e.sh   # build the three programs\nbash scripts/localnet-up.sh                 # start, initialize, write deployment.json\nbash scripts/localnet-e2e.sh                # optional: 12 on-chain tests"}]}]]}]}]
1f:["$","div",null,{"className":"mt-4","children":["$","div",null,{"className":"card overflow-hidden","children":[["$","div",null,{"className":"border-b border-line px-4 py-2 font-mono text-[11px] tracking-wide text-faint","children":"devnet (public test network, free SOL)"}],["$","pre",null,{"className":"overflow-x-auto p-4 font-mono text-[13px] leading-relaxed text-fg","children":["$","code",null,{"children":"bash scripts/devnet-keys.sh                 # keys in ~/provera-devnet, outside the repo\n# fund the printed deployer address with about 6.5 devnet SOL (faucet.solana.com)\nbash scripts/deploy-cluster.sh              # deploy, initialize, write deployment-devnet.json"}]}]]}]}]
20:["$","p",null,{"children":["The same script deploys to mainnet when run with ",["$","code",null,{"children":"CLUSTER=mainnet-beta PROVERA_MAINNET_APPROVED=yes"}],". That spends real SOL (about 4.5 kept as rent) and publishes programs that have ",["$","strong",null,{"children":"not been audited"}],". No one has deployed Provera to devnet or mainnet yet."]}]
21:["$","p",null,{"children":"RISC Zero’s source is used unchanged except for the two lines that set each program’s address. If RISC Zero publishes an official router on your cluster, prefer it over deploying your own copy."}]
22:["$","h2",null,{"id":"sdk","children":"SDK"}]
23:["$","p",null,{"children":[["$","code",null,{"children":"@provera/sdk"}]," does the same things from TypeScript, in Node or the browser. It is not published to npm; use it from the workspace."]}]
24:["$","div",null,{"className":"mt-4","children":["$","div",null,{"className":"card overflow-hidden","children":[["$","div",null,{"className":"border-b border-line px-4 py-2 font-mono text-[11px] tracking-wide text-faint","children":"check a receipt against a dataset, no server"}],["$","pre",null,{"className":"overflow-x-auto p-4 font-mono text-[13px] leading-relaxed text-fg","children":["$","code",null,{"children":"import { computeStatement, fetchReceipt, differencesFromReceipt } from \"@provera/sdk\";\n\nconst receipt = await fetchReceipt(address, {\n  cluster: \"devnet\",\n  registryProgramId: REGISTRY, // the registry you trust\n  imageId: IMAGE_ID,           // the guest image you built\n});\nconst statement = await computeStatement(dataset);\nconst differing = differencesFromReceipt(statement, receipt);\nconsole.log(differing.length === 0 ? \"match\" : differing);"}]}]]}]}]
25:["$","div",null,{"className":"mt-4","children":["$","div",null,{"className":"card overflow-hidden","children":[["$","div",null,{"className":"border-b border-line px-4 py-2 font-mono text-[11px] tracking-wide text-faint","children":"submit from a wallet"}],["$","pre",null,{"className":"overflow-x-auto p-4 font-mono text-[13px] leading-relaxed text-fg","children":["$","code",null,{"children":"import { submitReceipt, buildSubmitReceiptTransaction } from \"@provera/sdk/solana\";\n\n// Node, with a keypair:\nconst result = await submitReceipt(connection, payer, report, deployment);\n\n// Or build the transaction and let a wallet adapter sign it:\nconst tx = await buildSubmitReceiptTransaction(report, deployment, wallet.publicKey);"}]}]]}]}]
26:["$","p",null,{"children":[["$","code",null,{"children":"@provera/sdk/solana"}]," needs ",["$","code",null,{"children":"@solana/web3.js"}],". Everything else in the SDK has no dependencies."]}]
27:["$","h2",null,{"id":"proof-types","children":"Proof types"}]
28:["$","h3",null,{"children":["token_distribution (",["$","code",null,{"children":"provera.td.v1"}],")"]}]
29:["$","p",null,{"children":"A verified proof establishes that there is an allocation list such that:"}]
2a:["$","ol",null,{"children":[["$","li",null,{"children":"every wallet appears once and every amount is a non-zero integer in base units;"}],["$","li",null,{"children":["its RFC 6962 SHA-256 Merkle root is the published ",["$","code",null,{"children":"datasetRoot"}],";"]}],["$","li",null,{"children":["the amounts sum to ",["$","code",null,{"children":"totalAmount"}]," and the largest is ",["$","code",null,{"children":"maxAllocation"}],";"]}],["$","li",null,{"children":["no amount exceeds ",["$","code",null,{"children":"maxWalletAllocationBps"}]," / 10,000 of the total."]}]]}]
2b:["$","div",null,{"className":"mt-4","children":["$","div",null,{"className":"card overflow-hidden","children":[["$","div",null,{"className":"border-b border-line px-4 py-2 font-mono text-[11px] tracking-wide text-faint","children":"airdrop.json"}],["$","pre",null,{"className":"overflow-x-auto p-4 font-mono text-[13px] leading-relaxed text-fg","children":["$","code",null,{"children":"{\n  \"schema\": \"provera.token_distribution.manifest.v1\",\n  \"mint\": \"<base58>\",\n  \"category\": \"genesis | airdrop | balance_snapshot | other\",\n  \"snapshotSlot\": 0,\n  \"context\": \"<64 hex chars, optional>\",\n  \"rules\": { \"maxWalletAllocationBps\": 200 },\n  \"allocations\": [{ \"wallet\": \"<base58>\", \"amount\": \"1000000\" }]\n}"}]}]]}]}]
2c:["$","p",null,{"children":"Rows may be in any order. Duplicate wallets and zero amounts are rejected, never merged or dropped, so the commitment always refers to exactly the data you supplied. Trading leaderboards and reward calculations are planned and not implemented."}]
2d:["$","h2",null,{"id":"verify","children":"Verification guide"}]
2e:["$","p",null,{"children":"There are three independent things to check, and none of them needs to trust Provera or the prover."}]
2f:["$","ol",null,{"children":[["$","li",null,{"children":[["$","strong",null,{"children":"The receipt exists and belongs to the right registry."}]," Use the"," ",["$","$L3",null,{"href":"/verify","className":"link","children":"Verify page"}]," or ",["$","code",null,{"children":"provera receipt"}],". Both read finalized state from an RPC node and check the owning program."]}],["$","li",null,{"children":[["$","strong",null,{"children":"The receipt is about your data."}]," If you hold the dataset, ",["$","code",null,{"children":"provera check"}]," or the Verify page recomputes the commitment and compares every public value."]}],["$","li",null,{"children":[["$","strong",null,{"children":"The guest image is the program you think it is."}]," Build the prover from source and run"," ",["$","code",null,{"children":"bash scripts/check-image-id.sh"}],". The guest is compiled inside a pinned container, so every checkout of the same source produces the same image ID, recorded in"," ",["$","code",null,{"children":"circuits/token-distribution/IMAGE_ID"}],". Compare it with the receipt’s."]}]]}]
30:["$","p",null,{"children":"Reproducibility was confirmed across two checkouts and a GPU build on one machine. It has not yet been confirmed on an unrelated machine."}]
31:["$","h3",null,{"children":"What Solana verifies"}]
32:["$","p",null,{"children":["Solana does not verify the STARK. The STARK is wrapped in a 256-byte Groth16 SNARK and the registry program asks the RISC Zero verifier router to check that wrapper, then writes a receipt account derived from the image ID and journal digest. A receipt exists only if verification succeeded in the same transaction. The full STARK receipt stays with whoever proved it and can be checked off-chain with ",["$","code",null,{"children":"prover verify"}],"."]}]
33:["$","h3",null,{"children":"Reading a receipt from another program"}]
34:["$","ol",null,{"children":[["$","li",null,{"children":"Check the account is owned by the registry program and has the receipt discriminator."}],["$","li",null,{"children":["Re-derive its address from ",["$","code",null,{"children":"[\"receipt\", image_id, journal_digest]"}],"."]}],["$","li",null,{"children":["Compare ",["$","code",null,{"children":"image_id"}]," with an image ID you built yourself. Do not rely on the registry admin’s choice."]}],["$","li",null,{"children":["Read the public inputs and apply your own rule, for example a required ",["$","code",null,{"children":"context"}],"."]}]]}]
35:["$","p",null,{"children":["Read the account rather than calling ",["$","code",null,{"children":"submit_receipt"}]," by CPI: verification already uses three of Solana’s four CPI levels."]}]
36:["$","h2",null,{"id":"security","children":"Security assumptions"}]
37:["$","ul",null,{"children":[["$","li",null,{"children":[["$","strong",null,{"children":"Not audited."}]," No part of Provera has had an external security review."]}],["$","li",null,{"children":[["$","strong",null,{"children":"Dataset completeness is not proven."}]," A proof covers the list that was proved. It cannot show that no other wallets exist."]}],["$","li",null,{"children":[["$","strong",null,{"children":"No chain authentication."}]," Mint, category and slot are labels supplied by the prover. Signed manifests are designed and not implemented."]}],["$","li",null,{"children":[["$","strong",null,{"children":"STARK soundness."}]," RISC Zero states 96 to 99 bits of conjectured security for its STARK layers."]}],["$","li",null,{"children":[["$","strong",null,{"children":"Trusted setup on-chain."}]," The Groth16 wrapper depends on RISC Zero’s setup ceremony and is not post-quantum. The off-chain STARK is unaffected."]}],["$","li",null,{"children":[["$","strong",null,{"children":"Privacy."}]," When you run the prover yourself, the dataset never leaves your machine and only the commitment and public outputs are published. RISC Zero does not claim a formal zero-knowledge guarantee for its proofs, so treat this as “the data is not published”, not as a mathematical privacy proof."]}],["$","li",null,{"children":[["$","strong",null,{"children":"Registry admin."}]," Whoever deployed a registry chooses which guest images it accepts. They cannot create or alter receipts, but they can register a bad image, which is why consumers should pin the image ID."]}],["$","li",null,{"children":[["$","strong",null,{"children":"Router owner."}]," Whoever deployed the RISC Zero router can add verifiers to it and emergency-stop them."]}]]}]
38:["$","h2",null,{"id":"architecture","children":"Architecture"}]
39:["$","table",null,{"children":[["$","thead",null,{"children":["$","tr",null,{"children":[["$","th",null,{"children":"Component"}],["$","th",null,{"children":"Role"}],["$","th",null,{"children":"State"}]]}]}],["$","tbody",null,{"children":[["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"td-core"}]}],["$","td",null,{"children":"Statement logic shared by the guest, the evaluator and the Solana program"}],["$","td",null,{"children":"Tested"}]]}],["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"prover"}]}],["$","td",null,{"children":"Runs the guest in the RISC Zero zkVM: prove, verify, wrap"}],["$","td",null,{"children":"Working, tested"}]]}],["$","tr",null,{"children":[["$","td",null,{"children":"Registry program"}],["$","td",null,{"children":"Verifies the Groth16 wrapper by CPI and stores receipts"}],["$","td",null,{"children":"Tested on a local validator; no public deployment"}]]}],["$","tr",null,{"children":[["$","td",null,{"children":[["$","code",null,{"children":"provera"}]," CLI"]}],["$","td",null,{"children":"Submit from your wallet, read and check receipts"}],["$","td",null,{"children":"Tested end to end on a local validator"}]]}],["$","tr",null,{"children":[["$","td",null,{"children":"SDK"}],["$","td",null,{"children":"Same operations from TypeScript, plus statement recomputation"}],["$","td",null,{"children":"Tested"}]]}],["$","tr",null,{"children":[["$","td",null,{"children":"This website"}],["$","td",null,{"children":"Static files; reads receipts from Solana in the browser"}],["$","td",null,{"children":"No backend"}]]}],["$","tr",null,{"children":[["$","td",null,{"children":"API server"}],["$","td",null,{"children":"Optional queue and dashboard for a team"}],["$","td",null,{"children":"Tested; you host it"}]]}]]}]]}]
3a:["$","h2",null,{"id":"api","children":"Optional: your own API"}]
3b:["$","p",null,{"children":["A team that wants a job queue, API keys and a dashboard can run the bundled API next to its prover. Nothing else depends on it. Build this site with ",["$","code",null,{"children":"NEXT_PUBLIC_PROVERA_API_URL"}]," set to your API to enable the explorer and dashboard pages."]}]
3c:["$","div",null,{"className":"mt-4","children":["$","div",null,{"className":"card overflow-hidden","children":[["$","div",null,{"className":"border-b border-line px-4 py-2 font-mono text-[11px] tracking-wide text-faint","children":"terminal"}],["$","pre",null,{"className":"overflow-x-auto p-4 font-mono text-[13px] leading-relaxed text-fg","children":["$","code",null,{"children":"npm run build:eval\nnpm run create-key -- \"team\"                 # prints a pvk_… secret once\nexport PROVERA_PROVER_CMD='[\"/path/to/provera-target/release/prover\"]'\nnpm run dev:api                              # http://127.0.0.1:8787"}]}]]}]}]
3d:["$","table",null,{"children":[["$","thead",null,{"children":["$","tr",null,{"children":[["$","th",null,{"children":"Endpoint"}],["$","th",null,{"children":"Auth"}],["$","th",null,{"children":"Purpose"}]]}]}],["$","tbody",null,{"children":[["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"POST /v1/proofs"}]}],["$","td",null,{"children":"Key"}],["$","td",null,{"children":["Validate, evaluate and queue a job. 422 if the statement is false. Accepts ",["$","code",null,{"children":"Idempotency-Key"}],"."]}]]}],["$","tr",null,{"children":[["$","td",null,{"children":[["$","code",null,{"children":"GET /v1/proofs"}],", ",["$","code",null,{"children":"/v1/proofs/:id"}],", ",["$","code",null,{"children":"/status"}]]}],["$","td",null,{"children":"Key, or public once verified"}],["$","td",null,{"children":"Records, public inputs and status."}]]}],["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"GET /v1/proofs/:id/artifacts"}]}],["$","td",null,{"children":"Owner or public"}],["$","td",null,{"children":"Receipt and report; the manifest is owner-only."}]]}],["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"POST /v1/proofs/:id/verify"}]}],["$","td",null,{"children":"Owner or public"}],["$","td",null,{"children":"Re-runs cryptographic verification of the stored receipt."}]]}],["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"POST /v1/proofs/:id/solana"}]}],["$","td",null,{"children":"Owner"}],["$","td",null,{"children":"Wraps and submits the proof using the server’s fee-payer wallet."}]]}],["$","tr",null,{"children":[["$","td",null,{"children":[["$","code",null,{"children":"GET /v1/explorer/proofs"}],", ",["$","code",null,{"children":"/v1/health"}],", ",["$","code",null,{"children":"/v1/proof-types"}]]}],["$","td",null,{"children":"None"}],["$","td",null,{"children":"Public listings and status."}]]}]]}]]}]
3e:["$","p",null,{"children":"Note the trade-off: anyone who submits to an API hands their dataset to whoever runs it. Proving locally with the CLI avoids that."}]
3f:["$","h2",null,{"id":"costs","children":"Costs"}]
40:["$","p",null,{"children":"Provera charges nothing and there is nothing to buy. You pay for your own hardware and Solana fees. Measured on one machine (8-core CPU, one RTX 4070 SUPER) for a 1,000-wallet dataset:"}]
41:["$","table",null,{"children":[["$","thead",null,{"children":["$","tr",null,{"children":[["$","th",null,{"children":"Step"}],["$","th",null,{"children":"Measured"}]]}]}],["$","tbody",null,{"children":[["$","tr",null,{"children":[["$","td",null,{"children":"STARK proof"}],["$","td",null,{"children":"16 to 26 seconds on the GPU, about 12 minutes on CPU only"}]]}],["$","tr",null,{"children":[["$","td",null,{"children":"Groth16 wrap"}],["$","td",null,{"children":"about 60 seconds on CPU"}]]}],["$","tr",null,{"children":[["$","td",null,{"children":"Registering a receipt"}],["$","td",null,{"children":"128,555 compute units; 5,000 lamport fee plus about 0.0028 SOL rent"}]]}],["$","tr",null,{"children":[["$","td",null,{"children":"Deploying the three programs"}],["$","td",null,{"children":"about 4.5 SOL kept as rent, about 6 needed during upload"}]]}]]}]]}]
42:["$","p",null,{"children":"These are single runs, not benchmarks, and will differ on other hardware."}]
43:["$","h2",null,{"id":"troubleshooting","children":"Troubleshooting"}]
44:["$","table",null,{"children":[["$","thead",null,{"children":["$","tr",null,{"children":[["$","th",null,{"children":"Symptom"}],["$","th",null,{"children":"Cause"}]]}]}],["$","tbody",null,{"children":[["$","tr",null,{"children":[["$","td",null,{"children":[["$","code",null,{"children":"risc0-zkvm"}]," fails to compile with trait errors"]}],["$","td",null,{"children":["A lockfile was regenerated and RISC Zero sub-crates floated to newer releases. Restore the committed ",["$","code",null,{"children":"Cargo.lock"}]," or run ",["$","code",null,{"children":"bash scripts/pin-risc0.sh"}],"."]}]]}],["$","tr",null,{"children":[["$","td",null,{"children":["Solana programs fail to build with ",["$","code",null,{"children":"edition2024"}]," errors"]}],["$","td",null,{"children":["Wrong Solana CLI. Use 2.3.9, as ",["$","code",null,{"children":"setup-wsl.sh"}]," installs."]}]]}],["$","tr",null,{"children":[["$","td",null,{"children":[["$","code",null,{"children":"prover wrap"}]," fails"]}],["$","td",null,{"children":"Docker is not running, or the machine is not x86-64."}]]}],["$","tr",null,{"children":[["$","td",null,{"children":[["$","code",null,{"children":"provera submit"}]," fails with a custom program error"]}],["$","td",null,{"children":"The proof does not verify for that image, or the image is not registered in that deployment."}]]}],["$","tr",null,{"children":[["$","td",null,{"children":[["$","code",null,{"children":"provera receipt"}]," says “wrong owner”"]}],["$","td",null,{"children":"The account belongs to a different registry than the one in your deployment file."}]]}],["$","tr",null,{"children":[["$","td",null,{"children":"Verify page cannot reach mainnet"}],["$","td",null,{"children":"The public endpoint refuses browser requests. Use Custom RPC URL with your provider."}]]}],["$","tr",null,{"children":[["$","td",null,{"children":["WSL will not install (",["$","code",null,{"children":"0xc03a0014"}],")"]}],["$","td",null,{"children":"Windows virtualization devices are disabled. See the repository README."}]]}]]}]]}]
45:["$","$L4c",null,{"children":["$","$4a",null,{"name":"Next.MetadataOutlet","children":"$@4d"}]}]
14:true
9:300
4d:null
9:C
13:0
c:"$undefined"
12:"$undefined"
8:"$undefined"
10:"$undefined"
