04 — Trusted setup · Ceremony approach

snarkjs (powersoftau + zkey)

Phase 1 and phase 2 tooling

In one paragraph

snarkjs (powersoftau + zkey): Phase 1 and phase 2 tooling. The de facto toolchain for Circom-based Groth16 and PLONK projects, covering both the universal phase and the circuit-specific phase, on BN254 and BLS12-381. Maturity: Production-used, actively maintained. Maintained by: iden3 (Polygon ID lineage), open source. Choose it when: Circom-based Groth16 and PLONK teams, and anyone consuming .ptau artefacts from Perpetual Powers of Tau.

What it is

The de facto toolchain for Circom-based Groth16 and PLONK projects, covering both the universal phase and the circuit-specific phase, on BN254 and BLS12-381. powersoftau verify validates the full chain of embedded public keys, not merely hash continuity.

Strengths and tradeoffs

Strengths
  • Widest ecosystem support and the largest body of published ceremony instructions written against it
  • Verification checks the cryptographic contribution chain, not just file hashes
  • Runs in Node and in browsers, lowering the barrier for independent contributors
  • Consumes widely mirrored .ptau artefacts directly, so phase-1 reuse is a download
Tradeoffs
  • JavaScript/WASM performance and memory limits make very large powers awkward
  • The non-interactive entropy flag is a footgun: a literal string in a CI script produces a contribution with effectively no secret
  • Correct usage is a process, not a command — nothing prevents shipping a key with zero phase-2 contributions

Choose it whenCircom-based Groth16 and PLONK teams, and anyone consuming .ptau artefacts from Perpetual Powers of Tau.

Sources cited on this page · 2

  1. snarkjs — powersoftau and zkey commands, supported curvestool
  2. ptau-deserializer — converts snarkjs phase-1 output for use with gnarktool
Cite this page
MarketComp (2026). snarkjs (powersoftau + zkey). The ZK Field Manual (Version 1.3). MarketComp. https://zkpick.com/ceremony/snarkjs/
@misc{zkfieldmanual-snarkjs-powersoftau-zkey,
  title        = {snarkjs (powersoftau + zkey) — The ZK Field Manual},
  author       = {MarketComp},
  year         = {2026},
  version      = {1.3},
  howpublished = {\url{https://zkpick.com/ceremony/snarkjs/}},
  note         = {Accessed: YYYY-MM-DD}
}