兑换费是先扣还是后算:手续费入账位置的两种路线与成本差异 图 1
兑换费是先扣还是后算:手续费入账位置的两种路线与成本差异 · 图 1

很多人第一次比较两个手续费档位相同的交易池时,会默认百分之零点三就是百分之零点三,可同一笔兑换在不同池子里的成交价差却对不上这个数。差别往往不在费率本身,而在费用的入账位置:手续费是从你的输入里先扣掉、再连同剩余一起参与价格公式,还是先按公式算出结果、最后从产出端抽走。这两种写法在账面上都是同一笔费用,在成交价的构成里却是完全不同的角色,看懂这一点,才不会把价格影响和手续费混成一团糊涂账。

先看输入端扣费这条路线。以 Uniswap v2 这类恒定乘积池为例,官方文档给出的报价函数里,输入数量先乘以九百九十七、再除以一千,也就是把百分之零点三的手续费从输入中剥离,剩下百分之九十九点七才进入储备乘积的公式。这意味着手续费本身推高了池子内的输入储备,它和兑换单一起参与了价格移动:你看到的成交均价,天然已经包含了手续费造成的那一段额外推动。换句话说,在输入端扣费的池子里,价格影响这个读数并不是纯粹的曲线贡献,它把费用混在里面。

再看产出端收费这条路线。有些协议选择先按不含费用的公式推出理论产出,再乘一个折扣系数把费用直接抽走,类似税基先定、税额后加的销售税写法。在这种口径下,池子公式隐含的价格与你实际到手之间隔了一道独立乘法,费用不进入价格公式,也不推池子自己的成交曲线。理论成交价与免费用场景完全一致,费用是一行单独的账。两条路线对做市者的收入归属可以做得相同,但对用户的读数习惯完全不同。

差异会具体影响三件事。第一是滑点容忍的留量:输入端扣费的池子里,你设置最少得到多少时,手续费和价格冲击都作用在同一侧,留量必须按合成费率想;产出端抽费的池子里,冲击与费用两段各自独立,理论上更容易分别估算。第二是价格影响的测量口径:把百分之零点三费用当成价格影响的一部分统计,会系统性高估纯曲线的滑点,跨池比较时要么都含费、要么都免费,混着比必然失真。第三是跨池比价的正确姿势:比较的应该是扣完一切费用后的执行均价,而不是档位标签上的名义费率。机制示例里,一笔两腿各收千分之三的单与一笔一次性收千分之六的单,名义相同,前者还会多推一段曲线,合成成本略高,这类细节只有对齐口径后才看得见。

给普通用户一条核对动线。进场前先查协议文档对费用的描述:费率作用在输入侧还是输出侧,报价页展示的数字含不含费,价格影响字段是免费用冲击还是含费冲击。这些字段名各家不一,但同一协议内通常自洽,对照一笔小额真实成交就能验证口径。验证方法也简单:拿成交回执里的实际转入转出数量反推执行均价,再和你提交前的报价、以及池子当时储备直接算出的理论价三方对比,三个数各自的差落在哪一段,费用位置就露出来了。

两条路线还各自牵连一个展示层的细节,值得单独点破。输入端扣费的池子里,报价页给出的预估成交价通常已经含费,你在图表面板上看到的瞬时价格曲线却是不含费的边际价,同一个界面并排展示两个口径时,短窗口内的曲线跳动与你的实际成交价会出现系统性错位;产出端抽费的池子里,曲线与成交价的差异则集中显示在到手数那一行,价格曲线反而是干净的。长期盯盘做套利估算的人,应该把所用池子的扣费位置写进自己的计算器参数里,而不是每次靠经验修正。另一个容易忽略的位置是协议费的分账时点:有的协议在费用产生的瞬间就按比例分账,有的按周期结算,这决定了做市者领取界面显示的累计数时,实际可领数为什么会差一段,理解分账时点与扣费位置这对孪生参数,才算把手续费这条线从头到尾看穿。

最后提醒两个常见的误区。一是把手续费、价格影响和优先费当成三笔可以相加的独立成本:在输入端扣费型池子里,前两项已经合并体现在成交均价上,再单独加一遍就是重复计算,唯一真正独立的是给网络的执行费。二是以为费用位置无关紧要:它对长期做市收入没有本质差别,但对你估计每一笔大额兑换的到手数、对套利者计算跨池价差的安全边际,都是必须写进公式的第一项。本文所有数字关系均为机制示例,不构成投资建议。