背景
2021年1月27日,根据慢雾区情报,苏轼再次遭到袭击。这一次,问题是digg-wbtc事务对的处理费用是由攻击者通过特殊手段收取的。接到情报后,慢雾安保小组立即介入相关事件分析。以下是这次袭击的细节。
寿司师是什么
Sushimaker是sushiswap协议的重要组成部分,它负责收取sushiswap中每个交易对的服务费,通过设置每个交易对的路由,最终将不同交易对的服务费转换成sushi代币,并返回给sushi代币持有者。此过程在寿司Maker合同上进行。
谈常数积
常数积的公式很简单。在不收取手续费的情况下,常数积的公式为
也就是说,每笔交易都遵循这个公式,交易前后K值保持不变。在交换过程中,由于K的值保持不变,所以公式是这样的
其中X表示要出售的代币,Y表示要购买的代币,那么每次可以交换的代币数量将如下所示(具体的派生过程将不演示:D)
从公式中可以看出,输出代币y的交换量上限取决于y代币的数量,而与X代币的数量无关。反之,如果要卖出的X代币数量大,而Y代币数量少,那么大量的X代币只能换成少量的Y代币代币,交换价格会与正常交易价格有很大的偏离,这就是所谓的滑动点,也是这次攻击的关键。
攻击过程
2020年11月30日,寿司店曾因寿司商问题发生过一起攻击事件(详情请参见:与小伯达一起分析寿司店攻击事件的全过程)。此攻击与第一次攻击类似,但过程不同。与旧合约相比,在新合约中,服务费会通过bridgefor功能为不同交易对中的代币找到具体的交换路径,然后进行交换。
brdigeforfunction的逻辑如下:
根据bridgefor的逻辑不难发现,如果没有手动设置特定货币的桥,则默认桥为wETH。也就是说,如果没有设置过桥,默认情况是将手续费转换为湿费。Digg没有通过立根桥设置相应的桥梁。
但这里还有一个问题,就是在交换过程中,如果交易对不存在,交换过程就会失败。在这种攻击中,digg-wet一开始并不存在,因此攻击者提前创建digg-wet事务对,然后添加少量的流动性。此时,如果有手续费交换,根据上述常数产品的特点,dig wETH的流动性很小,即dig wETH中wETH的上限很小,而sushimaker中要转换的手续费金额相对较大,这种交换将导致一个巨大的滑动点。交换的过程将使digg wETH到digg wETH的交易价格上涨,digg wETH的digg服务费收入将全部归digg wETH交易。通过观察digg-wETH交易对的流动性,我们发现当流动性**时,2800美元以下的流动性**。这一结果也可以通过公式的推导得到验证。
攻击者在sushimaker中完成费用转换后,由于Digg wETH交易对中wETH对Digg的价格已经提高,少量的wETH可以转换成大量的Digg,Digg的金额正好是Digg wbtc交易对费用收入的大部分。
总结
这种攻击与sushiswap的第一次攻击相似,它操纵交易对的交换价格来产生利润。但过程不同。第一次攻击是因为攻击者利用LP token本身和其他token创建新的交易对,并通过操纵初始流动性操纵新交易对的价格来获利。然而,这种攻击利用了Digg无法控制攻击者是否创建交易对和控制初始交易价格的优势,导致了费用交换过程中的巨大滑动点。攻击者只需使用少量的Digg和wETH来提供初始流动性即可获得巨额利润。
相关参考链接如下:
寿司制作收费交易:
https://ETHerscan.io/tx/0x90fb0c9976361f537330a5617a404045ffb3fef5972cf67b531386014eeae7a9
攻击者套利交易:
https://ETHerscan.io/tx/0x0af5a6d2d8b49f68dcfd4599a0e767450e76e08a5aeba9b3d534a60d308e60b
Digg wETH流动性详情:
https://www.sushiswap.fi/pair/0xf41e354eb138b328d56957b36b7f814826708724
寿司第一次攻击的细节:
https://mp.weixin.qq.com/s/-Vp9bPSqxE0yw2hk青奥会
文章标题:如何用常数积来遮住?苏轼第二次进攻浅析
文章链接:https://www.btchangqing.cn/186413.html
更新时间:2021年01月28日
本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。