白皮书上写着:总量 2100 万枚,永不增发。

这句话可能是真的,也可能只是一句话。决定它是哪一种的,不是白皮书,是合约里有没有一个 mint() 函数、以及谁能调它。

而这件事你可以自己去看——它在链上,公开的。

第二十一篇讲了代币的供应结构,第二十二篇讲了收益的来源。这一篇讲验证

你在文档里读到的那些规则,在代码和链上真的是那样吗?谁有权改它?

尽调有三个层次,风险性质完全不同:

① 代币合约层 —— 这个代币本身能不能被增发、冻结、暂停
② 协议层     —— 这个 DeFi 协议的资金能不能被卷走
③ 平台层     —— 这个交易所会不会倒闭,倒了我排第几

这一篇覆盖的是不可逆损失类别,和第十四篇同级。

本文仅用于记录和普及基础知识,不构成投资建议。

一、代币合约的权限清单

打个比方

「ERC-20 标准」像一份合同模板的必填项。它规定了这份合同至少要包含哪几条——但它从来没说过不能再加别的条款

而附加条款写在正文里,和必填项混在一起,字号一样大。你以为你签的是一份标准合同,实际上你签的是"标准合同 + 对方自己加的七条"。

⚠️ 所以:一个 ERC-20 代币「就是那 6 个标准函数」是一个常见误解。发行方可以加任何东西。

而这里最该改掉的一个习惯是:“它是 ERC-20"这句话不构成任何保证。它只保证你能用标准钱包看到余额,不保证这个余额明天还归你

权限 函数特征 后果
增发 mint(),带 owner/minter 修饰 ⚠️ 供应上限失效,白皮书写的 2100 万可以变成任意数
销毁他人代币 burnFrom() 无授权检查 你的余额可以被直接抹掉
暂停 pause() / whenNotPaused 全部转账冻结,你卖不掉
黑名单 blacklist() / isBlocked 你的地址被单独禁止转账
转账税 transfer() 里扣一部分 每次转账被抽成,可能可调到 100%
可升级代理 Proxy + Implementation ⚠️ 今天审计过的代码,明天可以被整个换掉
交易开关 tradingEnabled 上线前禁止交易,可用于狙击控制

蜜罐(Honeypot)

最直接的骗局:能买,不能卖

实现方式很多——卖出时税率 100%、只有白名单能卖、卖出函数直接 revert。表现上,图表会一路上涨(因为只有买单能成交)。

在链上,「有人买入」不能证明「可以卖出」。 这是 第十五篇那句「成交数据只能测量已发生的事」的一个极端形式。

⭐ USDT / USDC 也有黑名单

这一点必须单独说,因为很多人以为这是山寨币特有的问题:

主流中心化稳定币的发行方,在合约层面拥有冻结指定地址的能力,并且已经实际使用过(通常配合执法请求)。

这不是漏洞,是设计。含义是:

  • 稳定币不是无记名现金。 你持有的是发行方的负债,而发行方保留了拒付特定地址的能力。
  • 收到一笔来源不明的稳定币,理论上可能使你的地址被牵连(见第八篇的制裁与污染资金)。

去中心化的超额抵押稳定币没有这个功能,但它们有别的风险(清算、抵押品质量——第十七篇)。没有一个选项是没有代价的,重要的是知道自己选的是哪一组代价。

权限归属:比「有没有权限」更重要

有增发权限本身不一定是问题——很多正当协议需要它。关键是谁掌握它,多久能动用

🔴 单个 EOA 地址(普通私钥)        —— 一把私钥决定一切
🟠 多签,但门槛低(如 2/3)且签名人不明 —— 好不了多少
🟡 多签 + 合理门槛 + 签名人公开      —— 可接受
🟢 多签 + 时间锁(Timelock)        —— ⭐ 你有时间反应
🟢 权限已放弃(renounce,owner = 0地址)—— 不可逆,但也意味着无法修复 bug

时间锁是这里最重要的一项。 它不阻止恶意操作,但它给了你在操作生效前退出的窗口——这是唯一一个把「信任」变成「时间」的机制。

二、审计报告怎么读

审计证明了什么

一份审计报告说的是:在某个时间点、对某个范围内的代码、按某种方法检查,发现了这些问题。

