Single-DAO governance MVP on Stellar/Soroban with Rust contracts, generated TypeScript bindings, a Next.js web app, and Goldsky indexing.
- The token contract mints transferable NFT voting units.
- A proposer creates a proposal using checkpointed voting power.
- Token holders vote during timestamp-based voting windows.
- A successful proposal waits through the queue delay.
- The governor executes approved calls through the governor-authorized treasury.
The default deployment minimums are 300 seconds for voting delay, voting period, and queue delay. Quorum is configured in basis points.
contracts/token- NFT governance token, delegation, checkpoints, and mint authority.contracts/governor- proposal lifecycle, voting, quorum, queueing, and execution.contracts/treasury- governor-only arbitrary contract-call boundary.contracts/auction- perpetual SAC-funded NFT auctions.contracts/e2e- cross-contract integration tests.apps/web- Next.js governance interface.packages/*-bindings- generated TypeScript clients.configs- deployment inputs.deploys- deployment outputs and contract addresses.scripts- build, deploy, binding, config, and local network tooling.
- Node.js and pnpm 10.12.4
- Rust with the
wasm32v1-nonetarget - Docker for the local Stellar network flow
- Stellar CLI tooling used by the deployment scripts
pnpm install
pnpm dao:bindings
pnpm dao:local:up
pnpm devpnpm dao:local:up starts the local network, builds and deploys the DAO contracts, writes deployment output under deploys/, and regenerates apps/web/src/config/deployments.generated.ts.
The web app selects a generated deployment with:
NEXT_PUBLIC_DAO_NETWORK=local
NEXT_PUBLIC_DAO_LABEL=localCopy apps/web/.env.example to apps/web/.env.local only when needed. Contract IDs, RPC settings, passphrases, token metadata, and governance settings are generated from deployment outputs. Do not maintain those values as separate manual environment variables.
pnpm dev
pnpm build
pnpm lint
pnpm typecheck
pnpm dao:build
pnpm dao:bindings
pnpm dao:generate-config
pnpm dao:test:unit
pnpm dao:test:e2e
pnpm dao:test:all
pnpm dao:local:up
pnpm dao:local:down
pnpm dao:setup:local
pnpm dao:deploy:local
pnpm dao:deploy:testnetUse dao:setup:local when the local network is already running and you need to redeploy and regenerate frontend configuration.
Edit the appropriate input before deploying:
configs/local.jsonconfigs/testnet.json
Inputs include network, label, admin address, RPC URL, passphrase, token metadata, governance timings, proposal threshold, quorum, and web base URL.
Deployment commands write JSON artifacts to deploys/. Run pnpm dao:generate-config after changing deployment artifacts to regenerate the frontend configuration.
Goldsky provides indexed read models for proposals, votes, tokens, authorities, members, activity, and program status via PostgreSQL views. The web app queries these views for all DAO data.
See packages/goldsky/README.md for Goldsky pipeline setup and deployment instructions.
pnpm lint
pnpm typecheck
pnpm build
pnpm dao:test:allRegenerate bindings after changing a contract interface:
pnpm dao:bindings