跳到正文
← 使用教程

Safe 怎么核对所有者、阈值和模块?

链小知 · 进阶 · 核验 · 依官方文档整理

检查多签账户的实际控制路径,避免仅凭 3/5 标签判断资金权限。

开始前准备

  • 准备 Safe 合约完整地址、部署网络、查询时间和能核对的部署/实现版本资料;另一网络的同地址状态不能替代。
  • 适用官方 getOwners、getThreshold、getModulesPaginated 方法;按实际部署 ABI 和 2026-10-11 文档核对,第三方模块另查其规则。
  • 只读不需 owner 签名或网络费;不添加 owners、不改阈值、不启停模块、不签署队列提案。

1. 确认正确网络和 Safe 状态读取对象

从 app.safe.global 打开该网络下的 Safe,对照完整合约地址,再在该链浏览器打开同地址,保存两个 URL。显示名称可自定义,不能凭名称或标签认定身份。

确认读取 Safe 代理账户自身状态,记录能核明的实现/部署版本;版本或 ABI 未识别时标未知。singleton/implementation 的 owners 不是目标 Safe 的 owners,不能读错对象后继续报告。

检查结果:网络、Safe 地址及读取对象一致,版本已核明或明确未知。

2. 同时核对完整 owners 和当前阈值

Settings > Owners 逐一保存完整 owner 地址;Settings > Setup 查看 Required Confirmations。只查看,不点击添加或提交。名称与地址混在一起时,展开或复制完整地址。

在同 Safe 地址的 Read as Proxy 或正确 ABI 只读入口查询 getOwners()、getThreshold(),无参数返回 owner 数组和阈值 m。数组数为 n,写成 m/n,并与页面比对;差异检查网络、时间和缓存,不挑较好看的数值。

检查结果:保存数组、n、m 和时间;m 应在 1 至 n,异常和读取失败保持待核。

3. 给模块分页设置明确参数

找到 getModulesPaginated。第一页 start 输入 0x0000000000000000000000000000000000000001,pageSize 可取 50(正整数)。保存返回 array 和 next;哨兵地址是查询起点,不是资产接收地址。

接口要求 start 是模块或 0x1 起点,pageSize 大于零。参数非法、ABI 不匹配或 RPC 错误时记录错误,不能把它当空数组。缺少方法时标模块未读取,不在 Write Contract 尝试改状态。

检查结果:第一页参数和返回可复现,空数组也须伴随成功读取和 next 才能解释。

4. 沿 next 取完全部分页

next 为 0x0000000000000000000000000000000000000001 时结束;否则将它原样作为下一次 start,保持 pageSize,追加 array,直到结束。保存每页输入、输出与顺序,去重不删除原始记录。

模块可能在查询时变化。出现指针循环、结果前后不同或中途失败,停止全量结论并记录时间区间;有同一区块只读能力时固定区块,没有就说明为一段时间的观察。

检查结果:每页成功且取得结束指针才说完整;未取完写已读模块与缺口,不写无其他模块。

5. 逐个核对模块独立的控制规则

每个 enabled module 记录全地址,追溯官方说明与实现,核对谁可触发、资产/调用目标、额度、期限或停止条件;审计资料需与部署版本对应。未知地址仅列待查,不凭名字猜权限。

官方文档说明模块能使用独立访问规则并绕过常规 owner 签名验证,所以 3/5 只覆盖 owner 路径。模块 admin、消费限额或周期支付路径应另行描述,本篇不执行调用,也不凭应用能显示就判断安全。

检查结果:owner 与每个模块控制路径分列,未知权限和未匹配版本的审计均标待核。

6. 区分队列提案和当前生效状态

owner/threshold 更新会进入交易队列;提案出现或集齐签名不代表状态已改变。变更需成功执行回执,再重新读取 owners、threshold 和 modules 后才确认生效。

本检查不执行变更。交付网络、地址、版本范围、owners、阈值、完整分页及模块规则;guards、fallback handler 和全部升级路径未在本篇完整审计。本篇作者没有真实账户读取回执或变更验收。

检查结果:报告基于已读状态,待执行、版本未知、读取失败和其他控制组件待查分别标明。

怎样确认完成

  • Safe 网络、地址、版本范围、完整 owners 和阈值可复查。
  • 每页 start/pageSize/array/next 保留,得到结束指针才确认全量模块。
  • 未知控制规则明确;作者 documentation,没有真实只读回执、签名或完整安全审计。

常见错误与边界

  • 实现地址状态不能代替目标 Safe 代理状态。
  • 阈值仅覆盖 owner 路径,模块可用另一套访问规则。
  • 0x1 为分页哨兵,参数错误和未读完不代表无模块。
  • 提案、签名数和页面访问不能证明变更生效。

本教程根据官方资料整理,尚未完成逐步操作验收。界面、支持范围及费用变化时,先核对官方说明。 纯文本版 · 提交纠错依据