Imagine Change.org but all your signatures are private, you can donate money to the cause without revealing your address and all the signatories are real humans (not bots).
Sybil resistance:
- World ID
- Gitcoin Passport
- any other Sybil-resistance mechanism
Private - don’t reveal people who have signed the petition or contributed financially
- BUT optionally reveal when the cause owner has withdrawn the funds
- BUT reveal your identity selectively for potential rewards or as a public show of support
Private donations using https://www.zkbob.com/
can also be used as a private Kickstarter - fundraising program
- permissionless contract that verifies the VC based on trusted issuers and adds the identity to the group.
- multisig-owned governance of trusted issuers
- Implement creation of petitions, storage on IPFS and management of petitions
- Enable signatures without sybil resistance
- Integrate World ID for simple proof-of-humanity verification
- Implement Gitcoin Passport for soft sybil resistance
- Integrate zkBob for private donations
Petition operators will be able to choose which sybil resistance mechanisms they want to gate their petition with, and whether they want to be able to accept donations.
- Package-Manager:
pnpm
- Monorepo Tooling:
turborepo
- Smart Contract Development:
foundry
- Typescript-Types:
typechain
- Typescript-Types:
- Frontend:
next
- Contract Interactions:
wagmi
,rainbowkit
- Styling:
chakra
,tailwindcss
,twin.macro
,emotion
- Contract Interactions:
- Misc:
- Linting & Formatting:
eslint
,prettier
,husky
,lint-staged
- Linting & Formatting:
# Install pnpm
npm i -g pnpm
# Install dependencies
pnpm install
# Copy & fill environments
# NOTE: Documentation of environment variables can be found in the according `.example` files
cp packages/frontend/.env.local.example packages/frontend/.env.local
cp packages/semaphore/.env.example packages/semaphore/.env
# Generate contract-types, start local hardhat node, and start frontend with turborepo
pnpm dev
# Only start frontend (from root-dir)
# NOTE: Alternatively it can just be started via `pnpm dev` inside `packages/frontend`
pnpm frontend:dev
Environment Variable | Value |
---|---|
NEXT_PUBLIC_PRODUCTION_MODE |
true |
NEXT_PUBLIC_URL |
https://your-repo.vercel.app |
NEXT_PUBLIC_DEFAULT_CHAIN |
5 |
NEXT_PUBLIC_DEFAULT_CHAIN |
[5] |
NEXT_PUBLIC_RPC_1 |
https://rpc.ankr.com/eth |
NEXT_PUBLIC_RPC_5 |
https://rpc.ankr.com/eth_goerli |