白皮书上写着:总量 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 ≠ 你的出场能力。 下单前用真实规模模拟报价。