ERC-5005 Zodiac:DAO 金库的头像、模块与守卫怎么拆装
一个社区金库今天用多签管 NFT,下个月想加时间锁,季度末还要接入投票系统——每加一层控制,传统做法都是要么烧进原合约,要么再套一层新合约,账户之间的资产搬家还得全社区见证。2022 年 4 月 14 日创建的 ERC-5005 试图把可编程账户拆成标准零件,提案用了个占星座的名字 Zodiac。它现在停在 Stagnant 状态,但它描述的组装思路,早已在各类 DAO 工具栈里以事实标准的形态运行了好几年。
四种零件与它们的接线柱
按原文定义:头像是那个真正持有资产、执行交易、代表组织的合约地址,必须实现 IAvatar 接口;模块是被头像启用的合约,负责具体的执行逻辑,比如按投票结果转账;修饰器夹在模块与头像之间,负责改行为,比如给模块的每次调用强制加一段延迟,或者限制能发起的交易范围;守卫则可以挂在模块或修饰器上,对每笔交易做前置与后置检查,例如限定可调用的地址与函数清单,或者保证某些状态永远不被改动。守卫实现 IGuard 接口,想被守卫保护的头像、模块与修饰器必须继承 Guardable,并在触发执行前后分别调用 checkTransaction 与 checkAfterExecution。
事件层是审计者的抓手:启用和禁用模块发 EnabledModule 与 DisabledModule,模块发起的执行成败分别落 ExecutionFromModuleSuccess 与 ExecutionFromModuleFailure,换守卫发 ChangedGuard。头像侧还提供 enableModule、disableModule、isModuleEnabled、getModulesPaginated,模块列表按链表存储。动机的表述很直白:过去的可编程账户把授权和执行焊在一起,换一个工具等于换一整套系统,标准化接口后控制手段可以并排启用,治理也能随社区成熟度逐级去中心化。标准文本本身停在 Stagnant,但这不妨碍模块化账户在生态里以各框架自研接口的形态广泛存在——头像加模块的架构早已是行业常识,只是各家接口细节没有统一成同一份 ERC 文本,这种标准与实践的错位本身就是这一层的现状注脚。

库管视角下的拆装学
拿一个持 NFT 的国库账户对照:头像地址不变,藏品所有权不搬家,是所有模块共用的前提;想开自动挂单能力就启用一个市场模块,想给大额支出加冷静期就套一个延迟修饰器,想禁止模块碰任何授权调用就挂一个守卫。每一件都是可拆卸的,拆除动作本身会发事件,链上可查。风险也随灵活性一起到货:模块能做什么由它自己的代码决定,启用一个模块就是信任一段新合约,事件里多出的每一次 ExecutionFromModuleSuccess 背后都可能是一段没人读过的代码。模块化还带来一个记账视角的变化:过去问这个金库能不能转走一枚 NFT,答案等于多签成员名单;现在同样的问题要拆成三层——头像的 owner 配置、当前启用的模块集合、守卫有没有拦住相应调用。审计一个 Zodiac 风格账户的支出权限,等于读一份由多个独立合约拼出来的程序,任何一环都可能在两次治理投票之间被替换。
对参与 DAO 库管的读者,这份提案留下的操作常识是:判断一个金库账户的安全模型,不要只看它部署在哪个框架,去链上数它的已启用模块列表、读每一个模块地址的源码、确认守卫是否存在且真的被调用——接口约定了 checkTransaction 必须先于执行发生,但合约有没有真的这么做是代码问题不是标准问题。零件化的好处是自由,代价是没人替你定义这组零件合起来意味着什么。本文为机制说明,不构成任何投资建议。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。