Due to the demand of project and personal interest, I have been studying ZK for a while. Through reading, I find the idea behind this technology is mathematically complicated. And it really takes me some time to be familiar with the terminology. This tiny note is, aimed to help you, supposing you are helpless as I was while entering this brand new world, to quickly pick up the terms, ideas and conventions.

Start

I am assuming readers having basic understanding of what zk-SNARKS is. If you do not, fortunately, Vitalik’s blog could be a wonderful start:

An approximate introduction to how zk-SNARKs are possible

Here, Vitalik kindly illustrates us what zk-SNARK is in a very intuitive way. Later, he also provided us a 3 episodes series of STARKs:

(Don’t know the difference between SNARKs and STARKs? Here we go: https://cointelegraph.com/explained/zk-starks-vs-zk-snarks-explained but I don’t think that matters in this stage.)

STARKs, Part I: Proofs with Polynomials

STARKs, Part II: Thank Goodness It's FRI-day

STARKs, Part 3: Into the Weeds

Alternatively, this arXiv paper could be a wonderful starter as well:

Personally I found Vitalik’s explanation on SNARKs is a bit confusing and way too abstract. This paper begins with an easy case of proof and then builds up step by step, finally forming a real zk-SNARKs protocol. Highly recommended.

Hands on SNARKs Tool

Now we could see the first instance of zk-SNARKS protocol, which is really implemented in industry, Groth16:

And Circom2, the implementation of Groth16:

Background

While reading documents, you might also find it vague about those terminology: QAP and R1CS. If so, those blogs are for you:

Quadratic Arithmetic Programs: from Zero to Hero

R1CS