它不证明什么

❌ 常见误读 实际情况
「审计过了 = 安全」 审计有范围(scope),范围外的合约没看
「有审计 = 现在的代码被审过」 ⚠️ 可升级合约在审计后可以被替换
「大所审计 = 没风险」 被攻破的项目里很多有知名审计
「审计能防跑路」 ❌ 审计查代码漏洞,不查团队意图

⭐ 最重要的一条

第十七篇里那句话在这里再说一次:

Ronin 桥被攻破时,合约层面没有任何漏洞。被攻破的是信任假设本身(攻击者取得了 9 个验证者中的 5 个签名权)。

审计检查的是代码是否按设计工作,不检查这个设计是否值得信任。 这两件事完全不同,而后者往往才是真正的风险所在。

实际要看的

□ 审计报告的日期 vs 合约最后一次升级的时间
   → 升级在审计之后 = 这份报告已经过期
□ 审计范围里列出的合约地址,和你实际交互的地址一致吗?
□ 报告里的高危问题,标注为「已修复」的,去链上确认真的改了
□ 有没有多份独立审计?结论一致吗?

三、持有者分布:一个容易读错的数据

看代币持有者排行榜是好习惯,但不做地址识别就直接读,会得到完全错误的结论。

排行榜顶部通常混着这些:

地址类型 是不是「巨鲸」 说明
交易所热钱包 代表很多用户的存款总和
LP 池合约 是流动性,不是持仓
质押/归属合约 锁定的代币
跨链桥合约 另一条链上的映射储备
项目方金库 ⚠️ 是,但性质不同 通常多签控制
真实大户 需要排除以上才能识别

正确做法:用区块浏览器的地址标签功能先做标注,把已知实体剔除,再看剩下的分布。多数浏览器对主流交易所和常见合约都有标签。

⚠️ 反过来也要小心:一个人可以拆成 100 个地址。 分布看起来分散,不代表实际控制权分散。链上数据能证明「这些地址持有多少」,不能证明「这些地址属于不同的人」。

四、平台层:交易所尽调

储备证明(PoR)证明什么

主流交易所在 FTX 事件(2022 年 11 月)后陆续推出了储备证明,典型做法是 Merkle 树:

① 交易所把所有用户余额做成一棵 Merkle 树,公布根哈希
② 你可以用自己的记录 + 路径,验证「我的余额被包含在这棵树里」
③ 交易所公布其控制的链上地址余额
④ 如果 链上余额 ≥ 树里所有余额之和,则声称「100% 储备」

⭐ 它不证明什么——这才是重点

❌ 它不能证明 为什么
没有链下负债 ⚠️ 最关键的一条。 交易所可能欠着借款、有未平衡的衍生品敞口、有法律赔付义务。这些不在链上,无法验证。
资产不是借来的 快照是某一时刻的。理论上可以在快照前借入、快照后归还
地址真的由它控制 需要额外的签名证明(proof of control),并非所有 PoR 都包含
快照之后没被挪用 PoR 是周期性的,两次之间是黑箱
负债端是完整的 如果交易所在树里漏掉一部分用户负债,总和就偏小

所以真正需要的是什么

偿付能力 = 资产 − 负债

PoR 只验证了「资产」这一半,而且是快照。
「负债」这一半在链下,无法从链上证明。

储备证明是一个必要条件,不是充分条件。它能排除掉「资产明显不足」的情况,不能证明「有偿付能力」。

这个判断和第十九篇的否决式框架是一致的——它是用来排除的工具,不是用来放心的理由。

FTX 的结构性教训

不去复述事件经过,只提取可复用的结构:

🔴 交易所与关联方之间的资金流动,外部无法观察
🔴 用户资产与自营资产是否隔离,取决于内部制度而非外部机制
🔴 「用户资产是不是破产财产」取决于条款和辖区法律
🔴 高知名度、大规模、名人背书,与偿付能力无关

第四条值得强调,因为它直接反驳了最常见的选择依据。

平台选择清单

