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 触发自动执行。treasury 和 allocate 管理社区国库资金的查看和分配。configure 可调整投票周期、法定人数和执行延迟等治理参数。
命令参考
dao propose — 创建治理提案
chainlesschain dao propose <title>
chainlesschain dao propose "增加开发基金" -d "将国库 20% 分配给核心开发" -p alice
chainlesschain dao propose "升级协议" --voting-type quadratic创建一个治理提案。支持 --voting-type 选择投票模式(simple 或 quadratic)。
dao vote — 投票
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 为 for 或 against。--weight 设置投票权重。
dao delegate — 委托投票权
chainlesschain dao delegate <delegator> <delegate-to>
chainlesschain dao delegate alice bob -w 2将 delegator 的投票权委托给 delegate-to,支持 --weight 指定委托权重。
dao execute — 执行提案
chainlesschain dao execute <proposal-id>
chainlesschain dao execute prop-001执行已通过的提案。提案须满足法定人数且投票周期已结束。
dao treasury — 查看国库
chainlesschain dao treasury
chainlesschain dao treasury --json显示国库余额和历史资金分配记录。
dao allocate — 分配国库资金
chainlesschain dao allocate <proposal-id> <amount>
chainlesschain dao allocate prop-001 500 -d "核心开发基金第一期"将国库资金分配给指定提案,需附带分配说明。
dao stats — 治理统计
chainlesschain dao stats
chainlesschain dao stats --json显示治理统计信息:提案总数、活跃提案、已执行提案、委托数量、国库余额。
dao configure — 配置治理参数
chainlesschain dao configure --voting-period 604800000 --quorum 0.5 --execution-delay 86400000更新治理配置:投票周期(毫秒)、法定人数比例(0-1)、执行延迟(毫秒)。
配置参考
# 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 查看 balance 与 allocations[] 明细,确认是否有充值记录缺失。
Q: dao configure 修改后新提案仍用旧参数?
configure 仅影响新创建的提案。已创建的提案在其生命周期内使用创建时快照的参数;如需迁移,请关闭旧提案后重新 propose。
使用示例
场景 1:创建提案并投票
# 创建二次方投票提案
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:委托投票与执行
# 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安全考虑
- 投票唯一性: 同一投票者对同一提案只能投票一次
- 二次方投票防操控: 投票成本随权重非线性增长,防止鲸鱼操纵
- 国库审计: 所有资金分配记录不可删除,支持完整审计轨迹
- 执行延迟: 提案通过后有执行延迟窗口期,给社区时间审查
- 法定人数: 提案必须达到法定投票人数才能生效
相关文档
- Agent 经济系统 — 微支付与资源市场
- 钱包管理 — 数字资产钱包
- 组织管理 — 企业组织架构
