# Learning Grant Proposal: From Zero to Halo2: Tutorial for Beginners
* **Project:** Halo2 tutorial / boilerplate
## Project Overview :page_facing_up:
### Overview
**From Zero to Halo2: Tutorial for Beginners** aims to build an end-to-end tutorial for ZK beginners to fully understand how to write a circuit, an essential part of a halo2 project.
### Project Details
* Problem
I have been learning Halo2 by reading the official Halo2 book and resolving [this issue](https://github.com/privacy-scaling-explorations/zkevm-circuits/issues/1513) with other students in the Summer Contribution Program. However, few user-friendly guides are available for Halo2. While you can find fragments of information on starting a Halo2 project, there is a lack of comprehensive resources that cover the entire journey, including **implementation**, **compilation**, **testing**, **debugging**, and even **deployment** to production.
* Opportunity
As more developers get into zero knowledge, Halo2, with Circom, will be at the heart of many new projects. This presents a great opportunity for us to create a guide everyone can use. If we succeed, people will be able to dive right into their Halo2 projects with little confusion. In this project, I aim to master Halo2 and then create beginner-friendly, step-by-step tutorials, similar to how [hardhat](https://hardhat.org/tutorial) does for Solidity. I believe this approach will address an essential gap in the existing resources. Here are some of the most helpful resources I have encountered and some ideas I believe could be added to them:
* [halo2-tutorial from Errol Drummond, an ex-EF grantee on halo2](https://erroldrummond.gitbook.io/halo2-tutorial/)
This tutorial has a clear structure for the process of developing the circuit. It also comes with Labs for readers to practice. To improve this, the visual and text format can be updated with the latest tools like [ray.so](https://ray.so) and framework with code blocks like [NextJs](https://vercel.com/design/code-block). Essential features like Lookup, Custom Gates, and Proving and Verifiying in a Project (with Solidity, for example) could be included.
* [Constructing ZK SNARK Circuits](https://jtriley.substack.com/p/constructing-zk-snark-circuits)
This tutorial has a smooth introduction to the step-by-step development of a circuit with a nice visual and text format. To improve this, more practices and examples can be added. Also, essential features like Lookup, Custom Gates, and Proving and Verifiying in a Project (with Solidity, for example) could be included.
* [0xPARC halo tutorial](https://learn.0xparc.org/materials/halo2/learning-group-1/halo2-api/)
This tutorial has comprehensive materials, including theoretical concepts, math, and realistic projects. The structure and each project step could be more apparent to improve this.
In this project, I plan to:
1. Include important features like Lookup, Custom Gates, and Proving and Verifiying in a Project (with Solidity for example).
2. Using tools like [ray.so](https://ray.so) and framework with code block like [NextJs](https://vercel.com/design/code-block) for better styling
3. Step-by-step tutorials of how each API is used in a project and with practices or examples.
* An overview of the technology stack to be used
* HackMD: Deliver tutorial articles in hackMD for better compatibility with all kinds of content platform
* Medium: Deliver tutorial article in Medium for better exposure
* nextJS: Building tutorial Website like hardhat
* [TBC] X (Twitter): Writing
* Documentation of core components, protocols, architecture, etc. to be deployed
With this grant, I plan to immerse myself in Halo2 for three months. Here’s an outline of what the journey might look like:
1. **Learn the Basics**:
a. Rust: Start by going through the [Rust Crash Course](https://github.com/ryanycw/ultimate_rust_crash_course).
b. Halo2: Utilize the Halo2 resource provided in the [Halo2 resources section](###Halo2-resources).
2. **Try Things Out**:
Build mini-projects related to Halo2 to apply theoretical knowledge and develop practical skills.
a. [halo2-semaphore](https://github.com/akinovak/halo2-semaphore)
3. **Ramp up Tutorial**:
Construct the step-by-step tutorial into a website with nextJS.
* PoC/MVP or other relevant prior work or research on the topic
## Team :busts_in_silhouette:
### Team members
* Ryan:
* ryan@ryanycw.dev
* [@ryanycwEth](https://t.me/ryanycwEth)
### Team Website
* https://github.com/ryanycw/hello-halo2
### Team's experience
Hey, I’m Ryan. With most of my experience in smart contracts, particularly in the DeFi space, I have a 1.5-year understanding of the complexities and development within this domain. Since April 23', I have been expanding my knowledge into Zero-Knowledge Proofs (ZKP), motivated by the scaling challenges in DeFi. I mainly contribute to Harvest Fi and Unirep Social Taiwan, participate in an ongoing ZK Bootcamp from Encode and zkSync, and actively explore new opportunities to learn, contribute, and share in the DeFi and ZK space.
I have contributed to projects like Harvest Finance and Unirep Social Taiwan and was part of the PSE Summer Contribution Fellowship. I also actively participate in hackathons, such as ETHIstanbul (Received bounties from Axiom, Hyperlane, Gearbox) and ETHTaipei (Received bounty from PSE).
Additional information:
GitHub: [ryanycw](https://github.com/ryanycw)
CV: [View My CV](https://drive.google.com/file/d/1fJ7QyVw3mVku9Pd18emZyqAeHou9K7ks/view?usp=sharing)
## Development Roadmap :nut_and_bolt:
* Please note that we require documentation (e.g., tutorials, API specifications, architecture details) in each milestone. This ensures that the code can be widely used by the community.
### Overview
* **Total Estimated Duration:** 3 months
* **Full-time equivalent (FTE):** 0.4
* **Total Costs:** $3,000
### Milestone 1 Example Application V1
* **Estimated Duration:** 1 month
* **FTE:** 0.4
* **Estimated delivery date**: April 30th 2024
| Number | Deliverable | Duration |Specification |
| ------------- | ------------- | ------------- | ------------- |
| 1 | Article | 2 weeks |"Things to Know Before Starting a Halo2 Project", writing an article about the basics of rust that beginners should know before diving into halo2|
| 2 | Article | 2 weeks | "Halo2 Project Walk-through", writing an article about the basics steps of setting up a halo2 project |
### Milestone 2
* **Estimated Duration:** 1 month
* **FTE:** 0.4
* **Estimated delivery date**: May 31st 2024
| Number | Deliverable | Duration |Specification |
| ------------- | ------------- | ------------- | ------------- |
| 1 | Repository | 4 weeks | Implement a halo2 project. Tentatively, semaphore because it's a critical primitive in ZK Dapp and can potentially scale to many other projects |
| 2 | Article | 4 weeks | "Practical Halo2 Project: Semaphore", writing an article about the process of implementing the mini project: semaphore |
### Milestone 3
* **Estimated Duration:** 1 month
* **FTE:** 0.4
* **Estimated delivery date**: June 30th 2024
| Number | Deliverable | Duration |Specification |
| ------------- | ------------- | ------------- | ------------- |
| 1 | Website | 4 weeks | Build a tutorial website like [hardhat tutorial](https://hardhat.org/tutorial) to provide step by step learning of the halo2 project in the previous phase |
## Additional Information :heavy_plus_sign:
Any additional information that you think is relevant to this application that hasn't already been included.
Possible additional information to include:
* What work has been done so far?
I have finished the [crash course](https://github.com/ryanycw/ultimate_rust_crash_course) to learn the basics of rust to help gain a better understanding while learning halo2