<p align="center">
    <h1 align="center">
        World ID Trusted Setup CLI 👨‍💻
    </h1>
    <p align="center">CLI for coordinating and contributing to the World ID Protocol 4.0 trusted setup</p>
</p>

<p align="center">
    <a href="https://github.com/worldcoin/p0tion">
        <img src="https://img.shields.io/badge/project-p0tion-blue.svg?style=flat-square">
    </a>
    <a href="https://github.com/worldcoin/p0tion/blob/dev/LICENSE">
        <img alt="Github License" src="https://img.shields.io/github/license/worldcoin/p0tion.svg?style=flat-square">
    </a>
    <a href="https://www.npmjs.com/package/@worldcoin/world-id-trusted-setup-cli">
        <img alt="NPM Version" src="https://img.shields.io/npm/v/@worldcoin/world-id-trusted-setup-cli?style=flat-square" />
    </a>
    <a href="https://npmjs.org/package/@worldcoin/world-id-trusted-setup-cli">
        <img alt="Downloads" src="https://img.shields.io/npm/dm/@worldcoin/world-id-trusted-setup-cli.svg?style=flat-square" />
    </a>
    <a href="https://eslint.org/">
        <img alt="Linter" src="https://img.shields.io/badge/linter-eslint-8080f2?style=flat-square&logo=eslint" />
    </a>
    <a href="https://prettier.io/">
        <img alt="Prettier" src="https://img.shields.io/badge/code%20style-prettier-f8bc45?style=flat-square&logo=prettier" />
    </a>
</p>

<div align="center">
    <h4>
        <a href="https://github.com/worldcoin/p0tion/blob/dev/CONTRIBUTING.md">
            👥 Contributing
        </a>
        <span>&nbsp;&nbsp;|&nbsp;&nbsp;</span>
        <a href="https://github.com/worldcoin/p0tion/blob/dev/CODE_OF_CONDUCT.md">
            🤝 Code of conduct
        </a>
        <span>&nbsp;&nbsp;|&nbsp;&nbsp;</span>
        <a href="https://discord.gg/sF5CT5rzrR">
            🗣️ Chat &amp; Support
        </a>
    </h4>
</div>

| This CLI is a Worldcoin-maintained fork of p0tion and is used for coordinating and contributing to the World ID Protocol 4.0 trusted setup ceremonies. |
| ------------------------------------------------------------------------------------------------------------------------------------------------------ |

Rounding up the option of using a unique tool for different ceremony stages makes it possible to reduce the context switch, level of expertise, and bug exposure. This standard tool (built on top of the `actions` package) contains only the core commands for interfacing with one or more Trusted Setup Phase 2 ceremonies. You can customize (or extend) these commands based on your ceremony needs.

## 🧩 Circuits in This Ceremony

This trusted setup is for the World ID Protocol 4.0 circuits used by the [`oprf-service` stack](https://github.com/TaceoLabs/oprf-service/tree/02c6442349cc6a2baf35ec8d94ae5b4ac4f49a71/circom/main). The ceremony currently includes:

- `OPRFQueryProof`
- `OPRFNullifierProof`
- `OPRFKeyGenProof13`
- `OPRFKeyGenProof25`
- `OPRFKeyGenProof37`

For public context on the World ID 4.0 changes, see [Introducing World ID 4.0](https://world.org/blog/engineering/introducing-world-id-4.0).

## 🛠 Installation

Install the `@worldcoin/world-id-trusted-setup-cli` package globally

```bash
npm i -g @worldcoin/world-id-trusted-setup-cli
```

or run specific commands with `npx`:

```bash
npx @worldcoin/world-id-trusted-setup-cli contribute
```

> Please note that this CLI only runs on Linux or Mac systems. If a Windows user, please install WSL2 first:
>
> ```text
> https://learn.microsoft.com/en-us/windows/wsl/install
> ```

## 📜 Usage

### Local Development

**Prerequisites**

-   Node.js version 20.0 or higher.
-   Yarn version 3.5.0 or higher.

Copy the `.env.default` file as `.env`:

```bash
cp .env.default .env
```

And add your environment variables.

⚠️ Your environment variables must match the corresponding properties values inside the `.env` file of the `actions` package ⚠️

#### Core Commands

```bash
Usage: world-id-trusted-setup-cli [options] [command]

CLI for coordinating and contributing to the World ID Protocol 4.0 trusted setup

Options:
  -V, --version   output the version number
  -h, --help      display help for command

Commands:
  auth            authenticate yourself using your Github Account (Device Flow OAuth 2.0)
  contribute      compute contributions for a Phase2 Trusted Setup ceremony circuits
  clean           clean up output generated by commands from the current working directory
  logout          sign out from Firebase Auth service and delete Github OAuth 2.0 token from your machine
  coordinate      special subset of commands for coordinating a ceremony (coordinator only)
  help [command]  display help for command
```

#### Coordinator Commands

```bash
Usage: world-id-trusted-setup-cli coordinate [options] [command]

special subset of commands for coordinating a ceremony (coordinator only)

Options:
  -h, --help      display help for command

Commands:
  setup           setup a Groth16 Phase 2 Trusted Setup ceremony for zk-SNARK circuits
  observe         real-time updates about queue status for each ceremony circuit
  finalize        finalize a Phase2 Trusted Setup ceremony (beacon + artifacts exports)
  help [command]  display help for command
```

## ✅ How to Contribute

1) Authenticate

```bash
world-id-trusted-setup-cli auth
```

2) Contribute

```bash
world-id-trusted-setup-cli contribute
```

Package link:

```text
https://www.npmjs.com/package/@worldcoin/world-id-trusted-setup-cli
```
