Sovereign DAO

L1-native governance for eight genesis brand domains — soulbound-weighted votes, on-chain treasury, signed proposals. Not upgradeable EVM GovernorBravo as canonical truth.

LIVE · local / PM2 Public docs · this page dao.troptions.org · DNS pending

Why we built it

FTH operates multiple live brand surfaces (Academy, TTN, Exchange OS, real estate, solar). Each needs governance without capturable upgradeable contracts — where a token dump or proxy admin cannot seize namespace or treasury policy overnight.

Brand domains need sovereign policy Eight genesis issuers in dao/registry/genesis_brands.json map Exchange OS, Academy, TTN, and platform domains to L1 soulbound issuers — not a generic DAO template.
Identity, not plutocracy Soulbound credentials = voting weight. Weight is non-transferable attestations, not tradeable governance tokens alone.
Treasury on L1 Canonical balances and disbursement paths live in the Rust governance + state crates — SQLite in dao-service is audit mirror only.
Signed audit trail dao_submit_proposal, dao_cast_vote, dao_execute require Ed25519 signatures — verifiable in signed_dao_submit.rs.
Full triad with SNP + x402 Post-quantum identity (Sovereign Namespace Protocol) + agent commerce (x402 / ATP) + on-chain governance (this DAO ↔ L1). Together they complete operator-grade sovereign infrastructure in this monorepo.

Architecture

L1 at :9944 is source of truth. Python orchestration mirrors for dashboards; EVM Governor stubs in dao/contracts/ are Phase 2 only.

┌─────────────────────────────────────────────────────────────────┐
│  SNP (identity roots)          x402 (agent commerce)            │
└────────────┬───────────────────────────────┬────────────────────┘
             │                               │
             ▼                               ▼
┌────────────────────────  TROPTIONS L1  :9944  ─────────────────────┐
│  governance crate · soulbound votes · timelock · treasury RPC      │
│  dao_getProposals · dao_submit_proposal · dao_cast_vote · execute  │
└────────────┬──────────────────────────────────────────────────────┘
             │ JSON-RPC read + signed submit
             ▼
┌──────────────── dao-service :8093 ────────────────────────────────┐
│  FastAPI · WebSocket /ws · SQLite audit mirror · L1 light client   │
│  serves frontends/dao-dashboard (reads L1 directly in app.js)    │
└───────────────────────────────────────────────────────────────────┘
             │
             ▼
   draft → active → passed|failed → [timelock 720 blocks] → executed
L1 node:9944
dao-service:8093
FTH Academy:8091 /dao/*
Dashboardlocal UI

L1 RPC methods

Read (query)

MethodRole
dao_getProposalsList on-chain proposals
dao_getVotesVotes for a proposal_id
treasury_getBalanceTreasury by chain / asset
get_soulbound_credentialsCredential set for voter weight

Submit (signed Ed25519)

MethodRole
dao_submit_proposalCreate proposal on L1
dao_cast_voteSoulbound-weighted vote (for / against)
dao_executeExecute after timelock

HTTP mirror at GET/POST /dao/* on port 8093. Sign payloads with scripts/l1-gov-sign.py.

DAO dashboard

The interactive dashboard is not embedded on GitHub Pages (no public TLS to your operator host). Run locally after bootstrap:

🟪

Run locally: .\scripts\bootstrap-dao.ps1 then open http://127.0.0.1:8093
Static UI: frontends/dao-dashboard/ — proposals, treasury, L1 live panel via WebSocket.

Genesis brand issuers (8)

DomainPurpose
TROPTIONSXCHANGE.IOExchange OS
TROPTIONS-UNIVERSITY.COMFTH Academy
TROPTIONSTelevisionNetwork.TvTTN Sports
HOTRCW.COMTTN
TROPTIONS.IO / TROPTIONS.ORGPlatform
TheRealEstateConnections.comReal Estate
Green-N-Go.SolarSolar Platform

Status

SurfaceState
L1 + dao-service (PM2)LIVE on operator host
Public investor / docsLIVE — this page on GitHub Pages /dao/
dao.troptions.orgPIPELINE — nginx template ready; DNS not pointed

Honest gaps

  • Public TLS edge for writes — production needs API_KEYS / signed relayer, not open submit from internet
  • dao.troptions.org does not resolve — use Pages /dao/ until DNS cutover
  • Dashboard requires local stack — not iframe-hosted on static Pages

Run & verify