BattleZips
  • Awesome Circom
  • 🔬Theory
    • Prerequisite Knowledge
    • Resources
      • White Papers & PDF's
      • Blogs and Writeups
      • Videos
      • Important Entities
      • Communities
    • Proving Schemes
    • Primitives
      • Hash Functions
      • Public Key Cryptosystems
        • Note on L1 key registry → L2 hot key + callback to circuit-optimized hash functions
        • ECDSA & secp256k1
        • EdDSA
      • Merkle Trees
        • What is a Merkle Tree?
        • What is a merkle proof of inclusion?
        • zk-kit
        • Incremental Merkle Trees
        • Sparse Merkle Trees
        • Tree Arity (Binary, Quinary)
      • Semaphore
      • Arithmetic Circuits
  • 🏗️Development
    • Circom Language
      • Installation
      • IDE
      • Signals and Variables
      • Signal Assignment and Constraint Generation
      • Conditional Statements
      • Components and Templates
      • Circuit Compilation
      • Syntax
    • SnarkJS
      • Proving Schemes
      • Powers of Tau
      • ZK Keys
      • Zero Knowledge Proofs
      • On-Chain ZKP
      • Page 2
    • circomlib
      • Basic Math Constraints
      • Multiplexing
      • Hashing
      • EdDSA
      • circomlibjs
    • circom-tester
    • hardhat-circom
    • SHIELD
    • Circomspect
  • 🌆Ecosystem
    • Circom vs Other Solutions
      • Domain-Specific Languages
      • ZK Virtual Machines
      • ZK Ethereum Virtual Machines
    • Communities to Join
    • Recorded Content
    • Projects
  • 🛳️Examples
    • BattleZips V1
      • On the BattleZips Project
      • Docs holder
        • Join Game UML Sequence Diagram
        • Play Game UML Sequence Diagram
        • End Game UML Sequence Diagram
      • ZK Privacy Stack
      • Deploying Artifacts to Prod
      • Browser Client
    • RollupNC
      • Smart Contracts
      • Account/ State Tree
      • Transaction Tree
      • Layer 1 Deposits to Layer 2
      • Layer 2 Transacting
      • Layer 2 Withdrawals to Layer 1
Powered by GitBook
On this page
  • Zero Knowledge Proofs
  • Cryptography
  • Mathematical Requirement
  • Solidity Requirement
  1. Theory

Prerequisite Knowledge

What do I need to know before I can work with Zero Knowledge?

PreviousAwesome CircomNextResources

Last updated 2 years ago

This section is WIP! Don't let any of it hold you back from the Development, Ecosystem or Examples sections

Zero Knowledge Proofs

Obviously, understanding the inner workings of zero knowledge proving schemes is advantageous to efficient and safe use of the Circom language. You will at a very minimum want to have a grasp on the basic theory behind how a Zero Knowledge Proof works. Given you are starting from scratch, many of the official papers will be complex and full of jargon that is difficult to follow. As an absolute starter to Zero Knowledge Proofs, we recommend by Maksym Petkus.

You can find more information on ZK proof theory in the Zero Knowledge Proof Theory section of this GitBook.

Cryptography

The field of cryptography can seem daunting from the outside. Full mastery does require an intimate understanding of the mathematical constructs assembled into cryptosystems. However, a working proficiency with cryptography can be achieved without mathematical competency.

by Svetlin Nakov is the best crash course in applied cryptography one could ask for. It goes over the application/ implementation of some of the most common cryptographic patterns, breaking them down in a beginner-friendly manner. This resource is highly recommended at the absolute start of your journey.

The presents an advanced and structured dive into intermediate application of cryptography. This is not necessary to wield Circom, but it is one to keep on your radar if you stick with ZK development for an extended period of time.

Mathematical Requirement

You don't *need* any math background, but having it well help. Otherwise there are certainly topics that you should study up on.

  • Discrete Math: expression, evaluation, and proving of logical statements

  • Linear Algebra: the study of lines and planes, vector spaces and mappings that are required for linear transforms (which underpins a significant portion of zero knowledge arithmetization

  • Read more about the requirements

Solidity Requirement

This guide is built with the Solidity developer in mind. Our work on BattleZips began after four years of web3 experience; you should not expect this guide to go over the minutiae of Solidity development.

  • This repository uses hardhat to manage the project

  • ERC2771 metatransactions are included in the codebase, but should present negligible differences to a version of BattleZips that is not ERC2771 compliant.

🔬
Why and How zk-SNARK Works: Definitive Explanation
Practical Cryptography for Developers
Cryptopals challenge
from 0xPARC