The 0xPARC PLONKathon was a two day learning hackathon, held on January 28th, 2023 and January 29th, 2023. It occurred during the 3rd week of MIT’s IAP period, where we were concurrently teaching the Modern Zero Knowledge Cryptography Course.
Over the course of the weekend, participants attempted to build PLONK (hence the name of the event =) from scratch.
- A small number of participants chose to work on a project of their own choosing
If you’re interested in attempting to build PLONK yourself
- Read the prereqs.
- Grab the starter repo here and read the readme.
- Note: there are three branches - main, hardcore, and reference. Most people will choose main, though a number of participants did complete hardcore!
- Watch this 15 minute video where we walk you through what is provided.
- The slides are also available here.
- If you get stuck, there was a collaborative effort to go through the PLONK Paper where you can see comments on the side.
If you’d like to skip ahead to the final presentations
Here’s the Complete Playlist for PLONKathon Event
- The first 10 videos are a complete ordering for building PLONK. We start off with two intro videos, followed by two mathematical primitives (KZG Commitments + FFT), followed by the 5 Prover rounds, ending with Verification + a PLONK Extension.
- The next 4 videos are presentations of projects in the ZK ecosystem.
- The final video discusses ways to stay involved with 0xPARC.
To see some examples of participant projects (in various stages of completion), see this list of pull requests!
Why PLONK?
PLONK is a zero-knowledge proof system that is rapidly growing in interest due to its performance characteristics and modularity. In fact, in the past year, 10+ papers have been published on “Lookup” arguments alone! Coincidentally, during the Research Workshop we ran this past fall at Stanford, researchers came up with this new Lookup argument!
Just like a compiler where frontends and backends can be swapped and optimized, with PLONK you can swap out different Polynomial Commitment Schemes (like Halo2’s Inner Product Argument), Interactive Oracle Proofs (like HyperPLONK), arithmetizations, and more. We’re extremely excited about the rapid improvements that are occurring throughout the entire stack, and the applications that enabled as a result. By walking through the inner-workings of PLONK, you’ll get to better understand ZK cryptography as a whole.
Prerequisites
We recommend reading up on any concepts below that you aren’t familiar with, to get the most out of the PLONKathon.
- Required: Make sure you understand the Fiat-Shamir heuristic. (Reading time: ~1-2hr)
- Required: Make sure you understand how to use Fast Fourier Transform to go between polynomial coefficients and evaluations, i.e. the Lagrange Basis (Reading time: 0hr - 2hr, depending on if you’ve seen FFT before).
- Required: Understand what elliptic curve group operations and elliptic curve pairings are (you don’t need to know how they work, just their “APIs” and the fact that they exist).
- If you need a refresher on elliptic curve notation, group properties, and the elliptic curve discrete log hardness assumption, see Yufei’s lecture from 47:26 to 1:06:51. (20m)
- If you’re unfamiliar with pairings, see Yufei’s recent lecture from 1:06:51 to 1:10:42, and Ying Tong’s recent lecture from 54:46 to 57:31. (Total watching time: 10m).
- Yufei and Ying Tong’s lecture notes are available at http://zkiap.com/, sessions 3 (relevant pages are 5-7) and 5 (relevant page is page 5).
- Required: Dankrad’s article on the KZG commitment scheme. (Reading time: 1-2hr).
- If you prefer video, Ying Tong also goes into detail on commitment schemes from the ground up in this 90 minute lecture video, covering KZG from 50:00 onwards. Ying Tong’s lecture notes are available at http://zkiap.com/, session 5 (relevant page is page 5).
- Required: Vitalik’s article on Understanding PLONK. (Reading time: 2-4hr)
- (Reference) if/when you need to go more in-depth on any part of PLONK, here’s the PLONK paper
What You’ll Be Building (if you choose to build PLONK)
- (For your reference) we’ll be working off of a scaffold based on a refactored and modularized version of Vitalik’s annotated python implementation of PLONK (note: this is not the refactored version - that is a work in progress!)
- For those who are interested in any of the PLONKathon extensions:
- Add support for custom gates to your PLONK implementation (or to the reference implementation based on py_plonk that we’ll provide).
- Our vanilla PLONK scaffold implements a succinct proof system, but lacks zero knowledge; figure out how to add zero-knowledge by referring to the PLONK paper.
- Add support for lookups (see PlonKup) or multiset operations (see this post).