# zk-core-program week 3: PLONK To deepen your understanding of PLONK and how it can be implemented from scratch, your task this week is to **analyze and report on the [Plonk\_Py repository](https://github.com/ETHorHIL/Plonk_Py)** — a Python-based minimal implementation of the PLONK protocol developed by ETHorHIL. ![image](https://hackmd.io/_uploads/SkhpbLMIll.png) > **Learning Objectives** > > By completing this exercise, you should be able to: > > * Describe the core components of a PLONK proof system. > * Understand the PLONK flow (setup, prove, verify) in practice. > * Explore and explain the structure and design of the `Plonk_Py` repo. > * Modify the circuit and experiment with new constraints. --- Your report should be structured into two parts: ## Part 1: High-Level Understanding In this section, your goal is to provide a clear **overview of the repository** and how to **run the example(s)** provided. You are encouraged to present your findings in your own style, using diagrams, bullet points, or any structure that best conveys the content. However, make sure to **clearly address the following points**: * **What is this repository about?** Describe the overall purpose of the `Plonk_Py` repo. * **How is the code organized?** Provide an explanation of the **directory structure** and the role of each major file or class (e.g., `setup.py`, `plonk.py`, `prover.py`, `verifier.py`, `ssbls12.py`, etc.). * **What are the main phases involved in running PLONK?** Briefly describe the different phases (Setup, Proving, Verification) and what happens in each. * **What example(s) are provided in the repo?** Identify and explain the sample circuit or equation being proven. * **How do you run the provided example?** Write a step-by-step guide on running the code (e.g., dependencies, commands, expected output). * **Can you try a different circuit?** Briefly suggest how a student could modify the example or implement a new circuit. (e.g. I know the $(x,y)$ pair such that $x^2 + y^3 + 4 = 35$) `answer x = 2, y=3` --- ## Part 2: Low-Level Exploration In this section, we want you to go **deeper into the implementation details** of the PLONK protocol as written in Python. Again, you’re free to structure your explanation creatively (diagrams, code snippets, etc.), but ensure you **cover at least the following**: * **Setup Phase:** * What happens during this phase? * What values/objects are generated and why are they important? * **Proving Phase:** * Describe step-by-step what happens during proof generation. * For each step, **map it to the actual PLONK protocol** (e.g., witness polynomial generation, quotient polynomial, permutation checks). * What is the final output of this phase? * **Verification Phase:** * What checks are performed? * How does the Verifier ensure the proof is correct? * **Polynomial Representation and Gates:** * How are polynomials represented and interpolated in code? * What gates are supported in the example circuit? --- You are welcome to structure your report freely, rather than strictly following the two-part format above. We encourage you to present your findings in a style that you believe best helps the reader understand the concepts clearly and effectively. **This is a group exercise !!!**