This is the longer walk-through for someone actually running the repo, not a pitch deck.
- Network: Solana devnet
- Program ID:
5AhUsbQ4mJ8Xh7QJEomuS85qGgmK9iNvFqzF669Y7Psx - Explorer: https://solscan.io/account/5AhUsbQ4mJ8Xh7QJEomuS85qGgmK9iNvFqzF669Y7Psx?cluster=devnet
- DAO authority creates a DAO with a voting mode and timelock policy.
- Any wallet holding the DAO governance token can create proposals, optionally with a treasury action.
- Token holders commit vote hashes during the voting window.
- Voters or approved keepers reveal after
voting_end. - Anyone finalizes after
reveal_end. - If passed, anyone executes after the timelock unless authority vetoes first.
TokenWeighted: raw SPL token balanceQuadratic: integer square root of token balanceDualChamber: token-weighted capital threshold and quadratic community threshold must both pass
SendSol: fully executed on-chainSendToken: fully executed on-chain with mint and ownership checksCustomCPI: event-only by design in the current version
That last point matters. The repo does not currently expose arbitrary CPI execution from governance, and that is intentional.
yarn install
solana-test-validator --reset
anchor build
anchor testUseful targeted runs:
anchor test -- --grep "PrivateDAO"
anchor test -- --grep "Full flow"
anchor test -- --grep "demo"Configure wallet and RPC:
export ANCHOR_WALLET=~/.config/solana/id.json
export ALCHEMY_API_KEY="<alchemy-key>"
solana config set \
--keypair "$ANCHOR_WALLET" \
--url "https://solana-devnet.g.alchemy.com/v2/${ALCHEMY_API_KEY}"Fund:
bash scripts/fund-devnet.sh 2
bash scripts/check-rpc-health.shDeploy:
anchor build
anchor deploy --provider.cluster devnetCreate a DAO:
yarn create-dao -- --name "MyDAO" --quorum 51 --mode dualDeposit treasury SOL:
DAO_PDA="$DAO_PDA" yarn deposit -- --dao "$DAO_PDA" --amount 1.0Create a proposal:
DAO_PDA="$DAO_PDA"
RECIPIENT_WALLET="$RECIPIENT_WALLET"
yarn create-proposal -- \
--dao "$DAO_PDA" \
--title "Fund community work: 0.1 SOL" \
--treasury-recipient "$RECIPIENT_WALLET" \
--treasury-amount 0.1Commit:
PROPOSAL_PDA="$PROPOSAL_PDA" yarn commit -- --proposal "$PROPOSAL_PDA" --vote yesDelegate first, then commit as the delegatee:
PROPOSAL_PDA="$PROPOSAL_PDA" DELEGATEE="$DELEGATEE" DELEGATOR="$DELEGATOR"
yarn delegate -- --proposal "$PROPOSAL_PDA" --delegatee "$DELEGATEE"
yarn commit -- --proposal "$PROPOSAL_PDA" --vote yes --delegator "$DELEGATOR"Reveal:
PROPOSAL_PDA="$PROPOSAL_PDA" yarn reveal -- --proposal "$PROPOSAL_PDA"Finalize and execute:
PROPOSAL_PDA="$PROPOSAL_PDA"
yarn finalize -- --proposal "$PROPOSAL_PDA"
yarn execute -- --proposal "$PROPOSAL_PDA"This repo has a migration-oriented Realms path, not a claim of full Realms replacement.
What exists:
migrate_from_realmsmigrations/migrate-realms-dao.tsDao.migrated_from_realms- a Realms-style
VoterWeightRecord
What still takes more work:
- native proposal lifecycle coupling to Realms proposals
- automatic execution bridging between Realms and PrivateDAO
- Commit-reveal hides the vote, not the fact that a wallet participated
- Unrevealed votes do not count
- The reveal rebate helps but does not remove liveness risk entirely
- Devnet behavior is useful for iteration, not proof of mainnet readiness