# 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.

> **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 !!!**