1. 为什么DEX定价机制值得单独研究:与预言机研究的分工
在本系列此前关于预言机与价格数据的一篇中,讨论的核心问题是「协议如何从外部获取价格」:一个借贷市场、一个衍生品协议在计算抵押率、判断清算线时,需要一个它自己不产生、只是读取的价格数字,于是就有了预言机——链下报价源、链上聚合合约、更新频率、陈旧阈值、多源交叉核验,这一整套机制解决的是「信任谁的数字」的问题。但这条链路里始终有一个环节被悬置:那个被预言机采集、被协议读取的价格,最初是从哪里生成出来的?很大一部分答案就是DEX(去中心化交易所)本身。DEX不是价格的搬运者,而是价格的生产者——它内部的做市曲线、流动性分布、每一笔swap的执行路径,共同决定了某个交易对在某一时刻「应该是多少」。这是一个与预言机研究平行、但方向相反的问题:预言机研究问的是「这个价格从哪里传来、可不可信」,DEX定价研究问的是「这个价格是怎么被算出来的、这套算法本身有没有被操纵的空间」。
把两者的分工说得更具体一些:预言机文章处理的是信息传递环节的风险,例如某条价格喂送更新滞后、某个聚合合约只依赖单一数据源、价格更新在关键窗口被人为拖延;而本文要处理的是价格生成环节的风险,例如一个流动性池的挂牌深度与其实际可承接的成交量之间存在多大落差、一笔看似正常规模的swap会把池内报价推离外部参考价多远、以及在这套自动做市曲线的运行规则下,第三方是否存在低成本插入交易、抢先获利的结构性空间。二者常常首尾相连——不少预言机设计本身就以某个DEX的时间加权价格(TWAP)作为输入源之一,这意味着如果研究者不理解DEX自身定价机制的脆弱点,也很难判断一个以DEX价格为基础的预言机设计是否稳健。但混为一谈会让研究失焦:预言机研究关注的是「多源交叉、更新频率、断路器阈值」,DEX定价研究关注的是「池子结构、深度分布、价格影响曲线、抢跑与夹单的抽象模式」,这是两套不同的检查清单,需要分开对待。
把DEX定价机制单拎出来研究,还有一个更直接的理由:DEX是加密世界里少数「定价过程完全公开」的场所。一笔swap从提交到成交,池子的储备量变化、执行价格、滑点大小,理论上都可以逐笔在链上复核,这为研究者提供了一个不依赖任何人「自证」的独立核验对象——你不需要相信任何一方公布的报告,只需要读懂储备曲线本身。但「可核验」不等于「容易核验」:多数使用者看到的只是前端界面上一个已经计算好的报价,背后池子的真实深度分布、报价对大额订单的敏感度、以及某笔交易前后是否被其他交易「包夹」,都需要研究者主动拆解链上数据才能看清。这种「数据全公开、但解读门槛不低」的特征,正是DEX定价机制值得作为一个独立研究方向存在的原因。
需要在开篇明确本文的方法论边界。全文围绕四个层次展开:AMM定价的抽象原理与流动性池设计类别、如何独立核验流动性池的真实深度、价格影响与滑点的独立计算方法,以及MEV与三明治交易的抽象机制类别。所有涉及机制说明的示例——包括池子规模、价格曲线参数、滑点比例、区块顺序安排等——均为便于说明原理而构造的抽象类别或虚构数字,会在文中明确标注,不对应任何真实存在、可识别的DEX产品、协议、团队或历史事件,也不构成对任何具体项目的结论性评价。其中第五节涉及的MEV与三明治交易内容,站在研究者识别与防范风险的视角展开,用于理解「这类操纵为什么可能发生、留下哪些可观察的痕迹」,而非提供如何实施此类操作的步骤指南。全文仅为研究方法论探讨,不构成投资建议,也不构成操作建议。
- 预言机研究:关注价格信息的传递与核验——多源交叉比对、更新频率、陈旧阈值、断路器设计
- DEX定价研究:关注价格本身的生成过程——做市曲线设计、池内储备分布、价格影响与滑点、执行路径中的操纵空间
- 交汇点:不少预言机设计以DEX的时间加权价格作为输入之一,因此两类研究的结论会相互印证,但检查方法与清单并不相同
- 本文范围:AMM定价原理、真实深度核验、价格影响与滑点计算、MEV与三明治的抽象机制类别(研究者视角,非操作指南)
2. AMM定价机制的抽象原理与流动性池设计类别
要核验一个交易对在某一时刻给出的报价是否合理,第一步不是去查它是否被操纵,而是先弄清楚这个报价本身是由什么规则计算出来的。与传统交易所依赖买卖双方挂单簿撮合出成交价不同,自动做市商(AMM)型DEX的报价并非来自某一方主动报出的数字,而是由一个预先写入合约、对所有交易者都公开且相同的数学函数,根据池内当前持有的各资产数量,实时计算得出,通常被称为恒定函数做市商公式。理解这一由公式驱动、而非由报价方主动决定的定价方式,是后续核验流动性深度、计算价格影响、识别MEV机制的共同前提,也是本文与此前预言机文章在方法论上的关键分野:预言机文章核验的是外部世界的价格如何被搬运到链上,而这里要核验的是链上这个价格本身是如何被一个确定性公式实时算出来的。
本节先以结构最简单的两资产恒定乘积模型说明基本原理:池中锁定资产A数量x与资产B数量y,二者乘积x×y在无存取款时恒等于常数k,边际价格约等于y/x。用于说明方法论、数字均为虚构的示例显示:x=100万、y=100万(k=1万亿,边际价格1:1)的池子,若一次性投入10万单位资产A,交易后x'=110万,y'需降至约90.9万以保持k不变,实际成交单价约0.91,明显低于交易前的1:1报价——这一差值即本次交易自身规模造成的价格影响,与外部行情无关。该模型的两个关键性质是:价格影响与交易规模相对池内存量的比例强相关而非与绝对金额强相关;且价格曲线为双曲线,斜率随交易规模增大而急剧变陡,这是后续价格影响公式推导的数学基础。
实践中还存在若干在恒定函数设计上做出不同权衡的抽象类别,核验时需先判断池子属于哪一类。稳定资产优化曲线模型面向价格理论上应锚定同一基准的资产对,其曲线在锚定价格附近远比恒定乘积模型平坦(价格影响更小),但一旦资产比例被推向严重失衡区间,斜率会急剧变陡,价格影响可能反而更剧烈,这是容易被忽略的非对称特征。集中流动性模型允许流动性提供者仅在设定的价格区间内做市,池子对外的报价深度是当前价格所在区间内所有区间流动性的叠加,深度分布可能高度不均匀,仅读取总锁仓规模几乎不能反映当前价格附近的真实深度。多资产加权池模型把两资产乘积推广为多资产按权重(虚构示例:50%/30%/20%)加权的乘积,权重越低的资产在同等交易规模下往往呈现更陡峭的价格影响曲线。
恒定函数本身只决定理论换得数量,实际成交价还需叠加池子设定的手续费率(虚构示例档位:0.05%、0.3%、1%),扣费后的剩余数量才参与恒定函数运算;核验报价时应把理论换得数量与实际到手数量区分开,若二者差值明显偏离名义费率乘以交易规模,说明可能存在未披露的额外扣费环节。此外,手续费档位、集中流动性的区间粒度、曲线形状参数等往往可由治理流程或管理地址调整,一旦被静默变更,会在池内资产数量不变的情况下直接改变同一笔交易的报价与滑点,这与预言机文章中数据源地址可被管理员动态替换的权限性风险类似,核验历史报价时应留意研究窗口期内是否发生过此类参数变更,避免将其误判为交易本身或外部行情波动所致。
3. 如何独立核验流动性池的真实深度
当研究者打开一个DEX的前端界面,看到某个交易对下方标注的类似“TVL:512万美元”或“流动性状况:充足”这样的文字与数字时,需要用与本系列此前文章一致的态度去对待它:这是界面对研究者作出的一句声称,而不是研究者已经独立核实过的事实。这一判断逻辑与《审计报告到底审计了什么》中反复强调的“审计通过不等于合约无漏洞”、与《预言机价格核验方法》中强调的“我们使用安全预言机不等于价格来源已被验证”完全同构:前端展示的TVL数字,其统计口径、计算公式、乃至展示时点本身,完全由项目方前端代码或第三方数据聚合服务单方面决定,研究者如果不追溯到链上原始状态,就无从判断这个数字是否真实反映了当前可用于成交的流动性规模。更关键的是,“这个池子的资金规模很大”与“某一笔特定规模的交易可以在多小的价格影响下完成”,是两件相关但并不等价的事情,一个较高的名义数字完全可能对应着相当浅的可执行深度,这正是本节要重点拆解的区别。
独立核验流动性池的真实深度,大体可以拆分为四个递进的具体步骤:第一步是绕开前端展示层,直接从链上合约读取原始储备数据,建立一个不依赖任何第三方展示口径的基准事实;第二步是识别该流动性池所采用的具体设计类别,判断名义TVL中究竟有多大比例真正分布在当前价格附近、对眼下的成交有实际贡献;第三步是核查流动性提供者的地址分布情况,判断这部分深度是否可能被少数地址在极短时间内集中撤出;第四步是通过模拟一系列递增规模的报价请求,直接测出一条经验性的价格影响曲线,而不是依赖任何单一数字去代表“深度”这个本质上多维的概念。以下四个小节依次展开这四个步骤各自的具体操作路径。
- 核验步骤一:链上读取原始储备/虚拟储备数据,交叉核对前端展示的TVL口径
- 核验步骤二:识别流动性池设计类别,判断名义TVL在当前价格点位附近的真实可用比例
- 核验步骤三:核查LP代币持仓集中度,判断深度是否可能被少数地址瞬间撤出
- 核验步骤四:模拟递增规模报价,绘制该池子在特定区块高度下的经验价格影响曲线
3.1 定位并读取资金池合约的原始储备数据
核验的第一步是找到某一具体交易对实际对应的链上资金池合约地址——这通常需要通过对应DEX的工厂合约(factory contract)查询给定两个代币地址所生成的池子地址,而不是直接采信前端某个交易对页面里嵌入的地址,因为同一对代币在同一个协议下也可能因手续费档位、曲线参数不同而对应多个并行存在的池子,前端默认展示的未必是研究者想核验的那一个。找到池子地址之后,下一步是在区块浏览器的“读取合约”界面上,直接调用该合约暴露的只读函数,取出其记录的储备数值——对于按恒定乘积公式定价的池子,这通常表现为两个代币各自的储备量;对于稳定币互换等采用其他曲线公式的池子,读出的可能是若干“虚拟余额”参数,本身并不能直接当作可用深度解读,还需要结合该曲线公式本身才能还原出实际的价格-数量关系,这一点将在第四小节的模拟报价方法中一并处理。
读取到原始储备数值后,一个极易被忽略但影响结论正确性的细节是代币精度(decimals)的处理:如果两个代币的精度不同(例如一个是18位小数,另一个是6位小数),未经换算直接比较原始整数值会得出完全错误的储备比例乃至错误的隐含价格,研究者应当在计算前确认每个代币合约声明的精度参数,将储备原始值换算为对应的实际数量,再结合一个独立的价格参考(例如前一节讨论过的其他价格来源,或另一个高流动性场所的报价)计算出这个池子按当前储备计算出的名义美元价值,并将这一自行计算出的数值与前端展示的TVL数字相比对。如果二者出现明显偏差——比如自行计算得出的名义价值远低于前端展示的数字——这本身就是一个需要被记录并追问原因的具体信号,可能指向前端展示口径包含了尚未被提取的历史快照数据、缓存未及时刷新,或者统计口径把并非同一池子的其他资金也计入了同一个展示条目,而不应止步于“数字对不上就是这个平台有问题”这样笼统的结论,需要进一步追踪具体的偏差来源。
3.2 区分名义TVL与可执行深度:集中流动性设计下的价格区间问题
在采用集中流动性设计的池子中(即流动性提供者可以选择只在自己设定的某一价格区间内注入资金,而不是像传统恒定乘积池那样把资金铺满从零到无穷的整条曲线),名义TVL与当前价格点位附近的实际可用深度之间可能出现相当大的落差,这是本小节需要重点拆解的机制性陷阱。其原理在于:一笔资金一旦被某个流动性提供者设定在“当前价格的40%到300%”这样一个远离现价的区间内,它在合约层面确实计入了这个池子的总锁仓价值,但只要成交价格没有真正运动到这个区间内,这笔资金就完全不参与当前价格附近的任何一笔成交,其效果更接近一笔挂在远处的限价单,而不是随时可用的现货深度。这意味着研究者不能仅凭一个池子对外公布的总锁仓数字,就推断出该池子在当前价格附近能够以较小价格影响吸收多大规模的一笔swap,必须进一步查看流动性在各个价格区间上的实际分布情况。
举一个完全虚构的示例以说明这一落差的量级:假设某个抽象的“代币X/代币Y”池子对外展示的总锁仓价值为1200万美元(此数字为便于说明方法论而设的虚构示例,不对应任何真实池子的真实数据),研究者通过区块浏览器或专门的流动性分布查询工具,取出该池子按价格区间划分的流动性分布数据后发现,其中约有1020万美元的流动性被提供者设置在距当前价格40%以上的区间内,只有约180万美元真正覆盖了当前成交价格所在的窄幅区间;进一步测算后发现,若在这个池子中直接完成一笔等值50万美元的swap,实际价格影响可能达到两位数的百分比,而不是仅凭1200万美元这一headline数字直觉推算出的、看似微不足道的价格影响幅度。这一虚构示例说明的核心方法论要点是:面对采用价格区间设计的池子,研究者应当把“总锁仓价值”视为一个需要被进一步拆解的合成指标,而不是可以直接用来衡量当前可执行深度的最终结论。
3.3 核查流动性提供者集中度与可即时撤出的风险
即便是在不涉及价格区间设计、储备已被证实分布合理的普通恒定乘积池中,深度本身仍然可能建立在并不稳固的基础上——如果这个池子的绝大部分流动性来自极少数几个地址,那么这部分深度在理论上可以被这些地址在任意时刻通过一笔撤出流动性的交易迅速抽离,使得研究者此前测算出的所有深度数据在一个区块之内失效。核验这一风险的具体路径,是查询该资金池对应的LP代币(流动性提供者凭证代币)合约的持仓分布——大多数区块浏览器都提供按持有地址排序的持仓列表,研究者可以据此计算出排名前几位地址合计持有的LP代币比例。需要说明的是,持仓集中本身并不直接等同于恶意或高风险,早期池子、或者本来交易规模就较小的长尾资产池,流动性由少数早期参与者主导是较为常见的客观状态,这一发现的意义在于把它记录为一个需要持续跟踪的风险因子,而非直接得出该池子存在问题的结论。
在识别出持仓集中的地址之后,进一步的核验步骤是判断这部分资金是否处于某种时间锁定机制之下:如果LP代币被转入了一个具备明确解锁时间戳、且代码逻辑经过核实确实会在解锁时间之前拒绝提取请求的锁仓合约,那么至少在锁定期内,这部分深度撤出的可能性受到了代码层面的约束;反之,如果这些代币仍然停留在一个普通的外部账户(externally owned account)手中,没有任何合约层面的约束,那么这部分深度理论上可以在任意时刻被随时撤出,任何“已锁仓”的口头说明或界面标签都需要回到锁仓合约的实际代码与解锁参数中去逐一核实,而不能仅凭一个展示性的标签就采信。举一个虚构示例:某个抽象池子中,排名前三的地址合计持有该池子91%的LP代币份额,其中一个持仓比例最大的地址对应的是一个普通外部账户而非锁仓合约——这一发现本身不构成任何结论性判断,但足以让研究者将该池子标记为“深度稳定性有待持续观察”的对象,在后续的研究记录中定期复查这些地址的持仓变动情况。
3.4 通过模拟递增规模的报价请求,绘制经验性的深度曲线
前三个小节分别核实了储备的真实性、名义TVL在当前价格附近的实际可用比例、以及深度的稳定性风险,但要真正回答“一笔特定规模的交易会遭遇多大的价格影响”这个问题,仅凭储备数字套用理论公式推算仍然不够充分——理论公式假设的是理想化的曲线行为,而实际的路由逻辑、多池拆分、以及池子在读取瞬间的真实状态,都可能使理论推算与实际结果出现偏差。因此,第四步也是最终能够落地为具体数字的一步,是研究者直接调用该DEX路由合约或报价合约提供的只读查询接口(这类接口通常允许输入一个假设的兑入数量,返回按当前链上状态计算出的预期兑出数量,而不需要真正广播一笔交易),对同一个交易对分别输入一组由小到大的假设规模——例如虚构的1000美元、5000美元、2万美元、10万美元等值——分别记录每一档规模对应的报价结果,并据此计算出每一档规模相对于极小规模基准报价的价格偏离百分比,从而绘制出一条“交易规模—价格影响”的经验曲线。
在执行这一模拟测量时,需要留意并记录每一次查询所对应的具体区块高度或时间戳,因为链上池子状态是逐区块变化的,同一笔假设规模在不同区块读取到的结果可能存在差异,只有标注清楚测量时点,后续复核或跨时间段比较才有意义;建议在一天中不同时段重复这一测量,观察深度曲线是否稳定,还是在特定时间窗口内明显变薄,这类波动本身也是值得记录的研究发现。此外,研究者还应当清楚地区分“单一资金池的深度曲线”与“聚合器在同一笔交易规模下实际能够撮合到的综合深度”这两个不同的研究对象:多数聚合类工具在处理较大规模的兑换请求时,会自动将其拆分到多个池子甚至多条链上路径中分别成交,因此聚合器界面显示的价格影响,反映的是跨多个流动性来源组合之后的综合结果,而不是本节所讨论的单一池子深度曲线,二者是相关但不能相互替代的两组数据,混淆使用会导致对同一笔交易实际可能遭遇的价格影响得出错误估计。
4. 价格影响与滑点的独立计算方法
在完成流动性池深度的核验之后,下一步是把“深度”这个静态指标转化为“价格影响”和“滑点”这两个动态指标——它们才是决定一笔真实swap实际成本的直接变量。三者的关系需要先厘清:流动性深度描述的是池子在某个时点能承受多大规模交易而不发生剧烈价格偏移的能力,是一种“容量”;价格影响(price impact)描述的是某一笔特定规模的交易执行后,池内报价相对交易前的理论中间价发生了多大偏移,是一种“结果”;滑点(slippage)则是交易者实际成交均价与其下单时看到的报价之间的差异,其中既包含价格影响这一“确定性”部分,也包含交易被打包进链上的时间窗口内其他交易插入所造成的“不确定性”部分。很多研究者习惯把三者混用,但只要涉及跨池比较或异常检测,就必须把这三层拆开单独计算,否则容易把纯粹的机制性成本误判为异常,或反过来把真正的操纵行为掩盖在“正常滑点”的说法之下。
以最常见的恒定乘积模型(x·y=k)为基准,价格影响的推导可以完全独立于任何前端展示的数字。假设某虚构池子中资产A储备为x0=1,000,000单位,资产B储备为y0=2,000,000单位(隐含中间价为1A=2B),且该池收取0.30%的交易手续费。若研究者要计算用10,000单位A换出B的价格影响,先扣除手续费得到净输入Δx=10,000×(1-0.003)=9,970,代入恒定乘积关系(x0+Δx)·(y0-Δy)=x0·y0,解得Δy=y0-x0·y0/(x0+Δx)=2,000,000-1,000,000×2,000,000/1,009,970≈19,743。这笔交易的实际成交均价为19,743/10,000≈1.9743,相对交易前中间价2.0的偏移幅度为(2.0-1.9743)/2.0≈1.29%,这就是不含手续费扣减误差的“理论价格影响”。研究者应当把这一手工推导结果,与自己实际发起的链上小额测试交易或模拟调用(例如对路由合约做只读的quote调用)所返回的数字进行比对:如果两者持续存在超出手续费与四舍五入误差范围的系统性偏差(比如理论值1.29%而链上返回稳定高出0.4个百分点以上),就提示该池可能叠加了额外的动态费率、税收型代币转账损耗,或路由合约本身嵌入的隐藏抽成,这些都属于需要进一步定性核实的信号,而不是简单归为“滑点正常波动”。
价格影响与滑点在数值上分离的关键,在于识别“确定性成本”与“时间窗口暴露”这两个来源。确定性成本即上一段推导的、只要交易规模和池子当前状态确定就能精确算出的偏移,任何研究者用同样的公式在同一区块高度下都应得到一致结果;而时间窗口暴露指的是交易者提交交易到该交易被打包进区块之间存在的时间差,这段时间内池子状态可能已被其他交易改变,导致最终成交均价偏离下单时刻探到的理论值。区分方法是做“双重锚点”记录:研究者在广播交易前先以只读方式查询一次池子储备(记为锚点一),交易上链确认后再立即查询一次(记为锚点二),并对照区块浏览器上该笔交易前后同一区块内是否存在指向同一池子的其他交易。如果锚点一与锚点二之间池子状态发生了显著变化,且变化方向恰好不利于研究者的这笔交易(例如买入方向上池内被换入的资产储备在同一区块内被他人大幅推高),那么额外产生的那部分滑点就不属于价格影响,而应归入下一节要讨论的MEV范畴。这种拆分在实践中通常表现为一个不等式:观测滑点=理论价格影响+区块内状态漂移量,只有把后者单独测量出来,才能判断某次“滑点偏大”究竟是池子太浅、还是遭遇了插队交易。
此外还有两类容易被忽视的干扰因素,会让研究者对滑点的独立计算产生偏差。第一类是聚合路由的拆单效应:许多前端为了降低价格影响,会把一笔大额交易拆分到多个池子甚至多条路径同时执行,此时若研究者只用单一池子的恒定乘积公式去核算,得到的理论价格影响会显著高于实际观测值,误差来源不是价格操纵而是路由本身的优化;核实方法是先通过路由合约的模拟调用或公开的调用轨迹(call trace)确认该笔交易是否被拆分、拆分比例如何,再对每条子路径分别套用价格影响公式后加权还原。第二类是集中流动性设计下“有效深度区间”随价格漂移而变化的问题:与前述均匀分布的恒定乘积池不同,若做市商把流动性集中在某一价格区间内,一旦交易把价格推出该区间,边际流动性会骤降,价格影响曲线不再是平滑的凸函数,而会出现台阶式跳变。对此类池子做价格影响估算时,不能只套用单一区间内的简化公式,而应分段计算——按当前价格所在区间内的可用流动性先测算一段,若交易规模超出该区间容量,再对下一价格区间重复同样的推导,最终把各段价格影响加总,才能得到贴近真实执行结果的估计值。这两类因素说明,独立核算价格影响与滑点不是套一个公式就能完成的静态练习,而需要先确认交易实际经过的机制路径,再选择与该路径相匹配的计算方式逐段核算,而不是不加区分地套用同一套公式得出结论。
5. MEV与三明治攻击的抽象机制类别:研究者视角
第4节讨论的价格影响与滑点计算,本质上回答的是“一笔swap会把价格推到多远”;而本节要回答的是“在这笔swap被打包进区块之前和之后,是否有其他交易利用了这个已知的价格路径来获利”。这类现象在研究文献中通常被归入MEV(可提取价值,Maximal Extractable Value)的范畴,其中与AMM定价机制关系最直接的子类别,就是围绕单笔交易的价格影响所构造的“三明治”结构。需要先明确研究边界:本节的目的是让研究者能够识别、量化某个池子或某条交易路径的MEV暴露程度,作为评估该DEX研究价值与风险特征的一部分依据,而不是提供构造此类交易的操作步骤——三明治攻击本身涉及的抢先下单、精确gas竞价、与出块方的私有通道协商等环节,属于执行层面的技术细节,不在方法论研究的讨论范围内,本节也不会展开。
从抽象机制上看,一次典型的三明治结构由三笔在同一区块内按特定顺序打包的交易组成。假设某流动性池当前储备为1,200,000枚代币A与600枚代币B(虚构数值),一名普通用户提交了一笔用20枚B换取A的swap,按照恒定乘积公式估算,这笔交易会把池内价格从1B=2,000A左右推高到约1B=1,935A,价格影响接近3.3%。若存在一名观察者持续监听待打包交易池(mempool),在识别到这笔交易后,可以构造第一笔交易——用较小的B数量抢先在用户交易之前完成同方向的买入,把价格进一步推高;随后用户的原始交易按照被推高后的价格成交,实际获得的A数量低于其未受干扰时的预期;紧接着观察者再提交第三笔交易,将此前买入的A卖回B,利用价格回落中的差价获利。三笔交易的净效果是:用户实际滑点从理论上的3.3%被放大到可能的5%-7%(虚构区间),而多出的部分转移给了插入交易的一方。研究者关心的不是如何构造这三笔交易,而是如何从链上历史数据中识别出这种“同区块、同池子、方向对称、地址关联”的交易簇,并统计其发生频率与规模,以此判断某条交易路径在特定时间段内是否处于容易被此类结构影响的状态。
三明治结构之外,还存在若干在机制上有区别但同样围绕AMM定价展开的MEV子类别,值得作为独立的抽象范畴分别识别。其一是“后置套利”(back-running),即交易本身不改变用户成交价格,而是在用户交易改变池内价格之后,利用该池与其他池或其他市场之间产生的价格差异进行跨池/跨市场的套利,这类活动本身不直接损害发起交易的用户,但会持续影响池内价格向外部市场收敛的速度,是研究流动性池定价效率时的一个观察维度。其二是“即时流动性”(Just-In-Time Liquidity,JIT),指某个流动性提供方在观察到一笔大额swap即将成交前,临时向对应价格区间注入流动性以承接这笔交易的手续费收入,并在同一区块或极短时间内撤出该流动性;这种行为在集中流动性设计的池子中更容易观察到,因为价格区间机制使得“精确狙击某个价格带”在技术上可行。其三是“广义抢先交易”(generalized front-running),不局限于swap,也可能针对清算、预言机更新后的套利窗口等场景,但只要其触发条件与AMM报价变化相关,就与本节讨论的机制范畴存在交叠。
从研究方法上,量化一个池子或一条交易路径的MEV暴露程度,可以从三个可观测信号入手:第一,交易顺序异常度,即在按区块打包顺序排列的交易中,是否反复出现“买-用户交易-卖”这类对称结构,且买卖双方地址在历史上多次共同出现;第二,同区块价格路径的往返幅度,把区块内所有涉及同一池子的交易按顺序重放,观察池内价格是否呈现出“先偏离、后回归”的V形或倒V形轨迹,而非单调地朝一个方向移动;第三,被插入交易与用户交易之间的时间/gas优先级关系,例如插入交易是否始终以略高于用户交易的优先费出现,这种规律性本身就是一个值得记录的统计特征,而不需要对其背后的执行方式做任何还原或复现。将这三个信号在一段时间窗口(例如某虚构池子过去30天的全部交易)内做统计,可以得到一个近似的“MEV暴露率”,例如“该池子在样本期内约4.8%的大额swap(虚构比例,定义为占池内一侧储备0.5%以上的swap)呈现出三明治特征”,这类量化结果可以作为该池子流动性质量与价格发现可靠性的辅助评估维度,与前几节讨论的深度、滑点指标共同构成对该DEX定价机制的整体研究结论,但其本身不构成对任何具体协议的定性评价,也不意味着研究者需要或应当利用这一发现去执行任何交易策略。
- 同区块交易簇识别:筛选同一区块内针对同一池子、方向对称、地址前后关联的交易组合
- 价格路径重放:按打包顺序重放区块内交易,观察池内价格是否出现先偏离后回归的往返轨迹
- 优先级规律性:比较疑似插入交易与目标交易的gas/优先费差异是否呈现系统性规律,而非偶然重合
- 跨池价差观察:记录同一交易对在不同池子/市场间的价差在用户交易前后的收敛速度,用于区分后置套利与三明治结构
6. 亲自动手:小额跨链Swap实测与一手数据记录
前面几节建立的都是可以在纸面上核算出来的认知:池子深度如何核验、价格影响与滑点如何用公式估算、三明治攻击又属于哪一类抽象机制。但链上环境是动态的——区块的打包顺序、同一时刻其他地址提交的交易、跨链路径的处理时延,都不是一条静态公式能够完全还原的变量。研究方法论的最后一块拼图,是用一笔可以承受全部损失的小额资金,把真实的swap流程走一遍,让第4节算出的『预测值』与链上真实发生的『实测值』摆在同一张表格里对照。这一步的价值不在于盈亏,而在于把此前抽象的机制,转化为带着时间戳、区块高度与交易哈希的一手记录,供日后反复核查与复盘。
亲自实测前,有几条原则需要先明确下来。第一,只使用自己能够承受全部损失的小额资金,且建议单独准备一个与主仓位隔离的『测试专用』地址,避免测试痕迹与真实持仓的资金流混在一起,也便于日后单独复盘这批数据。第二,每次操作前先把依据第4节方法算出的预期价格影响、预期到账区间写在案头,实测结束后逐项对照,而不是事后凭印象回忆——凭印象回忆几乎必然带有确认偏误,会让人只记住『符合预期』的那几次。第三,全过程仅用于研究学习,不构成任何投资建议;任何链上转账一经确认便无法撤销,操作前务必反复核对目标公链、代币标准与收款地址。
- 报价当下的预测价格影响(百分比,依据第4节公式算出)
- 实际到账数量与由此反推出的实际滑点,二者的差值
- 交易被打包的区块高度、确认耗时与所用的gas或跨链手续费
- 同一区块内、紧邻自己交易前后是否存在方向相同的大额交易
- swap前后池内两种资产储备量的实测变化(与第3节深度核验方法呼应)
- 所用测试地址、交易哈希与截图式记录,供事后交叉复核
6.1 实测前准备:资产归集与目标链的选择
实测中常见的一个现实障碍是:研究者手里的加密资产分散在不同公链上,而计划实测的目标资金池恰好在另一条链、需要另一种代币标准。这时需要先把零散资产按需整理、兑换到目标链上真正用得上的币种,才能开始正式的swap实测。一种常见做法是借助非托管的跨链兑换聚合器完成这一步。以 AllSwap为例,这是一类无需注册、无需KYC、非托管的跨链加密货币兑换聚合器,由多家做市商竞价给出一口价,若因故未能成交,资金按原路自动退回。
需要强调的是:这类工具只应服务于真实、合规的研究与使用需求,本文提及它仅是为了说明『把资产归集到目标链』这一实测前置步骤,不构成任何形式的推荐或投资建议。操作前务必自行核对目标公链、代币标准与收款地址是否与自己计划实测的池子完全一致,先确认场景需要哪条链、再准备对应的币种,转账前逐字核对地址与预计到账数额。完成资产归集后,剩余的每一步——选池、报价、执行、核对——才真正进入本节要记录的swap实测环节。
6.2 设计可比较的实测方案:本金梯度与时间窗口
单次实测的样本量太小,难以区分『偶然波动』与『系统性偏差』,因此建议设计一组可比较的方案:固定同一交易对、同一资金池,但在若干个本金梯度、若干个时间窗口下重复执行,凑齐一批可以互相对照的样本。举一个完全虚构的例子:假设研究者选定『甲乙测试池』(名称与数字均为虚构),设定等值约50美元、300美元、1200美元、5000美元四档本金,分别在同一交易对上执行swap;同时选取网络交易相对密集的时段与相对空闲的时段各测一轮,一共得到8组样本,覆盖『本金大小』与『网络拥堵程度』两个维度。
这样设计的意义在于:本金梯度能验证价格影响是否随成交额呈非线性放大(对应第2节讲的恒定乘积等定价机制的曲线特征),而时间窗口的对照则有助于观察网络拥堵、其他交易者活跃度对实际滑点与打包顺序的影响。每一组实测都应在执行前先记录『预测值』,执行后立刻记录『实测值』,两者的时间差应尽量缩短,避免因市场自身波动混入价格影响的测算误差。
6.3 从链上回执核查是否存在疑似三明治迹象
拿到交易哈希后,可以在区块浏览器中查看自己的交易被打包在哪一个区块、区块内紧邻的其他交易分别是什么。第5节讲过,三明治攻击的抽象特征是『同一区块内,先出现一笔与自己方向相同、把价格推高(或压低)的交易,再出现自己的交易,随后紧跟一笔方向相反的交易把价格打回』。研究者可以据此逐笔核对:区块内是否存在这种『同向推价—自己成交—反向平仓』的三笔组合,组合中前后两笔交易的发起地址是否相同或存在关联特征,以及自己实际成交价与理论无干扰价之间的偏离幅度。
需要说明的是,这里的核查仅用于风险识别与研究记录,判断的是『这笔交易是否处于一个疑似三明治结构中』,而不是去复现或指导如何构造这类交易——如何识别与如何实施是完全不同的两件事,本节只讨论前者。多数情况下,小额交易的价格影响很小,被专门针对的概率也低,因此在小额测试中出现明显疑似迹象的样本并不多见,这本身也是一项值得记录的观察。
6.4 数据整理、解读与研究边界
把每一组样本按前述字段整理成表格后,重点看两类偏差:一是『预测滑点』与『实测滑点』之间的差值是否随本金增大而扩大,这有助于判断此前用来估算价格影响的公式在多大程度上贴近真实池子的响应;二是『实测到账时间与费用』在不同网络拥堵时段之间的差异,这反映的是跨链与执行环节本身的摩擦成本,而非定价机制的问题。把两类偏差分开看,能避免把网络延迟造成的差异错误地归因为定价机制或MEV问题。
最后要提醒研究边界:小样本实测得出的规律,只适用于说明『这个池子、这个时间段大致是什么样』,不能外推为普遍结论,更不能作为交易决策的依据。若某一次实测中出现异常大的滑点偏差或疑似三明治迹象,应当把它当作需要进一步交叉验证的线索,而不是急于下结论。本节所述流程与任何虚构数字均为研究方法示例,不构成投资建议,请始终使用可承受全部损失的小额资金,并在充分理解风险的前提下审慎操作。
7. 关于DEX流动性研究的常见认知误区
在系统性研究DEX流动性的过程中,几个反复出现的认知偏差,其根源往往不是数据获取能力不足,而是对AMM机制本身的抽象层面理解有偏差——把"账面上可见的规模指标"误当作"该规模在特定价格区间内的可用深度",或者把"前端展示的预期滑点"误当作"链上实际执行后的价格滑点"。这类误区的共同特点是:单独看每一项都并非完全错误,但脱离具体的价格区间、时间窗口和执行路径去下判断,就会系统性高估或低估一个交易对的真实流动性状况。以下逐条列出研究实践中较为常见的几种认知误区,每一条都附带其成因层面的机制解释,便于研究者在整理自己的核验清单时对照检查。
这些误区之所以值得单独成节,是因为它们通常出现在研究结论的关键推理环节上——比如"这个池子TVL两千万美元,流动性充足,价格发现应当可靠"这类看似合理的判断,一旦落到具体的价格影响计算上就可能站不住脚。识别这些误区不需要额外的工具,而只需要在下结论前多问一句:这个数字对应的是账面存量、区间内深度,还是某个特定时间点的截面状态;以及差额的来源是否已经拆解到最细的独立环节,而不是笼统归为同一个原因。
- 区分"账面存量指标"(TVL)与"特定价格区间内的条件性深度",避免用前者替代后者作为流动性充足与否的证据
- 区分"前端预览滑点"与"链上实际执行滑点",以交易回执中的实际成交价为准记录数据
- 评估相关风险时同时核查滑点容忍度设置与执行成本的经济性,而不仅看价格影响幅度本身
- 将到账差额拆解为执行滑点、服务费、目标链费用扣除等独立环节分别记录,不做笼统合并
7.1 误区一:TVL即深度
总锁仓价值(TVL)是一个存量(stock)指标,反映的是全部价格区间内被锁定资产的美元计价总和,而流动性深度是一个针对特定价格区间的条件性(conditional)指标,两者不能互相替代。在采用集中流动性设计的池子中,做市方可以选择将资金集中投放在当前价格上下一个很窄的区间内。虚构示例:某交易对ABC/USDT总TVL为1200万美元(数字为虚构),但若其中约80%的资金被集中做市在偏离当前价格±2%的窄幅区间内,一旦价格因大额卖单被推出该区间,剩余可用于承接后续卖压的深度可能骤降至不足200万美元,价格影响曲线会呈现出"悬崖式"跳变,而非TVL数字所暗示的平滑曲线。只援引TVL总量而不拆解区间分布,得出的深度判断可能与该池子在压力场景下的实际表现完全不符。
7.2 误区二:报价滑点等同于真实执行滑点
前端界面下单前显示的"预计滑点"通常来自聚合器基于当前链上状态的模拟计算,该模拟发生在用户查看页面的那一刻,而实际成交发生在交易被打包进区块之后——两者之间存在一个时间窗口,可能是几百毫秒,也可能因网络拥堵延长到数十秒。虚构示例:某次操作中界面显示预计价格影响为0.15%,滑点容忍度设置为0.5%;实际链上执行后,由于窗口期内出现两笔在先的大额swap,真实价格影响达到0.43%——仍在容忍度内因此交易成功执行,但已与预览数字相差近三倍。研究记录中若把界面报价直接当作既成事实,而不核对交易回执中的实际成交价与输入价之差,会导致对该池子价格执行质量的系统性误判。
7.3 误区三:价格影响小意味着没有MEV风险
三明治类操纵的可盈利性取决于能否在一笔目标交易的前后各插入一笔交易、利用其滑点容忍空间获利,这与池子本身"深浅"并无必然的正相关或负相关关系,而更多取决于滑点容忍度的设置宽松程度,以及构造前后两笔交易所需的成本能否被潜在利润覆盖。一个流动性很深的池子,如果用户将滑点容忍度设置得较为宽松(例如部分前端"自动"或"宽松"模式下常见的3%至5%),仍会留出可被利用的空间;反之一个流动性较浅的池子,如果打包成本相对于池子规模过高,反而未必构成有利可图的操纵目标。因此"这个池子价格影响很小,应该没有相关风险"这类推断,忽略了滑点容忍度与执行成本这两个决定性变量,在方法论上并不完整。
7.4 误区四:到账数量差额全部由滑点造成
在跨链或跨DEX的资产转移场景中,预期到账数量与实际到账数量之间的差额常被笼统归因为"滑点",但该差额通常来自至少三个可分离的环节:其一是DEX路由内部因价格影响产生的执行滑点;其二是跨链聚合环节收取的固定或按比例的服务费;其三是目标链上完成资产接收操作本身产生的成本,部分聚合器会在报价中预先从到账数量里扣除。虚构示例:某次从A链兑换100枚代币到B链,预期到账98.5枚,实际到账97.2枚,差额1.3枚;若不拆分,容易笼统记为"滑点1.3%",但拆解后可能显示其中0.6枚对应执行滑点、0.5枚对应服务费、0.2枚对应目标链费用扣除,三者机制与可预测性完全不同,合并记录会掩盖真正驱动差额的主因。
8. 小结
本文与系列此前关于预言机与价格数据研究的文章,共同构成了对“链上价格”这一对象的两种互补拆解:预言机文章处理的是“协议如何从外部信息源获取价格”,核验的重心在于信息源的多样性、更新频率与被操纵的边界条件;本文处理的是“DEX自身作为价格来源,其内部定价机制如何运作”,核验的重心在于恒定乘积、集中流动性等曲线模型下的真实深度、价格影响的可计算性,以及价格发现过程中因交易顺序被插入而产生的MEV类现象。两者都不依赖对任何具体协议的信任判断,而是分别在“外部信息如何进入协议”和“协议内部如何生成价格”两个层面,提供了可独立复核的方法路径。理解这种分工的意义在于:一次完整的价格可信度研究,往往需要同时确认交易对手所在的DEX报价没有偏离其自身池子的真实曲线,也需要确认下游读取该价格的协议没有被单一时点的池子状态误导——这是两套独立但配合使用的核验流程,缺一不可。
从方法论上回顾,本文建立的核验链条是层层递进的:第一层是流动性池深度的独立核验,要求研究者不满足于前端展示的TVL数字,而是直接读取储备量、检查代币精度与小数位处理是否正确、留意池子是否存在不对称储备或近期被大额抽走流动性的痕迹;第二层是价格影响与滑点的独立计算,要求研究者掌握恒定乘积公式与集中流动性区间内的分段计算方法,能够在不依赖任何前端模拟器的情况下,用池子的原始参数手工推导出一笔虚构规模交易的预期滑点,并将其与实际报价对比,观察偏差是否落在费率与合理误差范围之内;第三层是MEV与三明治攻击的抽象机制识别,要求研究者能够从交易顺序、Gas竞价与区块内交易排列的角度,识别价格被短暂推高或压低的模式痕迹,而不是简单地把任何滑点损失都归因于操纵;第四层则是亲自动手的实测环节,用小额资金完成一次真实的跨链或跨DEX swap,记录申报滑点与实际到账金额的差异、到账时间、隐性费率等一手数据,以此校验前三层方法论推导出的结论是否与真实执行结果一致。这四层方法环环相扣,任何一层的缺失都会让最终判断建立在未经验证的假设之上。
需要再次强调的是,本文所提供的全部计算方法、机制分类与实测流程,目的是帮助研究者建立一套可重复、可验证的分析框架,用于理解DEX定价的运作原理与潜在风险来源,而不构成对任何具体交易时机、交易路径或资产配置的建议,也不应被理解为套利、抢跑或规避他人交易的操作指南。AMM的曲线设计、流动性激励结构与MEV相关的区块构建机制仍在持续演化,本文所描述的抽象机制类别(恒定乘积、集中流动性、三明治攻击的操纵路径等)是为了说明研究方法而做的概括,具体实现细节会因协议设计不同而存在差异,研究者在将本文方法应用于任何具体场景时,都应当以自己独立读取的链上数据和实际测试结果为准,而不是以本文中的虚构数值为依据。将本篇与系列此前关于链上数据分析、预言机价格、跨链桥安全等文章结合阅读,可以在“价格如何生成”“价格如何被读取”“价格如何跨链传递”这几个层面,建立一套相对完整的链上价格可信度研究视角。
- 深度核验:直接读取池子储备量与代币精度,不依赖前端展示的TVL汇总数字
- 滑点计算:掌握恒定乘积与集中流动性区间的手工推导方法,作为报价的独立校验基准
- 机制识别:从交易顺序与区块内排列角度识别MEV类模式,区分正常滑点与被插入交易导致的价格偏移
- 实测校验:用小额资金完成真实swap,记录申报滑点、实际到账与到账时间等一手数据
- 系统视角:与预言机价格研究、跨链桥安全研究结合,分别覆盖价格生成、价格读取、价格传递三个层面
- 方法边界:所有结论以自行核实的数据为准,不构成投资建议,不针对具体协议或时机做操作性判断