□ 注册辖区与持牌情况(第八篇)
□ 用户资产在条款里如何定性?破产时是不是破产财产?
□ 有无储备证明?包含控制权证明吗?频率多高?
□ 有无独立的第三方托管?还是自托管?
□ 提币是否顺畅(⚠️ 小额测试过,不代表大额和压力时刻)
□ 历史上有无停提、系统性宕机、插针后不回滚
□ 保险基金规模与 ADL 历史(第四篇)

五、协议层:DeFi 尽调

TVL 不是安全指标

TVL(锁仓总值)常被当成可信度证明,但:

  • 它可以由激励堆出来第二十二篇的排放),激励一停就走
  • 它可以被重复计算(同一份资金在多个协议间循环)
  • 它和安全性没有因果关系——被攻击的协议往往正是 TVL 高的,因为攻击收益大

撤池风险(Rug Pull)

项目方提供流动性 → 吸引买盘 → 撤走流动性 → 价格归零

对抗手段是 LP 代币锁定或销毁。要验证:

□ LP 代币在哪个地址?
□ 是锁定合约(有解锁时间)还是黑洞地址(不可逆)?
□ 锁定期什么时候到?
□ ⚠️ 锁的是全部 LP 还是一部分?

实际深度 ≠ TVL

第十五篇的「出场能力」在这里再次成为首要问题:

TVL 一亿,不代表你能卖出一百万而不造成巨大滑点。

AMM 的滑点由池子深度和曲线决定(第四篇的恒定乘积)。下单前应该直接模拟你的实际规模,看报价。

六、分层尽调清单

按投入产出排序——上面的几分钟就能做完,且能排除掉大多数问题。

🟢 第一层:5 分钟(任何标的都该做)

□ 合约地址从官方文档取得(⚠️ 不从搜索结果、不从群里的链接)
□ 区块浏览器上合约源码已验证(未验证源码 = 直接否决)
□ 搜 mint / pause / blacklist / owner 相关函数
□ 看是不是代理合约(可升级)
□ 持有者分布,先排除交易所和合约地址
□ FDV 与解锁情况(第二十一篇)

🟡 第二层:30 分钟(准备投入较大金额)

□ 权限归属:EOA / 多签 / 时间锁?门槛多少?
□ 审计报告日期 vs 最后升级时间
□ LP 锁定情况与到期时间
□ 协议真实收入 vs TVL(第二十二篇的分成上限)
□ 用你的实际规模在 DEX 上模拟报价,看滑点
□ 历史事件:有没有被攻击过、怎么处理的

🟠 第三层:持续(长期持有)

□ 订阅治理提案,关注权限变更
□ 定期复查合约是否被升级
□ 跟踪解锁日历
□ 关注监管变化(第八篇)

七、这一篇的结论

  • 尽调分三层:代币合约 / 协议 / 平台,风险性质完全不同。
  • ERC-20 不是标准化的保证。 发行方可以加增发、暂停、黑名单、转账税、可升级代理——每一项都能让你的持仓归零或卖不掉。
  • ⚠️ 蜜罐:能买不能卖。 图表一路上涨恰恰是它的表现形式。「有人买入」不能证明「可以卖出」。
  • USDT/USDC 在合约层面就有冻结能力,并且用过。 稳定币不是无记名现金,是发行方的负债。
  • 权限归属比权限本身重要。 排序:单私钥 🔴 < 低门槛多签 🟠 < 公开多签 🟡 < 多签+时间锁 🟢时间锁的价值是给你退出的窗口——它把信任问题变成了时间问题。
  • 审计有范围、有日期、不查团队意图。 ⚠️ 可升级合约在审计后可被替换。Ronin 被攻破时合约没有漏洞,被攻破的是信任假设——审计不检查设计是否值得信任。
  • 持有者排行榜不能直接读:交易所钱包、LP 池、桥合约、归属合约会混在顶部。反过来,一个人可以拆成 100 个地址。
  • 储备证明证明不了偿付能力。 偿付能力 = 资产 − 负债,而 PoR 只验证资产那一半,且是快照。链下负债无法从链上证明。 它是排除工具,不是放心的理由。
  • 高知名度、大规模、名人背书与偿付能力无关——这是最常见也最无效的选择依据。
  • TVL 不是安全指标。 它可以被激励堆出来、被重复计算,而且和安全性没有因果关系。
  • TVL ≠ 你的出场能力。 下单前用真实规模模拟报价。