Solana · MEV · DEX 套利

299 万美金,150 秒蒸发
—— Meteora 过期池套利完整拆解

用图解搞懂:DLMM 的 bin 是什么,为什么旧 LP 池会变成"白送代币的提款机",以及套利机器人是怎么把它们一口气吞掉的。

$2.99M
被抽走金额
150s
总耗时
6 + 1
机器人 + 鲸鱼
10 个月
池子无人维护
"$2,993,502 drained from a single Solana pool in 150 seconds. 1 whale. 6 bots. 9 transactions. 1 misconfigured Meteora pool that sat for 10 months." —— @anshu_code, X / 2026-05-06

这条推文讲的,是 Solana 链上一个被忽略了 10 个月的 Meteora DLMM 流动性池,在 150 秒内被 6 个套利机器人和一个大户合力"洗"了一遍,搬走 299 万美金。本文用图把它拆开讲清楚。

1. 它属于哪一类套利?

这种玩法的术语叫 Stale Pool Arbitrage(过期池套利)。靶子是那些 LP 挂上去就不再维护 的集中流动性池——挂的还是几个月前的"老价格",外部市场早已涨飞,池子却毫无觉察。

Raydium / 真实市场 代币 X 已涨到 $1.00 活跃交易 · 价格随市场实时更新 Meteora 旧池子 10 个月没人交易 $0.001 价格停在 LP 创建时的水平 价差 1000× 套利机器人在这里下手
同一种代币,两个池子,价格差 1000 倍。差距在 LP 不维护时会一直存在。

2. 先理解 DLMM:什么是 bin?

Meteora DLMM(Dynamic Liquidity Market Maker)跟 Uniswap v3 思路一样:把价格切成一格一格的"档位",每一档叫 bin。LP 不是在一条曲线上放钱,而是把代币塞进具体某几个 bin 里。

↓ Active Bin(当前价) $0.5 $0.6 $0.7 $0.8 $0.9 $1.0 $1.1 $1.2 $1.3 $1.4 $1.5 下方 bins 装 USDC(限价买单) 上方 bins 装 代币 X(限价卖单)
DLMM 池子结构:active bin 把价格分成左右两半。左边的 bin 装 USDC,右边的装代币。
关键三点:
  1. 每个 bin 对应一个固定的兑换价(创建时算好的常数)。
  2. active bin 下方的 bins 装 Y(USDC),是"低价等买 X 的限价买单"。
  3. active bin 上方的 bins 装 X(代币),是"高价等卖出的限价卖单"。

3. 为什么 bin 会"老价格存在"?

这是这次事件最反直觉的地方。DLMM 池子的价格不会自动跟着外部市场走——它只在有人在本池子做 swap的时候才移动 active bin。

Day 0 Day 1 ~ 300(无人交易) Day 300(被发现) Raydium 真实市价 $0.001 $1.00 ↑↑↑ Meteora 池子 active bin 10 个月一动不动 · 一直停在 $0.001 价差 1000×
外部市场涨了 1000 倍,Meteora 池子的 active bin 却没移动半步——因为没人来这里 swap。

所以"代币涨了为什么 bin 还能低价存在"的答案是:

Solana 链上没有"全局市场价"。每个 DEX 池子都是独立的小宇宙。Raydium 的价格涨到 $1 跟 Meteora 这个池子毫无机械联系——除非有套利机器人主动来"对齐"它。在它被发现之前,那批挂在 $0.001、$0.0011、$0.005、$0.01 ... 的 X 代币就一直**安静地坐在那儿等买家**。

4. 攻击是怎么发生的(图解)

为了讲清楚机器人具体在干什么,下面把那笔 transaction 拆成 4 个画面:

① 池子初始状态:active bin 在 $0.001,上方塞满便宜 X 代币 $0.001 $0.002 $0.005 $0.01 $0.05 $0.2 $0.5 $1.0 每个紫格里都有大量代币 X,标价远低于市价 ② 机器人灌入 USDC,吞掉第一格 bin(按 $0.001 买) 已吃完 代币 X 进入机器人钱包,bin #1 变成 USDC ③ active bin 推到下一格,继续吃(按 $0.002, $0.005, $0.01... 一路买上去) active bin 一格格往上推,直到逼近真实市价 $1.0 ④ 同一笔 transaction 里把吃到的 X 全部发到 Raydium 按 $1.0 卖出 Meteora 买 X · 极便宜 Raydium 卖 X · 市价 机器人钱包 + $400K USDC 所有指令打包进 1 笔 tx, 失败回滚 → 永远不会亏
套利的整个动作:低价吃光 → 市价卖出 → 同一笔交易原子完成。

事件时间线

时刻角色动作结果
T+0s鲸鱼大额 swap,第一次"打开"这个被遗忘的池子active bin 开始移动
T+0.4sBot 1监听器触发,发起反向套利$0.16 成本 → $403K 盈利
T+1.2sBot 2下一个 block 抢落地$0.23 成本 → $696K 盈利
T+0~150sBot 3-6剩余 bin 慢慢被扫累计接近 $3M
T+150sactive bin 已逼近 Raydium 市价套利窗口关闭

5. 技术实现骨架(如果你想做)

  1. 扫描全网 Meteora DLMM 池找"stale"标的。拉所有 DLMM 池的 PDA 账户,用 SDK 读 active bin 价格,跟 Jupiter / Birdeye 拿到的市价对比。差 5-10% 以上的进候选池。这一步可以离线一天扫一次。
  2. 实时盯盘候选池。用 Helius / Triton 的 Geyser gRPC 或 accountSubscribe WebSocket 订阅这些池子账户,状态一变就 push 给你(延迟 50-200ms)。
  3. 盈亏模拟。调用 @meteora-ag/dlmm 模拟从这个池子买 X、再到 Raydium 卖的总收益。扣掉两边手续费、Solana 优先费、Jito tip 后还赚才发交易。
  4. 原子 transaction。把"Meteora 买 + Raydium 卖"两条 swap 指令打到同一笔 tx 里,每个指令都设 min_out_amount,价格滑了整笔回滚。账户多塞不下时用 Address Lookup Table (LUT) 压缩。
  5. 抢落地。普通 RPC 抢不过别人。主流做法:Jito bundle(带 tip)+ Helius Sender / Triton Cascade 同时发出去,哪个先 land 算哪个。tip 大小是 bot 之间最常调的旋钮。
提示:这种机会真正的瓶颈不在策略本身,而在抢速度风险控制。一旦池子被发现,每个 block 都有 5-20 个机器人在抢同一笔利润。原子 + Jito + 充足的 priority fee 是最低门槛。

6. 一句话总结

Bin 不会自动更新价格,DLMM 池子只在被交易时才移动 active bin。LP 创建池子后 10 个月不维护,外部市场暴涨 1000 倍——池子里那些"高于原始 active bin 但远低于市场价"的 bins 就成了静悄悄挂着的「便宜代币堆」,等着第一个发现它的套利机器人一口气全吃光。

这就是 stale pool / stale LP arbitrage。错不在 Meteora 协议,而在 LP 自己。这种漏洞跟 Uniswap v3 在以太坊上遇到的"untracked LP"问题完全一样,只是 Solana 上池子多、LP 散、被发现的速度极快——这次连 1 秒都没撑住。