Skip to main content
Version: V3

Quick setup

Semaphore provides an official CLI to set up your project with Hardhat. If your NPM version is 5.2 or higher you can use NPX:

npx @semaphore-protocol/cli@^3 create my-app --template monorepo-ethers

Otherwise, install @semaphore-protocol/cli@^3 globally and run the create command:

npm i -g @semaphore-protocol/cli@^3
semaphore create my-app --template monorepo-ethers
info

The supported templates are: contracts-hardhat, monorepo-ethers, monorepo-subgraph.

info

The semaphore CLI can also be used to get group data from a supported network (e.g semaphore get-groups --network arbitrum-goerli).

To start working on your project, install the dependencies:

cd my-app
npm i

Output​

The create command will create a directory called my-app (or whatever name you choose) inside the current folder. That directory will contain the initial project structure, which includes a simple contract, a task to deploy it, some tests and a Next.js application (the web-app folder) to interact with that contract.

my-app
├── .yarn
├── apps
│ └── contracts
│ │ └── contracts
| │ │ └── Feedback.sol
│ │ └── scripts
| │ │ └── download-snark-artifacts.ts
│ │ └── tasks
| │ │ └── deploy.ts
│ │ └── test
| │ │ └── Feedback.ts
│ │ └── hardhat.config.ts
│ │ └── package.json
│ │ └── tsconfig.json
│ └── web-app
├── scripts
│ └── copy-contracts-artifacts.ts
├── .editorconfig
├── .env
├── .env.example
├── .eslintignore
├── .eslintrc.json
├── .gitignore
├── .prettierignore
├── .prettierrc.json
├── .yarnrc.yml
├── package.json
├── README.md
└── tsconfig.json

The Feedback.sol contract creates a Semaphore group, allows users to join that group with their Semaphore identity, and finally allows group members to send an anonymous feedback.

Usage​

Compile contracts​

Go to the contracts folder:

cd apps/contracts

And compile your contracts:

npm run compile

Test contracts​

Test your contracts:

npm test

Generate a test coverage report:

npm run test:coverage

Or a test gas report:

npm run test:report-gas

Deploy contracts​

Follow the instructions below to deploy your contracts:

In the project root folder:

  1. Add your environment variables in the .env file.

    note

    You should at least set a valid Infura API Key (you could use Alchemy as well) and a private key with some ethers.

  2. Go to the apps/contracts folder and deploy your contract.

    npm run deploy -- --semaphore <semaphore-address> --group <group-id> --network arbitrum-goerli
    note

    Check the Semaphore contract addresses here.

    caution

    The group id is a number.

Start app​

Start the application:

npm run dev