DAO(去中心化自治组织)的治理,本质是回答三个问题:谁来决策、怎么投票、如何执行。成熟的 DAO 治理栈已经标准化:治理代币定权重、Snapshot 做链下提案与投票、多签 + 时间锁作为链上执行闸门、Governor 合约把投票结果变成链上动作。
本文按治理链路系统讲解:治理代币与投票权设计 → Snapshot 链下投票 → 链上 Governor 合约 → 多签与时间锁的权限分层 → 委托与投票权市场 → 治理攻击与防御。
前置:/defi-protocols/(代币与协议)、/smart-contract-development/(合约)、/blockchain-security/(安全)。
目录
- 1. 治理全景:决策的三段链路
- 2. 治理代币与投票权设计
- 3. 链下投票:Snapshot 提案与投票
- 4. 链上执行:Governor 合约
- 5. 多签与时间锁:执行闸门
- 6. 委托投票与投票权
- 7. 治理攻击与防御
- 8. DAO 治理的安全审计
- 9. 治理的工程实践建议
- 10. 速查表与一句话记忆
- 延伸阅读
1. 治理全景:决策的三段链路
提案(Propose)→ 投票(Vote)→ 执行(Execute)
│ │ │
谁能提提案? 谁能投票? 结果如何落地?
代币门槛 代币权重 链上 Governor / 多签执行
| 阶段 | 链下 | 链上 |
|---|---|---|
| 提案 | Snapshot(IPFS 存储) | Governor.propose |
| 投票 | Snapshot(链下签名) | Governor.castVote |
| 执行 | — | Timelock + Governor.execute / 多签 |
两种模式:
□ 全链上治理:提案/投票/执行都在链上(透明但 Gas 高)
□ 链下投票 + 链上执行:Snapshot 投票省 Gas,结果由多签/Governor 执行(主流)
认知:治理的 UX 与安全的平衡——链下投票让更多人参与(免 Gas),链上执行保证结果可验证(不可篡改)。
2. 治理代币与投票权设计
投票权重通常按治理代币余额:1 代币 = 1 票(或有质押加成)。
// 简单权重:直接按余额
function getVotes(address account, uint256 blockNumber) returns (uint256) {
return balanceOfAt(account, blockNumber); // 快照时点余额
}
关键设计决策:
| 决策 | 选项 | 影响 |
|---|---|---|
| 快照时点 | 提案时 vs 投票时快照 | 防「投票前临时买入」 |
| 质押加成 | 锁仓×N 权重 | 鼓励长期持有 |
| 上限 | 单地址权重上限 | 防巨鲸垄断 |
| 委托 | 可委托他人代投 | 提升参与率 |
| 时间锁 | 投票窗口 + 执行延迟 | 防闪电投票 |
代币在治理中的角色:治理代币是「权利凭证」而非「价值凭证」——别把治理权与投机高度绑定,否则投票质量受价格波动影响。
3. 链下投票:Snapshot 提案与投票
Snapshot 是主流链下投票平台:提案内容存 IPFS,投票用钱包签名(免 Gas)。
工作流:
1. 创建 Space(组织空间,绑定治理代币)
2. 提案:标题 + 正文(Markdown/IPFS)+ 选项
3. 投票窗口:开始/结束时间
4. 用户签名投票(off-chain,零 Gas)
5. 结果统计:按快照时点代币权重
6. 执行:将结果转链上(多签/Governor)
Snapshot 的优势与局限:
✓ 免 Gas、参与门槛低、支持多种投票策略(余额/质押/自定义)
✗ 链下投票结果本身「无约束力」——执行全靠 DAO 自觉/多签
✗ 依赖中心化平台可用性(可自建或迁链上)
注意:链下投票 + 链上执行的结合点,是 DAO 治理的信任关键——投票结果由谁、如何转成链上动作,必须预先定死。
4. 链上执行:Governor 合约
OpenZeppelin 的 Governor 系列是链上治理的标准实现:
import "@openzeppelin/contracts/governance/Governor.sol";
import "@openzeppelin/contracts/governance/extensions/GovernorSettings.sol";
contract MyGovernor is Governor, GovernorSettings {
constructor()
Governor("MyGovernor")
GovernorSettings(
1 days, // votingDelay:提案后多久可投票
3 days, // votingPeriod:投票窗口
0 // proposalThreshold:提案门槛(代币数)
)
{}
}
Governor 内置能力:
□ propose():提交提案(门槛校验)
□ castVote():投票(按 getVotes 权重)
□ execute():投票通过后执行目标调用
□ 法定人数(quorum)校验
□ 与 Timelock 集成:结果先进时间锁再执行
执行安全性:Governor 可执行的调用默认无权限——谁都能在通过后触发 execute(),因此目标函数必须只受时间锁/权限控制,防「抢先执行」。
5. 多签与时间锁:执行闸门
多签(Multisig):M-of-N 签名才能执行操作。时间锁(Timelock):批准后延迟 T 时间才可执行,给持有人撤回过错决策的机会。
经典权限分层:
┌────────────────────────────────────┐
│ Governor(治理投票) │
│ └── propose 进入 Timelock 队列 │
│ Timelock(延迟执行,可被取消) │
│ └── 到期 execute │
│ Multisig(紧急/初始配置权限) │
│ └── 可暂停、可升级、可取消危险提案 │
└────────────────────────────────────┘
时间锁的威力:
□ 提案通过 → 排队进入 Timelock(如 2 天)→ 到期执行
□ 发现提案有恶意 → 时间锁窗口内取消
□ 用户有时间退出(escape hatch)
常见事故来源:多签私钥管理(签名者失联/被盗)、时间锁参数过短(来不及反应)。
记忆:治理的「信任落地」= Governor 投票决定 + Timelock 缓冲 + Multisig 兜底——三层把「多数人决定」与「少数人紧急」分开。
6. 委托投票与投票权
委托(Delegation):持币人把投票权交给他人(代表),是提高参与率的成熟机制。
// ERC20Votes 内置委托
token.delegate(delegatee); // 委托给某地址
为什么需要委托:
□ 大部分持币人不愿参与每笔投票
□ 专业代表持续跟踪提案、提升治理质量
□ 与小团体(如 Maker)联动形成治理生态
投票权代币化(如 veCRV):锁定代币获得投票权 + 收益分成,veTokenomics 把治理权与长期承诺绑定(见 tokenomics 文章)。
委托的坑:
□ 代表寻租/勾结 → 治理攻击
□ 持币人把权委托给不透明实体
□ 冷启动参与度低 → 治理空洞
7. 治理攻击与防御
| 攻击 | 手法 | 防御 |
|---|---|---|
| 闪电贷投票 | 借币投票后归还,影响结果 | 快照时点/时间锁延迟 |
| 女巫攻击 | 大量小号持币分散投票 | 质押权重、KYC 门槛 |
| 贿选 | 私下付费买投票 | 私密投票(zk)、防分叉 |
| 治理捕获 | 少数巨鲸联合操控 | 权重上限、去中心化委托 |
| 重入执行 | 抢先 execute 恶意调用 | Timelock + 权限白名单 |
防御最佳实践:
□ 投票窗口与快照错开(防临时买入)
□ 大额决策时间锁至少 48-72h
□ 权重设上限 + 鼓励委托分散
□ 关键参数(金库/合约权限)必须 Timelock
□ 私密投票:对贿选敏感的场景用 zk 投票
记忆:治理的敌人是「速度与集中」——闪电贷投票靠延迟挡、巨鲸垄断靠上限挡、贿选靠私密性挡。
8. DAO 治理的安全审计
审计 DAO 治理栈,重点检查:
□ Governor 参数:quorum 是否可被绕、提案门槛是否被操控
□ Timelock:延迟是否足够、谁能取消/加速
□ Multisig:签名者权限、私钥冷存储、轮换机制
□ 代币快照:getVotes 是否被外部合约影响
□ 执行调用:execute 目标是否受限、有无 reentrancy
□ 升级权限:治理合约本身能否被无 Timelock 升级
检查清单(上线前逐项过):
□ 权限矩阵:谁能 propose / vote / execute / upgrade / pause
□ 时间锁覆盖所有「高风险操作」
□ 多签签名者 ≥ 3 且异地冷存
□ 所有资金转移有 escape hatch
9. 治理的工程实践建议
给 DAO 的落地建议:
□ 从「多签治理」起步:小规模用多签,别一上来就全链上 Governor
□ 渐进去中心化:先核心团队多签,再逐步过渡到代币治理
□ 快照 + 多签是最稳的 MVP:免 Gas 投票,多签执行
□ 治理文档先行:提案模板、投票流程、执行清单
□ 监控治理事件:投票开始/结束、执行、取消都告警
给开发者的集成建议:用 OpenZeppelin Governor + Timelock 组合(GovernorTimelockControl)开箱即用;Snapshot 用官方 API 或自建投票策略。
10. 速查表与一句话记忆
| 环节 | 工具/机制 |
|---|---|
| 提案 | Snapshot / Governor.propose |
| 投票 | Snapshot 链下 / Governor 链上 |
| 权重 | 代币余额 / veToken / 质押加成 |
| 执行 | Governor.execute + Timelock |
| 紧急权限 | Multisig(M-of-N) |
| 参与提升 | 委托投票 |
| 防闪电贷 | 快照错峰 + 延迟 |
| 防巨鲸 | 权重上限 |
| 防贿选 | 私密投票 |
| 安全 | 权限矩阵 + 审计清单 |
一句话记忆:DAO 治理三段链——代币定权重、Snapshot 省 Gas 投票、Governor + Timelock + Multisig 把结果落地;闪电贷靠延迟、巨鲸靠上限、贿选靠私密——「谁执行」与「能否撤回」是治理安全的两条命脉。
延伸阅读
- /defi-protocols/ — 治理代币与协议经济
- /smart-contract-development/ — Governor 合约开发
- /blockchain-security/ — 治理攻击面
- /blockchain-tokenomics-design/ — veTokenomics 与投票权
- /blockchain-account-abstraction/ — 钱包抽象与 DAO 交互
- [[blockchain-web3]] — 区块链 Web3 专题
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。