/snarkjs-algorand

An on-chain (Algorand) verifier for SnarkJS BLS12-381 PLONK zero-knowledge proofs

Primary LanguageTypeScript

snarkjs-algorand

This repo contains an Algorand TypeScript implementation of a BLS12-381 Plonk ZKP verifier. The contract is based on the snarkjs verifier implementation.

This repo not only contains the smart contract, but also a TypeScript SDK that uses algokit-utils. This SDK has not yet been documented, but you can see usage in the tests.

TODO

In no particular order:

  • Add input validation to the contract
  • Documentation

Why Not AlgoPlonk?

The main reason is because AlgoPlonk uses gnark for circuit compilation and proof generation. The problem with gnark is that it does not support WASM, thus one cannot simply generate a proof client-side in the browser. Additionally, because snarkjs is written in TypeScript, we can leverage algokit-utils for a much better developer experience.