Skip to content

DAO 治理 v2 (dao)

Headless 命令 — 不依赖桌面 GUI,直接使用核心包运行。适用于服务器、CI/CD、容器化等无桌面环境。

核心特性

  • 📜 提案管理: 创建和管理治理提案,支持描述和投票周期配置
  • 🗳️ 二次方投票: 支持 simple 和 quadratic 两种投票模式,二次方投票成本 = Math.sqrt(weight)
  • 🤝 投票委托: 将投票权委托给其他参与者,支持权重分配
  • ⚙️ 自动执行: 通过的提案可自动执行,支持执行延迟配置
  • 💰 国库管理: 查看国库余额和资金分配记录
  • 📊 治理统计: 提案总数、活跃提案、执行率、委托关系等指标

概述

ChainlessChain CLI DAO 治理 v2 系统为去中心化社区提供了完整的链上治理能力。通过 propose 创建治理提案,社区成员可以使用 vote 进行投票。系统支持两种投票模式:简单多数投票(simple)和二次方投票(quadratic)。二次方投票中,投票成本按 Math.sqrt(weight) 计算,有效防止投票权集中。

delegate 允许将投票权委托给信任的代表。当提案通过后,execute 触发自动执行。treasuryallocate 管理社区国库资金的查看和分配。configure 可调整投票周期、法定人数和执行延迟等治理参数。

命令参考

dao propose — 创建治理提案

bash
chainlesschain dao propose <title>
chainlesschain dao propose "增加开发基金" -d "将国库 20% 分配给核心开发" -p alice
chainlesschain dao propose "升级协议" --voting-type quadratic

创建一个治理提案。支持 --voting-type 选择投票模式(simple 或 quadratic)。

dao vote — 投票

bash
chainlesschain dao vote <proposal-id> <direction>
chainlesschain dao vote prop-001 for -v alice -w 5
chainlesschain dao vote prop-001 against --voter bob --weight 3

对指定提案投票,direction 为 foragainst--weight 设置投票权重。

dao delegate — 委托投票权

bash
chainlesschain dao delegate <delegator> <delegate-to>
chainlesschain dao delegate alice bob -w 2

将 delegator 的投票权委托给 delegate-to,支持 --weight 指定委托权重。

dao execute — 执行提案

bash
chainlesschain dao execute <proposal-id>
chainlesschain dao execute prop-001

执行已通过的提案。提案须满足法定人数且投票周期已结束。

dao treasury — 查看国库

bash
chainlesschain dao treasury
chainlesschain dao treasury --json

显示国库余额和历史资金分配记录。

dao allocate — 分配国库资金

bash
chainlesschain dao allocate <proposal-id> <amount>
chainlesschain dao allocate prop-001 500 -d "核心开发基金第一期"

将国库资金分配给指定提案,需附带分配说明。

dao stats — 治理统计

bash
chainlesschain dao stats
chainlesschain dao stats --json

显示治理统计信息:提案总数、活跃提案、已执行提案、委托数量、国库余额。

dao configure — 配置治理参数

bash
chainlesschain dao configure --voting-period 604800000 --quorum 0.5 --execution-delay 86400000

更新治理配置:投票周期(毫秒)、法定人数比例(0-1)、执行延迟(毫秒)。

配置参考

bash
# CLI 命令选项
dao propose <title>
  -d, --description <text>   # 提案描述
  -p, --proposer <id>        # 提议者 ID
  --voting-type <mode>       # simple | quadratic (默认 simple)

dao vote <proposal-id> <for|against>
  -v, --voter <id>           # 投票者 ID
  -w, --weight <n>           # 投票权重 (二次方模式下成本为 sqrt(weight))

dao delegate <delegator> <delegate-to>
  -w, --weight <n>           # 委托权重

dao configure
  --voting-period <ms>       # 投票周期 (默认 7 天 = 604800000)
  --quorum <ratio>           # 法定人数比例 (0-1, 默认 0.5)
  --execution-delay <ms>     # 执行延迟 (默认 1 天 = 86400000)

# 全局通用
--json                       # 输出 JSON 格式

# 数据库配置
# ~/.chainlesschain/dao-v2.db (SQLite)
# 表: dao_v2_proposals / dao_v2_votes / dao_v2_treasury / dao_v2_delegations

