In brief
This page is source-sensitive. Treat application, covenant, proof, and readiness wording as bounded by the listed public sources and Open Questions.
What this page explains#
The ZK FAQ answers the mistakes that cause unsafe designs: valid proof is not whole transition validity, local proof output is not network readiness, and zkVM verification is not on-chain program execution. This page sits in ZK, Groth16, And RISC Zero Succinct. It gives the topic a plain-language handle first, then shows the working idea, the mechanism, the source trail, and any limits that still matter. This category separates proof verification from application validity. Groth16 and RISC Zero Succinct can verify selected statements, while covenant scripts, successor checks, source limits, and accepted evidence still carry separate responsibility.
The writing follows a simple Kaspa documentation pattern: answer the practical question first, then link outward for details. The closest public sources for this page are DOC-TOCCATA-INLINE-ZK, DOC-TOCCATA-COVENANT-STATE, DOC-TOCCATA-BASED-APPS, RK-ZK-TAGS, RK-ZK-GROTH16. Local notes can help choose what to explain, but public-facing references resolve to upstream websites, repositories, papers, release pages, or docs.
How to think about it#
The practical model starts by naming the layer that owns the topic: wallet use, node operation, consensus, transaction validation, Toccata script behavior, tooling, or research. From there, the page shows which public source can support the explanation and where the explanation becomes incomplete.
For ZK FAQ And Misreadings, the model is built around these anchors: valid proof does not mean full transition validity; zkVM verification is not on-chain program execution; inline ZK differs from based-app settlement; Groth16 and RISC Zero Succinct have different verifier, proof-size, setup, and security-model boundaries; route each answer to proof binding and source path pages. This model is useful, but it does not encode every constant, branch, error type, or edge case. Those details belong in the source path and the source notes.
How it works#
1. valid proof does not mean full transition validity. ZK verification is a constrained script operation, not a general declaration that an application transition is sound. Tags select verifier paths, costs decide whether the transaction can afford the check, and public inputs or journals bind the proof to the state claim. The covenant or application still has to validate the surrounding transition, observe acceptance, and test negative cases.
2. zkVM verification is not on-chain program execution. RISC Zero Succinct material has a different shape from circuit-specific Groth16. The image ID, journal or digest, receipt/seal data, claim data, and verifier assumptions define what execution claim is being checked. The Kaspa-facing page must then connect that checked claim to script stack format, compute cost, covenant binding, negative cases, and accepted-state evidence.
3. inline ZK differs from based-app settlement. Sequencing and based-app material depends on ordered accepted activity. The L1 can provide ordering evidence, while off-chain execution, proof generation, settlement, replay, and access-window handling are application responsibilities. The guide should make it clear which layer orders activity, which layer computes state, which layer proves or commits the result, and which source can verify each boundary.
4. Groth16 and RISC Zero Succinct have different verifier, proof-size, setup, and security-model boundaries. RISC Zero Succinct material has a different shape from circuit-specific Groth16. The image ID, journal or digest, receipt/seal data, claim data, and verifier assumptions define what execution claim is being checked. The Kaspa-facing page must then connect that checked claim to script stack format, compute cost, covenant binding, negative cases, and accepted-state evidence.
5. route each answer to proof binding and source path pages. A proof output is useful only when the application binds it to the old state, new state, covenant ID or script context, and public input or journal. Without that binding, a valid proof may still be irrelevant to the UTXO transition being spent.
This mechanism section separates proof verification from application validity. A verifier result still needs script binding, covenant checks, transaction validity, and accepted-state evidence before an app claim is closed.
How to check it#
| Step | Check | Evidence gate |
|---|---|---|
| 1 | Check valid proof does not mean full transition validity. | Read DOC-TOCCATA-INLINE-ZK, DOC-TOCCATA-COVENANT-STATE, DOC-TOCCATA-BASED-APPS; verify proof format, tag, cost, public input or journal binding, and script failure cases. |
| 2 | Check zkVM verification is not on-chain program execution. | Read DOC-TOCCATA-INLINE-ZK, DOC-TOCCATA-COVENANT-STATE, DOC-TOCCATA-BASED-APPS; verify proof format, tag, cost, public input or journal binding, and script failure cases. |
| 3 | Check inline ZK differs from based-app settlement. | Read DOC-TOCCATA-INLINE-ZK, DOC-TOCCATA-COVENANT-STATE, DOC-TOCCATA-BASED-APPS; verify proof format, tag, cost, public input or journal binding, and script failure cases. |
| 4 | Check Groth16 and RISC Zero Succinct have different verifier, proof-size, setup, and security-model boundaries. | Read DOC-TOCCATA-INLINE-ZK, DOC-TOCCATA-COVENANT-STATE, DOC-TOCCATA-BASED-APPS; verify proof format, tag, cost, public input or journal binding, and script failure cases. |
| 5 | Check route each answer to proof binding and source path pages. | Read DOC-TOCCATA-INLINE-ZK, DOC-TOCCATA-COVENANT-STATE, DOC-TOCCATA-BASED-APPS; verify proof format, tag, cost, public input or journal binding, and script failure cases. |
When using this page for ZK material, separate proof verification from application validity. Check the verifier path, proof format, public inputs or journal, compute cost, covenant binding, failure cases, and accepted evidence before claiming a transition is valid.
Related Pages#
- 13-source-path-and-review-playbook
- zk-groth16-risczero