4. 代币安全审计 (Rug Check)

速度是矛,安全是盾

在 Solana 的土狗战场上,活下来比赚大钱更重要。 很多新手写出的机器人,速度极快,能在第 0 区块买入,但一天下来亏光了所有 SOL。原因很简单:他们买入的代币中,有 80% 是貔貅盘(无法卖出)或瞬间撤池子(Rug Pull)。

本章将深入解剖骗子的常用手段,并教你如何用代码构建防御系统。


4.1 硬编码风险:合约层面的陷阱

这些风险直接写在代币的 Mint 账户数据中,通过 RPC 的 getAccountInfo 即可查出。

1. 无限印钞权 (Mint Authority)

  • 原理:代币的 Mint Authority 字段如果不为 null,说明管理员有权随时凭空铸造新代币。
  • 骗局:代币价格上涨 10 倍后,管理员直接给自己铸造 10 亿枚代币,然后一次性抛售,池子瞬间归零。
  • 代码检测
    typescript
    const mintInfo = await getMint(connection, mintAddress); if (mintInfo.mintAuthority !== null) { return "RISK: 尚未放弃增发权"; }

2. 冻结黑名单 (Freeze Authority) —— 貔貅的核心

  • 原理:如果 Freeze Authority 存在,管理员可以冻结任意持有者的账户。
  • 骗局:你买入后,机器人检测到你是一条"大鱼",立即冻结你的账户。你只能看着 K 线涨,但点卖出时永远报错。
  • 代码检测
    typescript
    if (mintInfo.freezeAuthority !== null) { return "DANGER: 存在冻结权限 (极高貔貅风险)"; }

4.2 流动性陷阱:LP 锁定与撤池子

这是最令人困惑的概念,但必须理解。

什么是 LP Token?

当项目方在 Raydium 创建池子时,他们存入 Token + SOL。作为回报,Raydium 会给他们一张"存款凭证",这就是 LP Token谁持有 LP Token,谁就有权把池子里的钱取出来。

什么是 Rug Pull (撤池子)?

如果 LP Token 还在项目方手里,他随时可以调用 remove_liquidity,把池子里的 SOL 全部拿走,留下毫无价值的代币。

什么是"已锁池子" (Burnt / Locked)?

为了自证清白,项目方必须处理掉这些 LP Token:

  1. 销毁 (Burn):把 LP Token 发送到 11111111111111111111111111111111 或 Dead 地址。这是最安全的,意味着永远没人能撤池子。
  2. 锁定 (Lock):把 LP Token 发送到第三方锁定合约(如 Streamflow, PinkSale),锁定一定时间。

狙击机器人必须检查 Raydium 的 LP Token 账户余额是否为 0,或者 LP Token 是否被大量销毁。


4.3 筹码分布:老鼠仓与捆绑包

捆绑买入 (Bundled Supply)

现在的骗子很聪明,他们使用工具(如 Jito Bundle)在部署代币的同一笔交易中,用 10 个不同的新钱包买入 80% 的代币。

  • 表面看:Mint 权限放弃了,LP 烧了,好像很安全。
  • 实际上:前 10 个持币地址全是项目方自己人。
  • 结局:他们会分批砸盘出货。

检测策略

  1. 检查前 10 持币地址的 SOL 余额来源(是否来自同一个分发账户)。
  2. 计算前 10 持币占比。如果 > 30% ~ 50%,风险极高。

4.4 终极防御:交易模拟 (Simulation)

有些貔貅盘非常隐蔽,它们修改了合约逻辑(Token-2022 标准支持 Transfer Hook),或者在代码里写了 if (buyer == bot) revert。静态检查很难发现。

最有效的办法是:在买入前,先模拟一遍。

Solana 提供了 simulateTransaction API。你的机器人应该构建一笔"买入"交易,发给 RPC 进行模拟执行。

  1. 模拟买入:如果报错,说明合约有问题。
  2. 模拟卖出:更进阶的做法是,模拟买入后,立即在同一个模拟会话中模拟卖出。如果买入成功但卖出失败,100% 是貔貅
  3. 检查滑点:如果模拟结果显示,你买入 1 SOL,立刻卖出只能拿回 0.1 SOL(扣除 Gas 后),说明该代币有极高的转账税 (Transfer Fee)
typescript
// 伪代码:模拟交易防御 const simulation = await connection.simulateTransaction(transaction); if (simulation.value.err) { console.log("❌ 模拟执行失败,放弃买入"); return; } const logs = simulation.value.logs; if (checkLogsForHoneypot(logs)) { console.log("❌ 日志显示异常,可能是貔貅"); return; }

总结:安全评分卡

在右侧的交互式审计器中,我们模拟了一个简化的评分系统。一个合格的"金狗" (Gem) 应该满足:

  1. ✅ Mint Authority = null
  2. ✅ Freeze Authority = null
  3. ✅ LP Token 已销毁 (Burned > 95%)
  4. ✅ 前 10 持仓 < 30%
JSPlayground
EDITOR ACTIVE
Initializing JS Environment...

Security Auditor

Your code determines which tokens are flagged.