An on-chain liquid-democracy voting protocol — the chain, smart contracts, and zero-knowledge circuits that power JUX Foundation's voting system. Fork it, run it, and build your own governance surfaces against it.
This repository is a published mirror. It is generated from a private mono-repo by an automated export that strips secrets, operational runbooks, and internal history. It has no long-form git history by design and is force-pushed on each release (see CONTRIBUTING.md). It is a faithful snapshot of the protocol layer — not the day-to-day development repo.
| Path | What it is |
|---|---|
besu/ |
Hyperledger Besu network config — a QBFT proof-of-authority chain. Genesis, validator config template, and node scripts. |
smc/ |
Solidity smart contracts (the voting, delegation, token, and role machinery) + a Hardhat project. |
smc/circuits/, circuits/ |
Circuit sources (Circom + Cairo) for eligibility and vote proofs. |
zk/vote_stark/ |
STARK proving/verification for anonymous vote tallies. |
This mirror deliberately excludes: validator private keys, chain state/data,
operational runbooks (prod cut, node onboarding), internal design docs, prod data exports,
and build artifacts. A forker generates their own keys and their own chain — see .env.example.
We will soon offer onboarding for validators and verifiers. This happens over a tailscale mesh network we are a permissioned chain after all!
# 1. Configuration
cp .env.example .env # then edit — set your own RPC + a freshly generated signer key
# 2. Stand up a local Besu node (dev)
cd besu && ./scripts/generate-keys.sh # generates YOUR validator key (never commit it)
docker compose up -d
# 3. Compile + deploy the contracts
cd ../smc && npm install
npx hardhat compile
npx hardhat run scripts/deploy.js --network besuNote (release blocker being resolved): a sanitized
smc/hardhat.config.js— one that reads the signer strictly from the environment with no key literal — is being finalized upstream and will land in a subsequent release. Until then, add a minimalhardhat.config.jspointingnetworks.besu.urlat yourBESU_RPC_URLandaccountsat[process.env.BLOCKCHAIN_SIGNER_PRIVATE_KEY].
The whole point of the clean split: you do not need JUX's application code to build against this protocol. Point any client — your own frontend, a bot, another DAO — at a node running this chain config and interact with the deployed contracts. This repo is the substrate; what you build on top is yours.
GNU AGPL-3.0. If you run a modified version of this software as a network service, you must make your modified source available to its users. Democracy stays open.