# Potential ZK Research Topic ## Research proposal #1 Do you want to use your analytical and programming skills to contribute in the adoption of a prominent mathematical technique used in the blockchain space? A zero knowledge (zk) proof is a mathematical technique with which one party can prove to another party that a statement is true without revealing the statement. This technique have been adopted in blockchains for many application scenarios. There are many open-source libraries using different crytographic techniques and programming languages to provide zk proofs. However, for someone who wants to use one of those libraries in a specific application scenario, there is not an adequate benchmarking platform to assess the performance of the libraries for the given scenario. In this research study, you will be asked to fill this gap. Specifically, under the supervision of a team involving academicians and engineers, you will: - Find/study open-source libraries (an initial list will be provided) - Develop a benchmarking platform that integrates the libraries and, given a scenario, provides cpu/memory benchmarking results. - Make experiments for actual use cases on IOTA blockchain. - Compare the results and give insightful conclusions. What is required? - Basic programming skills - An interest in performance evaluation - Motivation for learning basics of cryptography (for analysis) ### Sandbox - Outline - Importance of zk-techniques, popular, "emerging" - There are many application areas - There are many techniques - The users that would like to adopt zk-techniques, have many options - It is difficult to implement a new ad-hoc tech for each scenario - So, they need to identify existing ones in a systematic way, for their specific use case! - There are some studies which try to compare them. - But! - [List some drawbacks] - So, we need a benchmarking platform to identify the most suitable ZK teniques in different scenarios - What is requested from the student: - Find/study open-source libraries (an initial list will be given) - Develop a benchmarking platform that - integrates the libraries - takes a scenario as an input - provides cpu/memory benchmarking results - Make experiments - Example case: IOTA - Compare the results ans give insightful conclusions - Required skills: - Basic programming skills - Develop a benchmarking platform and to identify the most suitable ZK teniques in different scenarios - Scenarios - The security level - The execution time (including ECC if it is used) - Compiling/parsing time (if using zkEVM) - Validation time - The memories can be used - Where and how long can the validity proof be generated - Where and how the user can verify the validity proof - Recursion supporting - etc. - Use IOTA as an example to develop the simulator - Potential solved questions by this research topic - By pre-defining the scenario by users, can the platform/benchmark identify the most suitable ZK techniques? - Can the platform/benchmark provide ZK-friendly design suggestions in each scenario? - E.g., if gnark is adopted, then which design constraints should be put into consideration? - Related materials - [Benchmarking Zero-Knowledge Proof Systems](https://adrianhamelink.com/publication/zk-report/zk-report.pdf) - [Community Proposal: A Benchmarking Framework for (Zero-Knowledge) Proof Systems](https://docs.zkproof.org/pages/standards/accepted-workshop3/proposal-benchmarking.pdf) - [Benchmarking Zero-Knowledge Proofs with isekai](https://sikoba.com/docs/SKOR_isekai_benchmarking_201912.pdf) - [A Benchmarking Framework for (Zero-Knowledge) Proof Systems](https://www.youtube.com/watch?v=aQxGMkbemlc) - [libiop: a C++ library for IOP-based zkSNARKs](https://github.com/scipr-lab/libiop) - [arkworks: An ecosystem for developing and programming with zkSNARKs](https://github.com/arkworks-rs) ## Libraries - [libsnark](https://github.com/scipr-lab/libsnark) - [jsnark](https://github.com/akosba/jsnark) - [bellman](https://github.com/zkcrypto/bellman) - [ZoKrates](https://github.com/JacobEberhardt/ZoKrates) - [Snarky](https://github.com/o1-labs/snarky) - [Circom](https://github.com/iden3/circom) - [Circomlib](https://github.com/iden3/circomlib) - [ZEXE](https://github.com/scipr-lab/zexe) - [ZkEVM](https://github.com/interstellar/slingshot/tree/main/zkvm) - [gnark](https://github.com/ConsenSys/gnark) - [RISC-ZERO](https://github.com/risc0/risc0) ## References References - [Benchmarking Zero-Knowledge Proof Systems](https://adrianhamelink.com/publication/zk-report/zk-report.pdf) - [Community Proposal: A Benchmarking Framework for (Zero-Knowledge) Proof Systems](https://docs.zkproof.org/pages/standards/accepted-workshop3/proposal-benchmarking.pdf) - [Benchmarking Zero-Knowledge Proofs with isekai](https://sikoba.com/docs/SKOR_isekai_benchmarking_201912.pdf) - [A Benchmarking Framework for (Zero-Knowledge) Proof Systems](https://www.youtube.com/watch?v=aQxGMkbemlc) - [libiop: a C++ library for IOP-based zkSNARKs](https://github.com/scipr-lab/libiop) - [arkworks: An ecosystem for developing and programming with zkSNARKs](https://github.com/arkworks-rs)