大多数代币安全建议讲的是名声 —— 谁发的、群里什么样、官网真不真。★而这些,机器人在它拥有的两秒钟里一个都查不了。★
能查的是链上配置,而它回答的是一个更锋利的问题:不是"这是不是骗局",而是"我买了之后,别人还能对我做什么"。
组织起这一切的那个问题
★每一项有意义的检查,问的都是某个权限是否仍然存在。★
权限为 null 是一个永久保证。权限指向一把密钥,则是某人握着的一项能力。 ★当前状态远不如"谁还能改变它"重要。★
const mint = await getMint(connection, mintAddress);
const checks = {
// ★null 意味着没人能再增发★
mintAuthorityRevoked: mint.mintAuthority === null,
// ★null 意味着没人能冻结你的账户★
freezeAuthorityRevoked: mint.freezeAuthority === null,
supply: mint.supply,
decimals: mint.decimals,
};
一次账户读取两个都给你 —— 而对经典 SPL 代币来说,这已经是大部分答案了。
每项权限实际赋予什么
| 权限 | 如果它还在 |
|---|---|
| ★mint★ | ★可以无限增发,把你稀释到什么都不剩★ |
| ★冻结★ | ★对方能冻结你的代币账户 —— 你卖不掉★ |
| 元数据更新 | 名字和图片能改;只是外观 |
| ★永久委托方(2022)★ | ★无需你签名就从你账户里拿走代币★ |
| ★转账费配置(2022)★ | ★本来没有费用的地方可以冒出费用★ |
★冻结权限是一直被低估的那一个。★ mint 权限稀释你,这很糟。而冻结权限意味着别人可以在他选定的时刻让你的仓位卖不出去 —— 不同于稀释,这件事没有"部分发生"这个选项。
如果你的检查都通过了、交易还是会错过,免费领个 BoltTx key 改一行就能测测提交路径。
真正的风险住在流动性里
★一个两项权限都已放弃的代币照样会被 rug,因为风险不在代币,在池子。★
// LP 代币代表对池子流动性的所有权。
const lpMint = await getMint(connection, lpMintAddress);
const lpSupply = lpMint.supply;
// ★谁持有它们?★
const holders = await connection.getProgramAccounts(TOKEN_PROGRAM_ID, {
filters: [
{ dataSize: 165 },
{ memcmp: { offset: 0, bytes: lpMintAddress.toBase58() } },
],
});
三种值得区分的结果:
已销毁。 LP 代币被打进黑洞地址,或者供应量为零。★流动性撤不走。★
已锁定。 由一个带时间条件的锁仓程序持有。查一下什么时候解锁 —— 一个明天就到期的锁不算锁。
★由某个钱包持有。★ ★持有者随时能撤走流动性,这就是经典的 rug。★ 放弃 mint 和冻结权限对此毫无作用。
集中度告诉你的是"怎么出去"
const accounts = await connection.getProgramAccounts(TOKEN_PROGRAM_ID, {
filters: [
{ dataSize: 165 },
{ memcmp: { offset: 0, bytes: mintAddress.toBase58() } },
],
dataSlice: { offset: 64, length: 8 }, // ★只要 amount★
});
const balances = accounts
.map((a) => a.account.data.readBigUInt64LE(0))
.sort((a, b) => (b > a ? 1 : -1));
★dataSlice 在这里很重要 —— 不加它,你为了算一个总和而传输每一个持有者的完整账户数据。★
该看什么: 少数几个钱包持有大部分供应量。这不能证明什么,但它界定了"出场"是什么样子 —— 如果一个钱包能砸出超过池子承受能力的量,你的出场价格就是他的决定。
那项必须靠模拟的检查
配置告诉你的是能力。★它没法告诉你一次卖出到底能不能成功。★
// ★建仓之前,先模拟出场。★
const sellSim = await connection.simulateTransaction(sellTx, {
replaceRecentBlockhash: true, sigVerify: false,
});
if (sellSim.value.err) return { tradeable: false, reason: "卖出会失败" };
一个放行买入、拒绝卖出的 transfer hook,能通过每一项配置检查。 一个另一侧根本没有流动性的池子也能。★模拟卖出,是唯一一项按行为而不是按设置来抓陷阱的检查。★
对高速狙击手来说这是昂贵的一步,跳过它是一个真实的权衡而不是疏忽 —— 你是在拿一个已知风险换延迟。
按成本排序
从最便宜的开始跑,让大多数代币在你花掉任何东西之前就被拒绝:
1. ★mint 的 owner★ —— 一次读取,告诉你是经典还是 2022
2. ★mint 权限 + 冻结权限★ —— 同一次读取
3. 扩展 —— 同一次读取(如果是 2022)
4. 池子储备 —— 一次读取,到底有没有流动性
5. LP 状态 —— 几次读取
6. 持有集中度 —— 一次很重的 gPA 调用
7. ★卖出模拟★ —— 昂贵的那个
★第 1 到 4 步来自两次账户读取,就能拒绝掉大多数坏代币。★ 昂贵的检查只对那些已经看起来合理的候选跑。
这些检查覆盖不到什么
值得说明白,因为一份全部通过的清单会制造虚假的安全感:
它不说明团队或意图。 ★放弃权限、销毁 LP,描述的是"这个代币不能被那几种特定机制 rug" —— 不是"这个代币会涨"。★
它不说明未来的流动性。 现在有流动性的池子,可以通过正常交易在之后变薄。
它不说明池子程序本身。 你是在信任持有这份流动性的那个 AMM。
它是一张快照,不是一个订阅。 在你检查和你交易之间,权限随时会被行使。
上链应该是什么水平
我们投递节点上的真实交易:中位确认 336 毫秒 —— 不到一个 slot。
★每一项检查都是延迟,而延迟就是队列里的位置。★ 这个取舍是真实的:什么都查的机器人比什么都不查的到得晚,而后者偶尔会买到一个卖不掉的东西。
BoltTx 在这里的位置
我们负责提交。你交易之前查什么,完全是你的决定。
提交走我们自建的四区域投递节点,带 SWQoS 路由,不暴露公共 mempool —— 交易在落块之前、传输途中观察不到。你的安全检查继续用现在的读取端点 —— 两条路径互相独立,所以繁重的筛查耗尽不了你发送所需的配额。
你在本地签名。我们不托管资金、不代签、不修改交易内容。tip 带在交易里、从你自己的钱包链上支付,交易失败时跟着一起 revert —— 这是 Solana 原子交易的机制决定的。只有到达链上的交易才计费。
免费领 API key,没有月费:
const sender = new Connection("https://la.bolttx.io/?api-key=YOUR_KEY");
常见问题
买一个 Solana 代币之前该查什么? mint 权限、冻结权限、是 Token-2022 的话还有扩展、池子有没有流动性、LP 状态、持有集中度,以及一次卖出模拟。前四项来自两次读取。
放弃 mint 权限是什么意思? 没人能再创造供应量。它一旦为 null 就是永久保证 —— 这也是为什么检查的是"权限存不存在",而不是"它做过什么"。
冻结权限为什么重要? 持有它的人能冻结你的代币账户,让你的仓位在他选定的时刻卖不出去。不同于稀释,这件事没有部分发生的版本。
两项权限都放弃了,还会被 rug 吗? 会。权限管的是代币,而风险住在池子里。 如果 LP 代币由某个钱包持有,不管权限状态如何,持有者随时能撤走流动性。
怎么查流动性有没有锁? 看谁持有 LP 代币。销毁 = 供应量为零或被打进黑洞地址;锁定 = 由锁仓程序持有;普通钱包 = 随时可撤。
带时间锁的 LP 安全吗? 只安全到解锁为止。 查一下解锁时间 —— 一个很快到期的锁,和没有锁在功能上是一回事。
怎么查持有集中度?
查询该 mint 的代币账户,并用 dataSlice 只取 amount,然后排序。不加这个切片,你为了算总和会传输每个持有者的完整账户数据。
为什么买之前要模拟卖出? 因为配置检查发现不了"放行买入、拒绝卖出"的 transfer hook。模拟是唯一一项测试行为而不是测试设置的检查。
哪些 Token-2022 扩展危险? 永久委托方让别人无需你签名就拿走你的代币,不可转让则完全禁止卖出。一个还活着的转账费权限,也可以在之后引入费用。
安全检查会增加多少延迟? 便宜的那几项是两次账户读取,就能拒绝掉大多数坏代币。持有集中度和卖出模拟很贵,只值得对已经通过前面检查的候选跑。
安全检查结果能缓存吗? 只能缓存不可变的部分,比如 decimals 和 mint 属于哪个代币程序。权限随时会被行使、流动性随时会被撤走,那些必须是当前的。
检查全过了,是不是就值得买? 不是。它们只意味着某些特定的攻击手段不可用。 链上没有任何东西能说明价格会不会涨、或者团队打不打算继续做。
高速狙击的最低检查是什么? 从你本来就要做的那次 mint 读取里拿到 mint 和冻结权限,再加上池子储备非零。这几乎不花延迟,就能拒绝掉很大一部分坏代币。
该查元数据的更新权限吗? 值得记一笔,但严重性低。它允许改名字和图片 —— 和增发、冻结、撤流动性相比只是外观问题。
怎么用程序查 LP 状态? 读 LP mint 的供应量,并查询它的代币账户看谁持有。供应量为零、或全部在黑洞地址,意味着流动性撤不走。
权限会在我检查和交易之间被行使吗? 会。每一项检查都是快照 —— 这就是为什么执行时真正保护你的,仍然是链上的最小输出量,而不是交易前的筛查。