Running or reusing a trusted setup
A trusted setup produces public parameters from secret randomness that must then be destroyed. If any single participant in the ceremony honestly destroys the secret behind their contribution, the parameters are sound; if every participant colludes or is compromised, forged proofs become possible while remaining indistinguishable from honest ones. The first question is therefore not how to run a ceremony but whether you need one at all — and if you do, whether you can reuse an existing public one instead.
Many teams run a ceremony they did not need. Hash-based systems require none at all, and universal-setup systems can almost always reuse a large existing public transcript rather than convening participants. A small, hastily organised ceremony is worse than reusing a public one with thousands of contributors: the security argument rests on the diversity and independence of participants, and a project-run ceremony rarely matches what an established public ceremony already achieved.
A ceremony reduces a trust assumption; it does not eliminate one. Users are trusting that at least one participant behaved honestly and that the ceremony software did what it claimed. State this plainly in user-facing documentation rather than describing parameters as "trustless". If that residual assumption is unacceptable for your threat model, the correct response is to change proof system, not to run a larger ceremony.
Decision criteria · 8
Do you need a setup at all
This is determined entirely by the proof system and commitment scheme chosen in §01, and it is the cheapest decision to get right because it can eliminate the whole workstream.
Reuse versus run your own
Reusing an established public SRS inherits a participant set larger and more independent than almost any project can assemble, at a fraction of the cost and coordination risk.
Participant set: size, independence and legibility
Security rests on at least one honest participant. What matters is not the raw count but whether an outside observer can believe that no single party controlled enough of the set to collude.
Contribution integrity and attestation
A contribution that cannot be verified is indistinguishable from one that was never made, and an unverified transcript quietly turns a 1-of-N assumption into a 1-of-fewer assumption.
Randomness sourcing
The security of a contribution is exactly the unpredictability of the secret it used. Weak or recoverable randomness makes a contribution worthless without making it look any different.
Transcript publication and independent verifiability
A ceremony's value is the ability of a sceptical third party to check it years later. If the artefacts or instructions disappear, the security argument becomes an appeal to authority.
Final beacon
Applying a public, unpredictable random value after the last contribution removes the possibility that the final participant chose their contribution adaptively to bias the result. It is a recommended control rather than a proven requirement: later analyses (Maller's generic-group proof for the Sapling MPC, and the Snarky Ceremonies analysis of Groth16 setups) show security holds without it, so treat it as defence in depth against a flaw in those analyses' assumptions, not as the thing that makes the ceremony sound.
Operational and communication plan
Ceremonies are logistics exercises. Most failures are dropped participants, ambiguous instructions and unclear deadlines, not cryptography.
Reusable setups · 9
Reusable public setups
| Ceremony | Curve | Size / degree bound | Contributions | Usable for | Run | Adoption caveat |
|---|---|---|---|---|---|---|
| Perpetual Powers of Tau | BN254 | up to 2^28 | 80+ recorded | Groth16 and PLONK-family | 2019 – 2024; repository archived Aug 2026 | No longer accepting contributions: the coordinating repository was archived read-only in August 2026, so treat it as a frozen artefact. The chain forked after contribution 0058; "we used PPOT" is ambiguous without naming a branch and index. Prepared .ptau files are published per power, so most projects download only what they need. |
| Hermez powers of tau (powersOfTau28_hez) | BN254 | 2^28 | PPOT contributions 1–54 plus a beacon | Groth16 and PLONK-family | 2020 | The artefact most Circom and snarkjs projects actually download: the first 54 Perpetual Powers of Tau contributions sealed with a beacon and prepared per power. Cite it as this branch, not as "PPOT", and verify the published Blake2b hashes of the file you use. |
| Filecoin powers of tau | BLS12-381 | 2^27 | 19 | Groth16 and PLONK-family | 2019 – 2020 | The only large reusable BLS12-381 phase 1 that carries the alpha- and beta-shifted powers Groth16 needs, sized for circuits of roughly 100 million constraints. A small participant set by today's standards, but named, attested and independently verifiable; it backed one of the largest Groth16 deployments in production. |
| Ethereum KZG ceremony | BLS12-381 | 2^12 – 2^15 G1, 65 G2 | 141,416 | KZG only — not Groth16 | 13 Jan – 8 Aug 2023 | By far the largest participant set, but sized for EIP-4844 blob commitments: it cannot back a PLONK circuit above its degree bound, and cannot back a Groth16 circuit at any size, because the transcript contains no alpha/beta-shifted powers. Audited before the run; more than ten independent client implementations exist. |
| Aztec Ignition | BN254 | ~100.8M G1 points | ~176 | KZG only — not Groth16 | 2019 – Jan 2020 | The largest KZG-only BN254 ceremony by participant count (Perpetual Powers of Tau is larger by degree bound), and reused by independent systems — though reuse reflects that availability rather than independent scrutiny. Custom binary transcript format needs a converter; an independent verification repository and a transcript specification are published. Verify what you can obtain before depending on it. |
| Zcash Sapling powers of tau | BLS12-381 | 2^21 | 88 entries | Groth16 and PLONK-family | Nov 2017 – early 2018 | The reference implementation of the two-phase design later ceremonies imitate, with unusually thorough operational-security documentation. Too small for most modern circuits; a historical record, not an ongoing ceremony. |
| Tornado Cash phase 2 | BN254 | Circuit-specific | 1,114 | Reference only — not reusable parameters | May 2020 | Not reusable parameters — a precedent for an open, browser-based phase 2 with a large anonymous contributor set (450 identified, 664 anonymous), built on Perpetual Powers of Tau contribution 30. The published participant list, artefact archive and generated verifier are the model later phase-2 platforms automated. |
| Penumbra summoning ceremony | BLS12-377 | Circuit-specific | 15,000+ in phase 1 | Reference only — not reusable parameters | 2023 | Not reusable parameters — a decentralised phase 2 run through the chain's own wallet software, with contribution slots allocated by bid rather than by a coordinator's queue. The precedent to study if you want a large, permissionless circuit-specific ceremony without a hosted platform. |
| Filecoin phase-2 attestations | BLS12-381 | Circuit-specific, very large | ~12–19 per circuit set | Reference only — not reusable parameters | 2020, 2021–22 | Not reusable parameters — a worked precedent for running phase 2 on very large circuits, with a clean separation of hash chain from signed attestations, and artefacts still reachable years later. |
Check the "usable for" column before the size column. Groth16's SRS contains alpha- and beta-shifted powers that a pure powers-of-tau/KZG transcript does not, so a KZG-only ceremony cannot back a Groth16 circuit at any size — this is the mistake most likely to cost a team a month. After that, match the curve, then the degree bound against the largest circuit you expect to need rather than the one you have today. Contribution counts are a weak proxy for independence: many contributions from linked parties are not stronger than fewer genuinely independent ones. Whatever you adopt, verify the transcript yourself and publish the hashes you verified.
Ceremony approaches · 6 pages
Process · 10 steps
Confirm the requirement
Re-read the proof system decision from §01 and write down precisely what the setup is for: which scheme, which curve, which degree bound, universal or circuit-specific. If the answer is "none", stop here and record why, so the question is not reopened later.
Search for a reusable SRS before planning anything
Identify existing public ceremonies that serve your scheme, on your curve, at sufficient degree — in that order, because a KZG-only transcript cannot back Groth16 however large it is. Reuse is the default; running your own phase 1 needs a written justification that survives scrutiny.
Verify the transcript you intend to inherit
Download the full transcript and run the verification yourself, end to end, on your own hardware. Record the hashes you verified and publish them. Inheriting a ceremony means inheriting the obligation to have checked it.
Freeze the circuit before any circuit-specific phase
For circuit-specific setups, the constraint system must be final. Any later change — including one made in response to an audit finding — invalidates the output and forces a repeat. Sequence the audit before the ceremony, not after.
Design the participant set and publish the rules in advance
Name the eligibility criteria, the ordering, the deadlines, the beacon you will use, and what will be published about each contributor. Publishing the rules before the ceremony is what makes the result auditable rather than merely asserted.
Rehearse the whole pipeline
Run the ceremony against a small circuit with volunteer participants, including verification and publication. Rehearsal is where you discover that the instructions are ambiguous, the upload times out, or the verifier does not build on a common platform.
Run the ceremony, verifying continuously
Verify every contribution as it arrives rather than at the end, so a bad contribution is caught while the participant is still reachable. Keep an append-only public log of contributions and hashes as they land.
Apply and publish the beacon
Apply the pre-committed beacon, publish its value and derivation, and run the full-chain verification once more over the finalised transcript.
Publish artefacts, instructions and the trust statement
Release the parameters, the complete transcript, the verification tooling with reproducible commands, the participant attestations, and a plain-language statement of exactly what users are trusting. Mirror everything somewhere you do not control.
Bind the parameters to the deployed system
Pin the hash of the verifying key in the on-chain verifier and in the client, and add a test that fails if the deployed parameters ever differ from the ceremony output. For a circuit-specific setup, add two more assertions to the same test: the phase-2 contribution count is greater than zero, and the verifying key's gamma and delta elements are not equal to each other or to the G2 generator. A key produced straight from phase-2 initialisation passes every other check and is trivially forgeable. This is what stops the ceremony from being quietly bypassed later.
Failure modes · 16
Sources for this section · 42
- SoK: Trusted setups for powers-of-tau strings (Wang, Cohney, Bonneau; FC 2025)paper
- Scalable multi-party computation for zk-SNARK parameters in the random beacon modelpaper
- Snarky Ceremonies — Groth16 ceremony security analysispaper
- Powers-of-Tau to the People: decentralising setup ceremoniespaper
- Lite-PoT: practical powers-of-tau setup ceremony (CCS 2025)paper
- ZKProof community reference: setup ceremoniesreference
- Wrapping up the KZG ceremony — 141,416 contributions over 208 daysrecord
- KZG ceremony special contributions — alternative entropy sourcesrecord
- ethereum/kzg-ceremony — transcript, FAQ, audits, independent verifierstranscript
- ethereum/kzg-ceremony-specs — SRS sizes and contribution formatspec
- ceremony.ethereum.org — participation and transcript verificationrecord
- Perpetual Powers of Tau — contribution chain, attestations, beacontranscript
- Perpetual Powers of Tau — verifying a contributionprocedure
- Perpetual Powers of Tau technical reportreport
- snarkjs — powersoftau and zkey commands, supported curvestool
- gnark mpcsetup — Groth16 BN254 phase 1 and phase 2tool
- p0tion — phase-2 ceremony toolkit (in maintenance mode)tool
- DefinitelySetup — ceremony registry and coordination front endtool
- phase2-bn254 — Rust phase-2 tooling used by several BN254 ceremoniestool
- RISC Zero trusted setup ceremony — rationale for a STARK-verify wrapper circuitrecord
- SP1 security model — documented reliance on an existing setup for its wrapperdocumentation
- Aztec Ignition ceremony completion report (BN254, ~100M points)record
- AztecProtocol/Setup — Ignition MPC ceremony code and transcript toolingtranscript
- AztecProtocol/ignition-verification — independent verification of the Ignition transcripttool
- ZcashFoundation/powersoftau-attestations — 88 entries ending in a random beacontranscript
- The design of the ceremony — Zcash Sprout operational security (archived copy; the original post has been removed)record
- Reinforcing the security of the Sapling MPC — Maller's proof that the beacon is not needed in the generic group model (archived copy)analysis
- Filecoin powers of tau — BLS12-381 phase 1 at 2^27, 19 participantstranscript
- Filecoin: trusted setup complete — phase 1 and phase 2 summaryrecord
- Hermez: selection of Perpetual Powers of Tau contribution 54 plus beacon — origin of the powersOfTau28_hez filesrecord
- Tornado Cash trusted-setup-server — phase 2 with 1,114 contributions on PPOT contribution 30transcript
- Penumbra summoning ceremony — decentralised phase 2 run through the chain's own walletrecord
- Zcash counterfeiting vulnerability remediated — the BCTV14 setup flawdisclosure
- The first ZK exploits happened, and they weren't what we expectedanalysis
- filecoin-project/phase2-attestations — production Groth16 phase-2 recordstranscript
- Filecoin trusted setup artefact hostingartefact
- semaphore-phase2-setup — phase 2 built on a Perpetual Powers of Tau challenge filetranscript
- ark-srs — Rust utility for consuming SRS from existing ceremoniestool
- ptau-deserializer — converts snarkjs phase-1 output for use with gnarktool
- drand / League of Entropy — distributed publicly verifiable randomness beaconservice
- Debian DSA-1571-1 — predictable OpenSSL random number generatoradvisory
- Zcash NU5 — Orchard shielded pool on Halo 2, requiring no trusted setuprecord
Cite this page
MarketComp (2026). Running or reusing a trusted setup. The ZK Field Manual (Version 1.3). MarketComp. https://zkpick.com/ceremony/
@misc{zkfieldmanual-running-or-reusing-a-trusted-setup,
title = {Running or reusing a trusted setup — The ZK Field Manual},
author = {MarketComp},
year = {2026},
version = {1.3},
howpublished = {\url{https://zkpick.com/ceremony/}},
note = {Accessed: YYYY-MM-DD}
}