性能指标

操作目标实际状态
提案创建< 50ms~20ms
投票写入 (含签名验证)< 100ms~45ms
提案执行检查 (法定人数)< 50ms~15ms
treasury 国库查询< 30ms~10ms
stats 统计聚合< 100ms~40ms

数据库表

表名说明
dao_v2_proposals提案(标题、描述、提议者、状态、投票类型、结束时间)
dao_v2_votes投票记录(提案 ID、投票者、方向、权重)
dao_v2_treasury国库(余额、分配记录、描述)
dao_v2_delegations委托记录(委托方、受委托方、权重)

系统架构

用户命令 → dao.js (Commander) → dao-governance.js

                ┌──────────────────────┼──────────────────────┐
                ▼                      ▼                      ▼
          提案管理                  投票引擎                国库管理
      (创建/执行)          (simple/quadratic)        (余额/分配)
                ▼                      ▼                      ▼
     dao_v2_proposals          dao_v2_votes           dao_v2_treasury
                               dao_v2_delegations

关键文件

  • packages/cli/src/commands/dao.js — 命令实现
  • packages/cli/src/lib/dao-governance.js — DAO 治理库

测试覆盖率

packages/cli/__tests__/
├── unit/
│   └── ✅ dao-governance.test.js      # 核心引擎:提案/投票/委托/执行
└── integration/
    └── ✅ cli-dao.test.js             # CLI 命令路径覆盖
  • 提案生命周期: propose → vote → execute 完整链路
  • 投票模式: simple 与 quadratic 两种模式
  • 委托链: 多层委托、权重传递
  • 国库与统计: treasury / allocate / stats 路径

故障排查

Q: dao vote 报错 "voter already voted on this proposal"?

同一 voter 对同一提案只能投一次票。若需变更立场,请先检查提案是否仍在投票周期内(dao stats 查看 active 列表),并通过新的子账号投票或等待新提案。

Q: dao execute 提示 "quorum not reached"?

提案未达到法定人数。通过 dao configure --quorum 0.3 降低门槛,或等待更多投票者参与。注意 quorum 按 投票权重总和 / 全网权重 计算。

Q: 二次方投票权重与实际消耗不符?

quadratic 模式下成本 = Math.sqrt(weight),例如 weight=9 实际消耗 3 票资源。查看 dao_v2_votes 表中的 cost 字段确认实际扣除。

Q: 国库余额显示为 0 但有历史分配记录?

分配记录 (dao_v2_treasury) 与当前余额是两个字段。运行 dao treasury --json 查看 balanceallocations[] 明细,确认是否有充值记录缺失。

Q: dao configure 修改后新提案仍用旧参数?

configure 仅影响新创建的提案。已创建的提案在其生命周期内使用创建时快照的参数;如需迁移,请关闭旧提案后重新 propose。

使用示例

场景 1:创建提案并投票

bash
# 创建二次方投票提案
chainlesschain dao propose "社区基金分配方案" \
  -d "将国库 30% 分配至生态建设" \
  --voting-type quadratic

# 社区成员投票
chainlesschain dao vote prop-001 for -v alice -w 4
chainlesschain dao vote prop-001 for -v bob -w 9
chainlesschain dao vote prop-001 against -v carol -w 1

# 查看统计
chainlesschain dao stats

场景 2:委托投票与执行

bash
# Alice 将投票权委托给 Bob
chainlesschain dao delegate alice bob -w 3

# 执行通过的提案
chainlesschain dao execute prop-001

# 分配国库资金
chainlesschain dao allocate prop-001 1000 -d "生态建设基金"

# 查看国库
chainlesschain dao treasury --json

安全考虑

  • 投票唯一性: 同一投票者对同一提案只能投票一次
  • 二次方投票防操控: 投票成本随权重非线性增长,防止鲸鱼操纵
  • 国库审计: 所有资金分配记录不可删除,支持完整审计轨迹
  • 执行延迟: 提案通过后有执行延迟窗口期,给社区时间审查
  • 法定人数: 提案必须达到法定投票人数才能生效

相关文档

基于 MIT 许可发布