Phase 2: How to CONTRIBUTE in the Nimiq Zero-Knowledge Proof Ceremony

Welcome back!

This documentation explains the procedure to contribute with the keys generated in the first step, which is the second part of Phase 2 to participate in the ZKP Ceremony.

Expectation from Contributors

  • Availability on Discord: We also count on you being reachable via Discord since as soon as the round contributors are assigned to start, they must begin contributing promptly.

  • System Availability: Turn off the sleep setting on your machine and ensure it is connected to a power outlet. Contributors must be willing to keep their computers operational for multiple hours or even a few days, depending on the progress of the ceremony.

  • Publish Attestations: Contributors are expected to generate and publish their attestations for the contribute step. This step is crucial for verifying the integrity of the ceremony and creating a transparent record of participants’ contributions.

  • Technical Requirements: Ensure that your system meets the following technical requirements:

    • Familiarity with running a terminal.
    • Basic understanding of a Command Line Interface.
    • Operating systems: Linux, macOS, Windows.

    For assistance with the Command Line Interface, including guidance for users on VPS (Virtual Private Servers), you may find the following guides helpful:

Phase 2: Contribution

In this second phase, contributors go through a two-step process to contribute to the key generation, like in Phase 1. Here is how you can contribute with your keys:

  1. Get the contribute binary and start the contribution client:

    a. For Advanced Users:

    1. Compile the contribute binary following the same steps from 1.1. to 1.3. of the previous tutorial (if you are building from source, make sure to use the latest version of the code).
    2. Start the contribution client by executing the binary with your keys stored in the nimiq.keys file, ensuring that the nimiq.keys file is the repository’s main directory (snark-setup-operator).
    3. Run cargo run --release --bin contribute -- --coordinator-url "".

    b. For Regular Users:

    1. Download the precompiled contribute binary corresponding to your OS here. Note that this will use the precompiled binary Nimiq provides.
    2. Make contribute_<your-operating-system> an executable file. If you’re unsure how to do this, you can find instructions for Linux, MacOS, Windows, or in our troubleshooting below.
    3. Start the contribution client by executing the binary with your keys stored in the nimiq.keys file, ensuring that the nimiq.keys file is in the same directory as the contribute binary: ./contribute_<your-operating-system> --coordinator-url "".
  2. Running the contribution client:

    • The terminal will request you for input at this point:
    1. Enter your passphrase you created previously and an additional form of entropy.
    2. Wait until you see the progress bar on “0/128 chunks”; please leave your machine running once this starts. Note that this will be highly CPU-intensive.
  3. Publish your Attestation:

    Once the software terminates running, you have successfully finished contributing to Phase 1 of the setup! Please publish your nimiq.attestation file on GitHub by creating a new issue! If you use precompiled binaries, be sure to mention you’ve verified the binary hashes posted on the release page match the downloaded files.

  4. Destroy your Keys:

    This setup does not only produce the necessary keys but also generates “toxic waste”, which could tamper with the ceremony. Please securely destroy your keys once you finish contributing to prevent any potential tampering.