蜜罐、增发、可暂停转账:新币合约的 8 个致命权限
买进去卖不出来,是最贵的一种教训。
这类合约风险有个共同特征:在买入时完全看不出来。K 线正常,成交量正常,社区活跃。问题只在你想卖出的那一刻才暴露。
这篇把常见的致命权限逐条拆开,说清后果和识别方法。
一、蜜罐(Honeypot)
后果:能买,不能卖。或者只能卖一部分。
实现方式:合约在 transfer 函数里加了判断——如果收款地址是流动性池,直接回滚交易。你发起卖出,链上显示失败,gas 照扣。
变种:
- 只允许白名单地址卖出
- 卖出超过一定金额就失败
- 前 N 笔交易可以卖,之后锁死
识别:静态看代码很难,因为判断条件可以写得很隐蔽。实用方法是模拟交易——用工具在链上模拟一次卖出,看是否成功。GoPlus、Honeypot.is 这类服务做的就是这件事。
重要提醒:蜜罐检测不是 100% 可靠。有些合约设置了触发条件(比如"流动性撤走后才启用"),模拟时看不出来。
二、可暂停转账(Transfer Pausable)
后果:项目方一键冻结所有转账,你的币卡在钱包里。
实现方式:合约里有 paused 状态变量,owner 可以切换。暂停后所有 transfer 直接失败。
为什么危险:这比蜜罐更隐蔽。上线初期 paused = false,一切正常。等项目方收够了,一键暂停。
识别:查合约是否有 pause / paused 相关函数或修饰符。有的话,看 owner 是谁、是否已放弃权限。
三、可增发(Mintable)
后果:项目方可以无限印币,你的持仓被稀释到接近零。
实现方式:mint 函数未移除,且 mintAuthority 未放弃。
典型剧本:拉盘 → 增发 → 砸盘 → 跑路。
识别:
- Solana:查
mintAuthority是否为空地址
(11111111111111111111111111111111 表示已放弃)
- EVM:查合约是否有
mint函数,以及 owner 权限状态
四、黑名单(Blacklist)
后果:项目方可以把你的地址拉黑,你的币直接变废纸。
实现方式:合约维护一个地址黑名单,transfer 时检查。在黑名单里的地址既不能买也不能卖。
与"可暂停转账"的区别:暂停是全冻结,黑名单是精准打击。后者更常用于针对性地收拾某些持有者。
识别:查合约是否有 blacklist / isBlacklisted 相关逻辑。
五、owner 可改余额(Owner Change Balance)
后果:项目方可以直接修改任意地址的持币数量。
实现方式:合约里有直接写 balanceOf 映射的函数。
为什么这条最恶劣:蜜罐、增发至少还有规则。这条是纯粹的无规则——项目方可以给你账户加币,也可以清零。
识别:查合约是否有绕过 transfer 直接修改余额的函数。
六、高买卖税(High Tax)
后果:每一笔交易被抽走 10%–50%。
实现方式:transfer 时把一部分代币转给项目方地址。
变种:
- 固定税率
- 可修改税率——上线时 0%,热度起来后调到 50%
- 个人税率——只对你收高税,对项目方自己的地址免税
识别:
- 看合约是否有税率设置函数
- 看税率是否"可修改"
- 实际测试:小额买入再卖出,算实际损耗
税率超过 10% 就该警惕。可修改的税率,即使当前是 0%,也等于给了项目方一把随时能用的刀。
七、隐藏 owner(Hidden Owner)
后果:看起来已放弃权限,实际还有个后门地址控制着合约。
实现方式:owner 检查逻辑里塞了额外的地址,或者通过代理合约间接控制。
识别:需要读代码。有经验的人会去找 onlyOwner 修饰符的实际实现,看是否有多个地址可通过。
八、代理合约(Proxy Contract)
后果:合约逻辑可以随时被替换。
机制本身是中性的——升级代理是正规做法。但在新币场景下,它意味着项目方可以在你买入后,把整个合约逻辑换成任意内容。
识别:查合约是否有 delegatecall / 代理模式。
优先级排序
把上面八条按危险程度排个序,实际使用时按这个顺序查:
| 优先级 | 风险 | 处理 |
|---|---|---|
| 1 | 蜜罐 | 检测到直接放弃 |
| 2 | 可暂停转账 | 检测到直接放弃 |
| 3 | owner 可改余额 | 检测到直接放弃 |
| 4 | 黑名单 | 检测到直接放弃 |
| 5 | 可增发 | 看是否已放弃权限 |
| 6 | 高税率 / 可改税率 | 看当前值 + 是否可改 |
| 7 | 隐藏 owner | 难度高,作为加分项 |
| 8 | 代理合约 | 中性,记录即可 |
前四条是一票否决。后面四条根据具体情况判断。
自动化检测怎么做的
ChainSentry 的流程是这样的:
新池子出现
↓
提取 base token 地址
↓
Solana → RugCheck EVM → GoPlus
↓
命中致命项? ── 是 ──→ 直接丢弃,不推送
│
否
↓
附加风险标签 → 推送
具体检测项:
Solana(RugCheck)
- mint authority 是否放弃
- freeze authority 是否放弃
- LP 锁仓比例
- 持币集中度
EVM(GoPlus)
is_honeypot蜜罐cannot_sell_all无法全部卖出transfer_pausable可暂停转账is_blacklisted黑名单is_mintable可增发owner_change_balanceowner 可改余额hidden_owner隐藏 ownerslippage_modifiable税率可改personal_slippage_modifiable个人税率可改- 实际买入/卖出税率
检测到致命项,信号直接被丢掉。不推送,不是标注后推送。
一个必须说明的局限
查询失败不等于安全。
新上线的代币,第三方检测服务往往还没建立索引。RugCheck 对新币经常返回「无法生成报告」。这时正确的做法是标注「风险未检测」,而不是默认「低风险」。
这个区别很重要。有些工具在查不到数据时显示绿色,那是严重的误导。
ChainSentry 的处理是:查不到就明确写「风险未检测」。宁可让用户知道信息缺失,也不给一个虚假的安全感。
最后
这些检测能过滤掉大部分明显的骗局,但不能替代你自己的判断。
任何第三方检测都有滞后性和盲区。合约可以通过代理升级,检测服务的规则也在被动跟随。
把风险检测当作过滤网,不是许可证。