research(governance): DAO and case-study review for hybrid leadership vs holder votes #13
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Investigate hybrid governance models and published DAO / treasury case studies so CL8Y voting can stay a leadership-led, holder-ratified system instead of either (a) putting every operational decision to a token poll or (b) leaving community funds and risk-tolerance choices with no holder mandate.
This issue is research + a written recommendation. It does not implement a new governor, committee, or proposal type. Product follow-ups (template #10, draft/review #11, and any later “what may be voted”) should cite this note.
Holder themes below are synthesized from a private community discussion (2026-08-29–30). Individual messages, handles, and quotes are not reproduced.
Current codebase
This repo is stage-1 tooling: an impartial offchain snapshot poll for registered Terra Classic CW20 and BSC BEP-20 CL8Y wallets. It does not encode a constitution, vote-scope taxonomy, leadership role, treasury executor, or succession plan.
{ terra_height, bsc_block }snapshot. Votes are advisory / offchain.voting.proposals(ledger/migrations/20260825000002_voting.sql): title + freeform HTML,statusdefault'open', freeze heights at create. No proposal category, no “major vs operational” flag, no committee/oversight tables, no tranche/execution records.operator-voting:POST /v1/register,POST /v1/proposals,POST /v1/proposals/:id/votes.GET /v1/proposals/:idreturnsadvisory: true. Blacklist is env (VOTING_BLACKLIST_ADDRESSES), not a governance body.frontend/:/,/new,/:id(+/vote*aliases). Copy: “Offchain / advisory.” Legal clickwrap before transactional UI. DEX Terra + Bridge EVM wallets.docs/ARCHITECTURE.md: offchain polls do not move DEX factory wasm admin / fee governance (terra1zlmv2xydxcusurtr6rl78wsvytdc6mfex6hep7). UI must not imply on-chain DAO finality.VITE_*BSC RPC.There is no in-repo doctrine for: founder/management recommendation vs open option menus; technical vs risk/reward ballots; staged liquidity / treasury tranches; continuity if a key individual is unavailable; or how an oversight group should check feasibility without becoming a second electorate.
Why this is needed
Stage 1 makes it possible for holders to act. It does not answer what voting is for. Community discussion converged on a hybrid, not on “vote everything” and not on “never vote”:
Without this research, later product issues will either over-fit one conversation or copy a famous DAO that violates this repo’s constraints (on-chain governor, archive snapshots, identity merging, executable treasury from this API).
Constraints / guardrails
terra1…and BSC0x…separate).ADMIN_TOKENin the frontend, no seeds, noVITE_*BSC RPC, Legal clickwrap still required for transactional UI.Relevant files (read; write only the research deliverable unless a tiny doc cross-link is needed)
Read (current product — do not contradict without a follow-up issue):
docs/HANDOFF.md,docs/ARCHITECTURE.md,docs/OPERATOR_VOTING.md,docs/FRONTEND.md,docs/LEDGER_INVARIANTS.md,docs/OPS.md,README.md,AGENTS.mdledger/migrations/20260825000002_voting.sqloperator-voting/src/api.rs,payload.rs,blacklist.rs(what the control plane actually enforces)frontend/src/pages/VoteListPage.tsx,VoteNewPage.tsx,VoteDetailPage.tsx(advisory copy, open-on-create UX)Write (this issue):
docs/GOVERNANCE_RESEARCH.md(or equivalent path agreed in the MR) — case studies, vote-scope matrix, recommendations, attack-surface notes, explicit non-goals.docs/ARCHITECTURE.md/docs/HANDOFF.md/docs/ISSUE_MIGRATION.mdonly so agents can find the note. No product-behavior change.Recommended direction
1. Research questions (must all be answered in the doc)
2. Suggested case-study set (minimum; add others if they teach a distinct lesson)
Cover at least eight, each with: model type, what is voted, who proposes, who executes, snapshot vs on-chain, known attacks, fit/misfit for CL8Y.
3. Deliverable shape
docs/GOVERNANCE_RESEARCH.mdshould contain:4. Out of scope for the MR that closes this issue
advisory: trueor freeze-at-create (that remains #11 if freeze moves to vote-open).Acceptance criteria
docs/GOVERNANCE_RESEARCH.mdexists on the default branch (or an MR targeting it) and answers Q1–Q8.Test plan (all paths)
Research “paths” = coverage of questions, constraints, and reader roles. Treat the doc as the artifact under test.
POST /v1/votes.governor.sol, CosmWasm voting contract, archive LCD, merge terra+evm identity, factory multisig control from this app) — each appears only as do not do..env, no admin tokens.AGENTS.md/HANDOFF.md(if linked) send a new agent to the research doc before inventing a governance model.Test plan — attack, hack & abuse vectors
The research must catalog how comparable systems were abused and state whether CL8Y stage 1 already mitigates, #10/#11 mitigate, or a follow-up is required. Include at least:
LEDGER_INVARIANTS.md: dump-after-freeze vs buy-before-freeze).terra1+0xare “the same person.” Hard rule: do not merge. Research must not recommend social-graph linking as v1 identity.advisory: true.docs/OPS.md, not as a new voting feature.If a case study’s famous hack has no CL8Y analog, say N/A and why (usually: no executable governor).
Verification criteria
docs/GOVERNANCE_RESEARCH.mdand explain the intended hybrid model in a few sentences without referencing the private chat.AGENTS.md(no contracts, no archive, BSC core, identity, Legal, least privilege).gitleaks detect --source . --config .gitleaks.tomlclean on the MR.cargo test --workspace --libandcd frontend && npm teststill pass.Labels
productarchitecturesecurityenhancementPriority
P2 — informs #10/#11 and later vote-scope work; does not block stage-1 ops (#7–#9).
Depends on
None. Complements #10 and #11. Do not wait for those MRs to start the research.
marked as related to #10
marked as related to #11
changed the description
Research first pass + second pass complete. Deliverable is
docs/GOVERNANCE_RESEARCH.md(local tree; not merged yet) with one-line pointers fromAGENTS.md,docs/HANDOFF.md,docs/ARCHITECTURE.md,docs/ISSUE_MIGRATION.md. No schema/API/UI change. Private community chat is not quoted.gitleaksclean.Summary
Intended hybrid (few sentences): Leadership decides how to implement (engineering, wallets, RPC, Legal wiring, marketing). For major fund, risk, issuance, and governance-rule items, leadership publishes one recommended option plus rationale; registered Terra and BSC holders approve or reject. A feasibility reviewer (#11) can refuse to open an incomplete or infeasible poll; they cannot vote as a bloc. Polls stay
advisory: true. This API does not execute and does not move DEX factory admin.Closest analog: Snapshot temperature check + separate Safe/ops execution (Uniswap labeled temp check). Not LUNC
x/gov, not Compoundgovernor.sol, not Snapshot-sum of two chains into one person.#10/#11 (additive): Template should force recommended option + risk spectrum + tranche/halt in the text. Review gate = completeness/feasibility, not a second electorate. Do not rewrite those issues’ APIs.
Do not: CosmWasm voting contract,
governor.sol, archive LCD electorate, mergeterra1+0x, bind this app to factory multisig, hideadvisory: true, skip Legal for an “emergency.”Tradeoffs: Token-weight is plutocracy (explicit; Curve/UNI prove pretending 1w1v is theater). Leadership-proposes can fail a plurality “winner” (honest). Tranches preserve unspent capital but halt can be griefed if not inside the ratified plan. Committee allowlists are key-compromise surfaces (rotate; don’t on-chain-magic). Process too early (Nouns: vote every grant) vs skipped (Arbitrum AIP-1 theater; LUNC marketplace).
Further study: (1) how to attribute “official recommendation” in UI without a new table; (2) optional decision-class enum after #10; (3) OPS rotation for blacklist / future committee / Legal admin; (4) counsel on treasury/issuance votes — flagged only, not a regime.
Follow-up sketches are in the doc §12; not filed.
Raw research (evidence)
GitLab API
docs/GOVERNANCE_RESEARCH.md.Live API (2026-08-30)
Terra Classic LCD
https://terra-classic-lcd.publicnode.com/cosmos/gov/v1/params/voting|deposit|tallying:min_deposit5000000000000uluna,max_deposit_period1209600s,voting_period604800squorum0.40,threshold0.50,veto_threshold0.334,burn_vote_vetotrueexpedited_voting_period86400s,expedited_threshold0.667Proposal 12223 (passed)
https://terra-classic-lcd.publicnode.com/cosmos/gov/v1/proposals/12223— “Set the On-Chain Tax Rate to 1.5%”:231876673886989204(~32.4% of all)274758471623727508(~38.4% — largest bucket)90327057449449583118327059186321346Recent mix (LCD reverse sample): 12225 voting (IBC relaying fund), 12224 rejected (community pool ceilings), 12223 tax, 12222 Hyperlane funding, 12221/12218 upgrades, 12219 signal USTC staking. Open marketplace of types.
Snapshot GraphQL
https://hub.snapshot.org/graphqlspaceuniswapgovernance.eth:unitoken0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984network1voting.period432000 (5 days),quorum10_000_000 — matches UF temp-check docs.Simulations (
/tmp/gov-research/sim_governance.py,sim_12223_tally.py)Primary sources (fetched)
blockTagfreezeSecond-pass discoveries (deepened)
advisory: true.Close #13 when the doc is merged. File follow-ups only from §12 with maintainer approval.
Second-pass fold-in from parallel case-study reviews. Hybrid recommendation unchanged. New evidence now in
docs/GOVERNANCE_RESEARCH.md§14:endTime.No product-behavior change. Still not filed: follow-up sketches in §12.
mentioned in merge request !22
mentioned in merge request !23
mentioned in commit
524a3ee79eResearch note is on
mainasdocs/GOVERNANCE_RESEARCH.md. Agents are pointed at it fromAGENTS.md/HANDOFF.md. Freeze timing in that doc now matches #11 (freeze at vote-open, not draft create). This issue stays research-only — no schema/API/UI from #10/#11 should be treated as closing it.Follow-up research (stale weight, turnout, secrecy, curves, veto). Folded into
docs/GOVERNANCE_RESEARCH.md§15 locally; not merged yet. No schema/API/UI change. Private community chat is not quoted.gitleaksclean on that doc.Hybrid recommendation from the first note is unchanged: leadership proposes one option; registered Terra and BSC holders ratify; #11 is a feasibility open-gate, not a second electorate; polls stay
advisory: true.Summary
Community follow-up asked: what to do when a large registered holder never votes (herding fear or discount-trading bots), whether to count only cast ballots, whether to dampen weight above a cap, whether to hide who voted, what “30% turnout” means if bots hold supply, and whether a veto should be a token share or a role.
There is a third way. Do not pick only-cast or a weight curve.
Keep 1:1 token weight at freeze. A concave/exponential curve without unique identity is theater (Snapshot QV docs; Circle Research arXiv:2605.18990). Splitting wallets restores linear power. Dual-chain already gives two addresses. Wallet exemptions to preserve a ~50% veto are a special role, in the worst form.
If a later issue ever labels a poll “passed,” quorum denominator = frozen registered set, not circulating supply. LP, bridge, CEX, and fee-tier bots are why registration exists. Arbitrum is moving quorum onto delegated/registered power for the same reason (votable supply grew, participation did not).
Silence is not a vote. Abstain is explicit and should count toward quorum. Only-cast with no floor is an empty-ballot attack (sim: 5 of 100 “pass” 100% yes). Uniswap temp-check “Four for V4” is the opposite failure: ~unanimous For, 5.35M vs 10M quorum — did not meet the floor.
Keep the rolls live: 90-day re-register or prune after N missed open polls. That is how you avoid “never meet quorum because of lost interest / dormant bots.” Cheap attack: re-sign before freeze. Pair with existing Legal clickwrap and a cooldown after prune. Do not auto-count silence as against.
Bots and “30% of circulating”: assume discount-traders mostly never register (Legal + signature). Measure turnout of rolls. If they do register and go dormant, TTL/prune. Do not wait for circulating turnout that includes LP.
Herding / intimidation ≠ true secret ballot. Snapshot/Shutter hides choices until close, then reveals. Aave’s 2023 trial: unique voters 32.6k → 14.2k (did not raise turnout). MACI / permanent privacy needs contracts — forbidden here. This API stores plaintext
choice;GET /v1/proposals/:id/votes/:addris unauthenticated. Fit: hide running tally until close; keep draft comments and #11 analysis attributed; disclose that ops can read the DB.Veto is a role, not 50% of supply. A silent whale cannot token-veto. Cosmos
NoWithVetorequires showing up (share of participating power). Yearn yChad Guardian: nullify, cannot propose. Distinct from #11 committee (open/refuse poll) and blacklist. Because polls are advisory, ops can already refuse to execute; naming the role is honesty and rotation.Do not implement any of this in #13. Stage 1 stays dual-chain advisory snapshots. Sketches in the doc §12 items 6–8; not filed.
Tradeoffs: 1:1 is plutocracy (explicit). Registered quorum is honest but dies if rolls go stale. Only-cast is live but capture-prone. Shielded-until-close reduces herding and last-minute swings you wanted to see. Permanent anonymity kills audit. A veto role is key-person (rotate; write the rights).
Further study: (1) what % of registered freeze-set is a sane quorum floor once real rolls exist; (2) TTL vs missed-vote prune vs both; (3) whether to authz
GET .../votes/:addr; (4) counsel if a named veto over treasury-adjacent mandates looks like control — flagged only.Raw research (evidence)
GitLab / in-tree
docs/GOVERNANCE_RESEARCH.md§15 (this follow-up) · §9 attack rows 19–26 · §10 non-recommendations · §12 sketches 6–8operator-voting/src/db.rstallyGET /v1/proposals/:id/votes/:addrreturns{choice, weight}with no caller signature:operator-voting/src/api.rsget_votewallet_address:frontend/src/pages/VoteDetailPage.tsxtally(API still returns it on list/detail JSON)docs/LEDGER_INVARIANTS.mdSimulations (
/tmp/gov-research-13b/sim_stale_turnout.py)Electorate 100k circulating = 40k LP/bridge + 20k unregistered bots + 20k active registered + 15k stale whale + 5k dormant registered bots. Cast 12k for / 3k against:
Curve sketch (1:1 to 5k, then 0.14× extra): 10k in one wallet = 5700; split 2×5k = 10000 (1.75×). sqrt(10k) honest = 100; 10k wallets of 1 = 10000 (100×). Founder 50k vs ten 5k wallets under the piecewise curve → 18% vote share. Prune missed>3: denom 39k → 19k. Silent whale Cosmos-veto share = 0.
Live API (2026-08-30)
Terra Classic LCD
https://terra-classic-lcd.publicnode.com/cosmos/gov/v1/params/tallyingveto_threshold0.334 (of participating, including abstain in the veto denom per cosmos-sdktally.go)Proposal 12223 (passed) still: abstain largest bucket; yes/non-abstain ≈ 52.6%.
Snapshot GraphQL
https://hub.snapshot.org/graphqlspaceuniswapgovernance.eth:voting.quorum10_000_000,privacy""(not Shutter), period 432000s[Temp Check] - Four for V4id0x5ae3426216321df66a67eb677874b725f80e51888ad2da72b382b21669c554ee:scores_total5_349_527.58, quorum 10_000_000, votes 118, scores[5347713.99, 0, 1813.59]— For/Against/Abstain. Failed quorum while essentially unanimous For.veyfi.eth/curve.eth/lido-snapshot.eth:privacyempty.ens.eth:privacy"any".Primary sources (fetched)
quorumVotes = 400000e18github.com/EOSIO/eosio.contracts@52fbd4ac7e/contracts/eosio.system/include/eosio.system/eosio.system.hppSecond-pass deepen
Close #13 when the doc (including §15) is merged. File follow-ups only from §12 with maintainer approval.
Second-pass fold-in from parallel case reviews. Hybrid recommendation unchanged (1:1 weight, quorum on registered freeze-set, roll hygiene, hide-until-close ≠ secret ballot, veto as a role). New evidence now in
docs/GOVERNANCE_RESEARCH.md§15.8 (local tree; not merged yet). No schema/API/UI. Private chat not quoted.advisory: true. https://www.coindesk.com/markets/2026/07/07/bonk-faces-usd20-million-treasury-drain-after-attacker-spends-usd4-million-to-pass-malicious-proposalanti-whaledocs admit wallet-split farming. Golden Boys 2024: linear weight made the capture visible.Still not filed: §12 sketches 6–8.