Contributing to a Perpetual Powers of Tau (PPOT) ceremony is one of the most impactful ways to participate in Cardano's zero-knowledge infrastructure. This guide will walk you through the entire process of making a contribution using the Brebaje CLI tool, from installation to final verification.
What is a Perpetual Powers of Tau Ceremony?
The Perpetual Powers of Tau is a cryptographic trusted setup ceremony that generates public parameters required by Zero-Knowledge proof systems like Groth16 and PLONK. It's called 'perpetual' because unlike traditional ceremonies, it can accept contributions continuously over time, strengthening the security with each participant.
For Cardano, we use the BLS12-381 elliptic curve, which is the same curve used across the Cardano blockchain. The ceremony we conducted in October 2024 completed successfully with 40 community participants, establishing a strong foundation for privacy-preserving applications on Cardano.
As long as at least one participant honestly destroys their secret contribution (the 'toxic waste'), the entire system remains secure. Your contribution helps strengthen this trust assumption.
Prerequisites and System Requirements
Before starting, ensure your system meets these minimum requirements:
Hardware Requirements
- •Minimum 16GB RAM (recommended 32GB for faster processing)
- •At least 10GB of free disk space for ceremony files
- •Stable internet connection for uploading/downloading files
- •Estimated contribution time: 3-4 hours on standard computers
Software Requirements
- •Node.js version 22.17.1 or higher
- •pnpm version 9.0.0 or higher (package manager)
- •Git installed and configured
- •GitHub account (for authentication and contribution records)
- •Terminal/command line access
Step 1: Installing Brebaje CLI
The Brebaje CLI is the command-line tool that manages the entire contribution process. Let's install it step by step.
Clone the Repository
First, clone the Brebaje repository to your local machine:
git clone https://github.com/Xtremono/brebaje.git cd brebaje
Install Dependencies
Navigate to the CLI directory and install all required dependencies:
cd apps/cli pnpm install
This will download and install all necessary packages including Commander.js for command handling and snarkjs for cryptographic operations.
Build the CLI
Compile the TypeScript source code to JavaScript:
pnpm build
Install Globally (Optional but Recommended)
For easier access from anywhere on your system, install the CLI globally:
pnpm link --global
After this, you can use 'brebaje-cli' from any directory. If you skip this step, you'll need to run commands using 'node ./build/index.js' instead.
Verify Installation
Confirm the installation was successful:
brebaje-cli --help
You should see a list of available commands and options.
Step 2: GitHub Configuration
The ceremony uses GitHub for authentication and storing contribution records. You'll need to create a GitHub account if you don't have one, and generate a special access token.
Fork the Ceremony Repository
Visit the official Cardano PPOT repository and click the 'Fork' button to create your own copy:
https://github.com/p0tion-tools/cardano-ppot
This creates a fork under your GitHub account where your contribution record will be stored.
Generate a GitHub Classic Token
The CLI needs a GitHub token to post contribution records as gists. Here's how to create one:
- •Go to GitHub Settings → Developer settings → Personal access tokens → Tokens (classic)
- •Click 'Generate new token (classic)'
- •Give it a descriptive name like 'Brebaje PPOT Contribution'
- •Set expiration (recommend 90 days or no expiration for ongoing ceremonies)
- •Select ONLY the 'gist' permission scope
- •Click 'Generate token' and copy it immediately (you won't see it again)
Configure the Token in Brebaje CLI
Store your GitHub token securely in the CLI:
brebaje-cli setup gh-token YOUR_GITHUB_TOKEN_HERE
This saves the token locally so you don't have to enter it for each contribution. Keep this token secret and never share it publicly.
Step 3: Making Your Contribution (Automatic Method)
The easiest way to contribute is using the automated flow. This single command handles the entire process for you.
Run Auto-Contribute
Execute the automated contribution command:
brebaje-cli ppot auto-contribute
This command will automatically:
- •Download the latest challenge file from the ceremony
- •Generate your cryptographic contribution using secure randomness
- •Upload your contribution response to cloud storage
- •Post a contribution record to GitHub Gist with your contribution hash
- •Generate URLs for creating a pull request
The process typically takes 3-4 hours depending on your system. You can monitor progress through the detailed logs shown in your terminal.
What Happens During Auto-Contribute
Understanding what the tool does helps you verify the process is working correctly:
- •Download Phase: Fetches the current ceremony state file (usually several GB)
- •Contribution Phase: Runs snarkjs to apply your random entropy to the ceremony parameters
- •Upload Phase: Securely uploads your contribution using pre-signed URLs
- •Record Phase: Creates a permanent public record of your contribution on GitHub Gist
Step 4: Making Your Contribution (Manual Method)
For more control or if you need to troubleshoot, you can execute each step manually.
Download the Challenge File
First, obtain the download URL from ceremony coordinators, then download the file:
brebaje-cli ppot download https://ceremony-storage.url/challenge.ptau
This downloads the current ceremony state to your local 'output' directory.
Generate Your Contribution
Create your cryptographic contribution:
brebaje-cli ppot contribute
This process uses snarkjs internally to:
- •Read the challenge file from the output directory
- •Generate secure random values (your secret entropy)
- •Apply multi-party computation to create new ceremony parameters
- •Save your contribution response file
- •Display your contribution hash for verification
Upload Your Contribution
After generation completes, upload your contribution (you'll receive an upload URL from coordinators):
brebaje-cli ppot upload https://ceremony-storage.url/upload-url
Post Your Contribution Record
Create a permanent public record of your contribution:
brebaje-cli ppot post-record
This creates a GitHub Gist containing your contribution metadata including hashes, timestamps, and system information.
Step 5: Completing Your Contribution
After the automatic or manual contribution process finishes, there are critical final steps you must complete.
Create a Pull Request
The CLI will provide a pull request URL. You MUST:
- •Click the provided GitHub PR URL in your terminal output
- •Review the contribution details in the PR description
- •Click the green 'Create pull request' button on GitHub
- •Wait for ceremony coordinators to review and merge your contribution
Without creating the PR, your contribution won't be officially included in the ceremony!
Share Your Participation (Optional)
The CLI generates a social media sharing link. Consider sharing your participation to:
- •Increase transparency and community awareness
- •Encourage others to participate
- •Demonstrate the decentralized nature of the ceremony
- •Build trust in Cardano's zero-knowledge infrastructure
Verify Your Contribution (Recommended)
Optionally verify your contribution was computed correctly:
brebaje-cli ppot verify ./output/your-contribution.ptau
This runs cryptographic verification to ensure your contribution file is valid and correctly computed.
Understanding the Output Files
After contributing, you'll have several files in your output directory:
- •Input file: The challenge file you downloaded (e.g., challenge_0040.ptau)
- •Output file: Your contribution response (e.g., response_0041.ptau)
- •Contribution record: JSON file with metadata and hashes
- •Attestation: Proof of your contribution including your contribution hash
You can keep these files for your records, but the most important data is already publicly recorded on GitHub.
Security Best Practices
Contributing to a trusted setup ceremony is a responsibility. Follow these security practices:
Toxic Waste Disposal
The most critical security requirement:
- •Your computer's random entropy during contribution is the 'toxic waste'
- •This randomness must be permanently destroyed after contributing
- •The CLI handles this automatically, but for extra security consider rebooting your machine after contributing
- •Never attempt to recover or save the random values used during contribution
GitHub Token Security
- •Never share your GitHub token publicly or commit it to version control
- •Use tokens with minimal permissions (only 'gist' scope required)
- •Rotate tokens periodically for long-running ceremonies
- •Revoke tokens immediately if compromised
Network Security
- •Use a trusted network connection (avoid public WiFi)
- •Verify download URLs are from official ceremony coordinators
- •Check file hashes match expected values when provided
- •Monitor upload progress to ensure complete file transfer
Troubleshooting Common Issues
Out of Memory Errors
If the contribution process crashes with memory errors:
- •Ensure you have at least 16GB RAM (32GB recommended)
- •Close other applications to free memory
- •Increase Node.js memory limit: NODE_OPTIONS='--max-old-space-size=8192' brebaje-cli ppot contribute
- •Consider using a more powerful machine for contribution
Download/Upload Failures
If file transfers fail:
- •Check your internet connection stability
- •Verify the provided URLs are not expired (pre-signed URLs have time limits)
- •Request new download/upload URLs from ceremony coordinators
- •Try again during off-peak hours for better network performance
GitHub Authentication Issues
If posting records fails:
- •Verify your GitHub token has 'gist' permissions
- •Check token hasn't expired
- •Reconfigure token: brebaje-cli setup gh-token NEW_TOKEN
- •Ensure you're authenticated with GitHub (try logging out and back in)
Advanced: For Ceremony Coordinators
If you're coordinating a ceremony, the CLI provides additional commands:
Generate Pre-signed URLs
Create time-limited upload and download URLs for participants:
brebaje-cli ppot generate-urls challenge_0040.ptau --download-filename response_0041.ptau --expiration 1440
This generates both URLs with 24-hour expiration (1440 minutes).
Apply Beacon Randomness
For finalizing a ceremony with public randomness:
brebaje-cli ppot beacon input.ptau BEACON_HEX 10000 'Final Ceremony'
This applies beacon randomness to ensure no single party could have predicted the final parameters.
Initialize New Ceremony
Start a fresh PPOT ceremony:
brebaje-cli ppot new
This creates the initial ceremony parameters for the first contributor.
Why Your Contribution Matters
Every contribution to the Perpetual Powers of Tau ceremony strengthens Cardano's zero-knowledge infrastructure. Here's the impact you're making:
- •Enabling Privacy: Your contribution helps create the foundation for privacy-preserving applications on Cardano
- •Strengthening Security: More contributors mean stronger security assumptions for the entire ecosystem
- •Supporting Developers: Projects building ZK-SNARKs applications benefit from your contribution
- •Building Trust: Public participation demonstrates the decentralized nature of the trusted setup
- •Advancing Technology: Contributing to cutting-edge cryptographic infrastructure
The Cardano PPOT ceremony with 40 participants established one of the most robust trusted setups in the blockchain space. Every additional contributor makes it even stronger.
Next Steps After Contributing
After successfully contributing to the ceremony:
- •Monitor your pull request for coordinator approval and merge
- •Join the community discussion about zero-knowledge development on Cardano
- •Explore building ZK-SNARK applications using the ceremony parameters
- •Consider contributing to additional ceremonies as they launch
- •Share your experience to encourage more community participation
Additional Resources
To learn more about PPOT ceremonies and zero-knowledge proofs:
Official Ceremony Guidelines: Complete reference documentation from the P0tion Tools collective
- •Brebaje Documentation: Complete technical documentation for all CLI commands and API endpoints
- •Cardano PPOT Repository: Official ceremony repository with contribution guidelines and ceremony history
- •P0tion Tools: Multi-chain collaboration for trusted setup infrastructure and ceremony coordination
- •snarkjs Documentation: Understanding the cryptographic tools and algorithms behind the ceremony
- •Zero-Knowledge Proofs on Cardano: Educational resources about ZK implementation and PlutusV3 support
Conclusion
Contributing to the Cardano Perpetual Powers of Tau ceremony is a meaningful way to participate in building privacy-preserving infrastructure. While the process involves several technical steps, the Brebaje CLI tool automates most of the complexity, making it accessible to anyone with basic command-line skills.
By following this guide, you've learned how to install the CLI, configure GitHub authentication, make a contribution using both automatic and manual methods, and complete the necessary verification steps. Your contribution joins dozens of others in creating a robust foundation for zero-knowledge applications on Cardano.
Remember: the security of the entire system relies on at least one participant honestly destroying their toxic waste. By participating and following best practices, you're helping build a more private and secure blockchain ecosystem for everyone.