夹子交易赚走的是什么?
让搜索者在用户前后各做一笔交易,比较用户保护线、池内价格和搜索者提取的差额。
- 解释前置交易如何改变用户得到的数量
- 用最小得到数量理解滑点保护
- 区分搜索者利润、池子手续费和用户损失
- 上一章交易提交后,谁能先看见它?
- 本章夹子交易赚走的是什么?
让搜索者在用户前后各做一笔交易,比较用户保护线、池内价格和搜索者提取的差额。
- 下一章用户制造的价格差,谁来回跑?
先想一想这几个问题
展开答案前,可以先在心里做个判断。与预期不同的内容可以加入复习列表。
Q01用户交易明明成功了,为什么仍可能被夹子伤害?+
成功只表示没有触发回滚,不表示成交公平。攻击者先改变池价,用户在仍可接受的最差价格成交,再由攻击者反向交易;损失藏在更差输出里。
夹子交易不是“池子被黑了”这么简单。它利用公开用户意图和 AMM 的曲线:搜索者先买入改变储备,用户在更差的状态里成交,搜索者再卖出,把一部分价格冲击变成自己的收益。
把三笔交易放在同一条排序里
在普通公开场景中,区块可能只执行用户交换;在夹子场景中,搜索者提出:
- 前置买入:先消耗一部分 TOKEN 深度;
- 用户交换:在新的储备上执行;
- 后置卖出:把前置买到的 TOKEN 卖回池子。
谁决定交易的顺序?
把一笔交换放进确定性池子,再观察可见性、排序、滑点保护和价值提取如何改变结果。
用宽松和严格两条最小得到数量保护线,执行同一条公开排序。
- 01交易池意图是否可见→
- 02区块排序谁先执行→
- 03共享状态节点共同重放
交易池记录不是成交,区块排序也不是赔付。只有执行才会真正移动余额和池子储备。
搜索者利润、提议者小费、池子手续费和用户输出都放在同一张账上。
先提交一笔用户交换。关键问题不是交易是否合法,而是谁能在它成为共享状态前看见并排序它。
- 01
公开池创建:120,000 积分 + 1,000 TOKEN,任何公开交易都可能改变下一笔报价。
拖动滑块可以回到此前的步骤。从那里继续操作时,后续记录会替换为新的操作序列。
观察用户的“预估输出”和“实际输出”。如果最小得到数量设得太宽,用户会接受更差的成交;如果保护线设得足够紧,用户交易会回滚,搜索者不能把这笔失败当作已成交。
展开:这一步如何实现
front = swap(searcher, X → Y)
victim = quote(pool_after_front, X → Y)
if victim.amountOut < victim.minOut:
revert(victim)
else:
execute(victim)
back = swap(searcher, Y → X)
真实协议还要处理原子性、gas 竞价、私有 bundle、路由器最小输出和多池路径。实验室只保留能看见资产流向的最小状态机。
最小得到数量在夹子交易中真正保护了什么?
读懂一笔提取
夹子提取应当放在同一张账上:用户少得到的 TOKEN、搜索者的积分变化、池子收取的手续费,以及提议者可能拿到的排序小费。只有这样,才能避免把每一个负的价格冲击都误读成同一种攻击。