What is a Trusted Setup?

Many zero-knowledge proof systems, including Groth16, the proof system that Nocturne V1 uses, require a layer of entropy (randomness) to be applied to circuits in order for the proofs to be secure. The catch, however, is that nobody can know that randomness. For this reason, said randomness is often referred to as “toxic waste” - we must ensure that no one person holds onto the randomness, otherwise the zero-knowledge proof scheme will be broken.

In practice, we can more or less guarantee this by using multi-party computation (MPC). The main idea is that we get as many people as possible to generate their own randomness and apply it to the circuit, layering it on one-by-one in a manner reminiscent of a “summoning ceremony" or a “ritual of randomness”. As long as just one participant actually discards their “toxic waste”, the proof system will be secure.

Since you’re reading this, we hope that you, too, can contribute your randomness and be an important part of ensuring the security of the Nocturne protocol.

For more information about trusted setup ceremonies, check out the following:

Prerequisites

  1. We assume a base level of technical background. In particular, we assume you’ve used Node.js / npm before and you know your way around a terminal.
  2. You are running Mac or Linux. The contributor CLI tool does not natively work on Windows, so if you are on Windows, you will need to run it using WSL. The tool does not support being run inside VMs and Docker containers at the moment.
  3. In order to run the contribution CLI, you must have Node.js version 18. It is less likely to work with newer versions. If you don’t have it installed, you can install it using a tool like nvm or volta or directly from their website.
  4. As a sybil-resistance mechanism, you must have a GitHub account such that:
    1. You have 1 public repository
    2. You have at least 1 follower
    3. You are following at least 5 other GitHub accounts
    4. The account is at least 1 month old
  5. Check your internet connection. Since one of our circuits is somewhat large, we recommend contributors have an upload bandwidth of at least 1 Megabytes per second (~1Mbps).
  6. If you’d like, take a look at the circuits and protocol code here: https://github.com/nocturne-xyz/protocol
  7. The Ceremony will end at 00:00 EST on November 6th. After that, no new contributions will be accepted.

Contributing

Assuming you’ve satisfied the prerequisites, contributing requires three easy steps:

  1. Fire up a terminal and install the CLI by running npm install -g @nocturne-xyz/nocturne-setup.
    1. You can find the source code of the CLI here
  2. Authenticate the CLI with your GitHub account (satisfying the requirements above) by running nocturne-setup auth.
  3. Contribute to the ceremony by running nocturne-setup contribute. Follow the prompts, and let it chug.

Notes on Contributing