  A zk-SNARK is a protocol that lets one party, the prover, prove to another
party, the verifier, that a statement about some privately-held information is
true without revealing the information itself. This paper describes technical
foundations, current applications, and some novel applications of zk-SNARKs.
Regarding technical foundations, we go over the Quadratic Arithmetic Program
reduction and the Pinocchio protocol. We then go over financial security
applications like Zcash and Tornado Cash, and zk-Rollup applications like zkEVM
and Darkforest. We propose novel zk-SNARK protocols for private auctions and
decentralized card games on the blockchain, providing code for the proposed
applications. We conclude by touching on promising zk-SNARK innovations, such
as zk-STARKs.
