Starter repo for web applications using ECDSAVerify. Need to use zkey chunks from to allow efficient in-browser proving.

Initial version at Will need to download a roughly 1G proving key, so if your download speed is slow this will take a while. And expect proof generation for ECDSAVerify to be ~4min.


  • client stores Next.js web application with code to download chunked ECDSAVerify zkeys from a S3 bucket + use to verify code
  • circuits stores all the circom circuits that the web app uses
  • ecdsa-circuits stores necessary circuits from
    • In a seperate directory instead of a git submodule as I ran into some issues with importing libraries
    • Will eventually refactor into submodule once that is fixed
  • scripts has the snarkjs scripts to create all intermediate files for SNARK proving
  • test has some code using circom_tester to test circuits without building the entire circuit
    • Allows you to test logic without the whole snarkjs set up!

Circuit setup

Follow setup instructions from to download snarkjs and circom! walks through each step in the script if you want to see the whole pipeline, which I recommend going through. Here is a very helpful diagram of that process to keep on hand while you walk through the code:

image of snarkjs pipeline from proof generation to verification

Client setup

Go to client and run npm run dev to open a local version of the web app.


This repo uses a fork of snarkjs built by Nalin Bhardwaj and Vivek Bhupatiraju. It chunks zkeys to save browser memory and also loads them in from IndexedDB local storage after being downloaded. This repo is not being maintained and may be exposed to vulnerabilities in the snarkjs code we worked. So PLEASE do not use this for production level apps, and more to just test. Hopefully our additions can be upstreamed to snarkjs and maintained there!

Contact [email protected] for any questions or bugs.


View Github