Skip to main content

Getting Started with Semaphore

Semaphore enables users to participate anonymously in decentralized applications using zero-knowledge proofs. For this dApp, Semaphore ensures users can submit survey responses without revealing their identities.

Semaphore Features:

  • Anonymity: Users can submit answers without exposing their personal details.
  • Verification: Responses are validated without linking them to individuals.
  • Anti-Spam: Prevents duplicate submissions.

Setting Up Smart Contract Development Environment

To make use of hardhat, we need to set up our development environment and install Hardhat. Let's do this in the following steps:

Navigate to your project's root folder, and then run the following commands to create a new Hardhat project.


mkdir contract
cd contract
npm install --save-dev hardhat

Bootstrap a sample project by running the command below:


npx hardhat init

For this guide, you'll be selecting a typescript project.

note

While initializing the project, you will get a prompt to install the hardhat-toolbox plugin. The plugin bundles all the commonly used packages and Hardhat plugins recommended to start developing with Hardhat.

Next, install @semaphore-protocol/contracts for Semaphore Solidity contracts, OpenZeppelin contracts and hardhat-deploy with the following command:


npm install --save-dev @semaphore-protocol/contracts @openzeppelin/contracts hardhat-deploy

You then want to modify your hardhat.config.ts with the following configurations:


import { HardhatUserConfig } from "hardhat/config";
import "@nomicfoundation/hardhat-toolbox";
import "hardhat-deploy";
const config: HardhatUserConfig = {
defaultNetwork: "hardhat",
networks: {
localhost: {
url: "http://127.0.0.1:8545",
},
hardhat: {},
kaia: {
url: "https://public-en.node.kaia.io",
accounts: process.env.PRIVATE_KEY
? [process.env.PRIVATE_KEY]
: [
"0x7eff112dab68890a60c89d69c2ce1ebb115172f6760508ce6c8ea8fe8afe1e20",
"0xc696ccd259792f2ffb87e0012e4a37ae3526a3224686225af679e3aaa2aeab0d",
],
},
kairos: {
url: "https://public-en-kairos.node.kaia.io",
accounts: process.env.PRIVATE_KEY
? [process.env.PRIVATE_KEY]
: [
"0x7eff112dab68890a60c89d69c2ce1ebb115172f6760508ce6c8ea8fe8afe1e20",
"0xc696ccd259792f2ffb87e0012e4a37ae3526a3224686225af679e3aaa2aeab0d",
],
},
},
solidity: {
version: "0.8.27",
settings: {
optimizer: {
enabled: false,
runs: 200,
},
},
},
paths: {
sources: "./contracts",
tests: "./test",
cache: "./cache",
artifacts: "./artifacts",
},
mocha: {
timeout: 40000,
},
};
export default config;

Now that we have our development environment all set, let's get into writing our survey smart contract.

Make this page better