最佳三明治:如何利用区块链爱好者

最佳三明治:如何利用区块链爱好者

Mark Richardson

Mark Richardson

2023年8月2日

2023年8月2日

介绍

我经常有机会与一个勤奋好学的观众讨论我们行业的各个方面。从讲故事上看,三明治攻击是其中经常被讨论的话题。我怀疑对这种特定攻击向量的兴趣归因于其充满威胁和恐吓的性质。事实上,三明治攻击是DeFi社区共享的相当可信的恐惧之一;然而,令人惊讶的是其成员中能够准确描述三明治攻击究竟是什么,更别说推导出执行此类攻击所需的方程了。我不得不承认,我至少要为Typical Defi pedestrian表现出的令人失望的博学程度承担部分责任。经验表明我未能引导一个能干而愿意了解他们礼貌要求并且理所应当得到的理解。我的决心在于在这里披露执行三明治攻击的全部行程以及允许行业顶级剥削者从脆弱的交易中彻底榨干每一笔可用wei的价值的数学方法。在任何其他情况下,发布如此容易武器化的信息可能会引起道德方面的合理质疑。不幸的是,那些试图武器化它的人已经这样做了,因此我认为我们毫无不利后果地打开我们对手的黑盒并一起探索它们的内容。


预期行为

冒昧地说,我想开始研究用户针对一个常数产品流动性池进行交易并期望得到他们从与之交互的智能合约中得出的代币的情况。也就是说,熟悉的交换功能的结果(方程1)。为了区分攻击者和用户关联的输入和输出,我将使用下标a和u。此外,让x总是表示将从攻击者或用户发送到流动性池的代币,并让y总是表示从流动性池发送到攻击者或用户的代币。我还将遵守表示流动性池交换费用的小写希腊字母δ,和用大写形式Δ表示交易金额。假设x、y、δ、Δx、Δy始终是正实数,其中Δx和Δy是从用户或攻击者钱包中分别减去并添加到流动性池余额的代币数量。



假设现在有一个流动性池,其中存有500 ETH和100万美元的USDC代币,代表约200万美元的综合总价值,可推断出ETH的市场价格接近2000美元。为方便起见,假设池费率δ固定为0.003(即0.3%,或30个基点)。然后,假设有一个用户希望用20 ETH进行交换(即约40K美元的名义价值)与池子交易。在考虑价格滑点的影响和交易费用之后,预期结果总结在图1中。


图1:(天真的)预期结果。 20 ETH与由500 ETH和1,000,000 U.S.D.C.组成的常数产品流动性池以及近200万美元的总流动性进行交换,交换后得到38,346.1538 USDC。


以上所描述的是所期望的结果,如果我们容许自己认为这些攻击向量是无法克服的,或者更糟糕的是,将作为被执掌的基础设施所要求的气体成本外,还会成为内建的税务工具。另外,想象一下,它已经意识到这些三明治攻击存在许多不必要的步骤,最好的办法是在不执行这些多余的步骤的情况下达到相同的结果。我故意夸张的,但我保证这并不重要。重点是要考虑还原主义的观点。

  1. 用户决定在带有0.3%费率和近200万美元流动性的流动性池上用ETH交换USDC。


  2. 他们希望将20 ETH发送到流动性池,并预期收到38,346.1538 USDC,然后进行交易。


  3. 一位陌生人突然出现,毫无预兆且毫无理由地拿走了12.2767 ETH。


  4. 余下的7.7233 ETH被发送到流动性池进行交换。


  5. 然后流动性池立即将其费率更改为53.63%(即增加了17,776.9349%)。


  6. 进行交换,用户按照新费率(方程1)得到了7,053.5213 USDC,与他们预期的38,346.1538 USDC形成了对比。


  7. 最后,流动性池将其费率立即恢复到用户交易前的费率(即恢复到0.3%)。



图5:总体结果。 用户发送20ETH,被攻击者拦截,从交易中取走12.2767ETH,仅留下7.7233ETH进行交易。然后,流动性池将其费率从0.3%更改为53.63%,然后进行交换。用户根据熟悉的交换算法(方程1)以新费率得到7,053.5213 USDC。


精确三明治说明








图6:Q与Δxₐ。 这两个图都是由方程3得出的;a)显示在线性标度上,b)以对数标度绘制 Δxₐ 维度。 b)中的峰值表示前期交易组件的最佳 Δxₐ 代币数量。












结论
















社交

阿尔法!阿尔法!
读所有关于它的信息!

阿尔法!阿尔法!
读所有关于它的信息!

订阅获取有关碳DeFi的最新更新

订阅获取有关碳DeFi的最新更新