Proof System Overview
When the RISC Zero zkVM executes, it produces a Receipt that serves as a proof of validity of a given Session.
To confirm that a Receipt was honestly generated, use Receipt::verify and supply the ImageID of the code that should have been executed as a parameter.
The Receipt includes a journal, which contains the public outputs of the Session. The contents of the journal are specified by calling env::commit() and env::commit_slice() in the guest code.
In addition to the journal, a receipt makes a number of claims about the program execution. These claims are summarized in the ReceiptMetadata.
A Receipt can take two main forms:
- It can be represented by a collection of SegmentReceipts, each of which proves a single Segment. Collectively, the SegmentReceipts prove the validity of the full Session.
- It can also be represented by a single SuccinctReceipt, proving the validity of the entire session. Using recursive proving, any number of SegmentReceipts can be compressed into a single SuccinctReceipt.
Cryptographically each SegmentReceipt or SuccinctReceipt is a ZK-STARK. The details of the RISC Zero ZK-STARK are described in our ZKP Whitepaper and in this Sequence Diagram.
Learn More
About the zkVM
About STARKs
- STARKs reference doc
- STARK by Hand Tutorial
About RISC Zero
- All our public talks and podcasts are available on our YouTube channel.
- RISC Zero Study Club is intended to help make the technology underpinning RISC Zero more accessible. Past sessions include: