Participation Guide
Everything you need to know about contributing to a Phase 2 Trusted Setup ceremony.
What is a Trusted Setup Ceremony?
A Trusted Setup ceremony is a multi-party computation (MPC) process used in zkSNARK-based systems. During Phase 2, multiple participants contribute randomness (called "toxic waste") to generate the final proving and verification keys for a circuit. As long as at least one participant honestly destroys their randomness, the entire ceremony is secure.
phase2cli automates this process: you authenticate, join a queue, download the previous contribution, mix in your entropy, upload the result, and the system verifies it automatically.
Eligibility Criteria
To prevent sybil attacks, participants must meet reputation requirements through one of the supported authentication methods. Only accounts that pass these checks can contribute.
GitHub Authentication
Your GitHub account must meet all of the following criteria:
Minimum Followers
Your account must have a minimum 2 followers set by the coordinator.
Minimum Following
Your account must be following a minimum 5 users.
Public Repositories
Your account must have a minimum 2 public repositories.
Account Age
Your GitHub account must be older than a minimum age (typically 30 days).
Bandada (Zero-Knowledge Proof)
Bandada is a privacy-preserving alternative that uses Semaphore zero-knowledge proofs for authentication. You prove membership in a credential group (e.g., "GitHub accounts with more than 2 followers") without revealing your identity. This method is ideal for anonymous contributions.
How to Participate
Connect your GitHub account
Open the ceremony page and click Sign in with GitHub. A popup asks you to authorize sign-in — identity only. No install, no terminal, and the browser never receives any write-scoped token.
Join the queue
Each circuit processes one contributor at a time. The page shows your position in the waiting queue. When it's your turn, your browser begins automatically.
Your browser contributes
Everything runs in your browser — for each circuit it automatically:
- Downloads — fetches the latest zKey from the previous contributor
- Computes — generates fresh randomness and mixes it into the zKey inside a Web Worker (the CPU-intensive part). Your randomness never leaves your machine.
- Uploads — uploads your new contribution to storage
Keep the tab open until your turn finishes. After upload, the coordinator's cloud function automatically verifies your contribution.
Get your attestation
Once all your contributions are verified, a public attestation is published automatically as a GitHub Gist, recording the verified contribution hashes.
Advanced: contributing via the CLI
The browser flow above is the recommended path for everyone. If you are on a low-memory device, or contributing to a very large circuit that exceeds your browser's available memory, you can instead use the command-line tool, which streams the computation through your machine's filesystem:
npm install -g @veilnyx-sdk/phase2cliphase2cli authphase2cli contributeThe CLI is a fully supported fallback; the resulting contribution is identical and is verified the same way.
Timeouts & Resuming
To prevent a single contributor from blocking the queue, ceremonies enforce a timeout mechanism:
- Dynamic timeout — adjusts based on average contribution time for the circuit
- Fixed timeout — a fixed time window set by the coordinator
If you time out, you must wait for a penalty period before rejoining. The CLI supports resuming contributions — if your process crashes during download, compute, or upload, you can re-run the contribute command and pick up from the last completed step (uploaded chunks are preserved).
System Requirements
Contribution requirements depend on the circuit size. The CLI will check your disk space before each contribution:
- Disk space— at least 2x the zKey size for the circuit (download + compute). Check the "Memory Requirement" on each circuit card for the specific amount.
- Stable internet — for downloading and uploading large zKey files (can be hundreds of MBs to GBs)
- Node.js 20+ — required to run the CLI
FAQ
Why was my account rejected?
Your GitHub account didn't meet the minimum reputation criteria. Check that your profile is public and you meet the follower, following, repository, and account age requirements. Contact the ceremony coordinator if you believe this is an error.
Can I contribute to multiple ceremonies?
Yes. Each ceremony is independent. Authenticate once, and you can contribute to any open ceremony.
What happens if my contribution fails verification?
The system will mark your contribution as invalid. You may need to re-contribute depending on the ceremony settings. The CLI will guide you through the process.
Is my identity public?
If you use GitHub auth, your GitHub handle will be associated with your contribution. For anonymous contributions, use Bandada (Semaphore ZK proof) authentication.
Can I stop midway and resume later?
Yes. If you stop during download, compute, or upload, you can resume by re-running the contribute command. Uploaded chunks are preserved. However, if you stop during the compute step, that step restarts from scratch.