About PLONK and PLOOKUP
The PLONK paper introduced an efficient technique for enforcing the validity of memory operations in arguments of computational integrity. Building on top of PLONK, the PLOOKUP paper introduced a method of enforcing the validity of lookup operations.
Relevance in RISC Zero
RISC Zero's zkVM makes use of both PLONK and PLOOKUP in the process of generating a receipt. PLONK is used to generate constraints that authenticate re-ordering of RISC-V memory data. PLOOKUP is used to generate constraints that enforce a bytes-based range-check.
Note: RISC Zero uses an AIR-based arithmetization and not a PLONK-based arithmetization.
Documentation
Implementation and documentation for RISC Zero's use of PLONK and PLOOKUP are in plonk.rs and accum.rs.
Basic Function
PLONK makes uses of accumulators in order to ensure that one list is a permutation of another. PLOOKUP uses PLONK to ensure that one list is contained in another list.
Suggested Reading and Videos
For more on how these ideas fit into RISC Zero's system, we recommend our talk from zk Summit 7: Encoding Von-Neumann Architectures in Zero-Knowledge Proof Systems. For general references, we recommend the following:
Less Technical
- ZK Podcast episode with the authors of the PLONK paper
- Vitalik's PLONK intro
- @0xtaetaehoho's PLONK Skilltree
Moderately Technical
- ZK Study Club on PLONK
- ZK Whiteboard sessions on PLONK and on lookup arguments
- PLOOKUP presentation at zkSummit
- Ariel Gabizon explains grand product arguments