---
# System prepended metadata

title: 'zk-core-program week 3: PLONK'

---

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