uniswap无法卖出怎么办,uniswap无法正常卖出的原因

  

  最近,一个“黑客”几乎零成本地使用了闪贷。具体见注1】提供的贷款在一次交易中赚了36万美元(这个事件是否属于“黑客攻击”的范畴还存在较大争议,因为从技术上讲,这个“黑客”没有做任何违法的事情)。考虑到此次“破解”事件中涉及的DeFi产品数量之多,如果要让对DeFi只有初步了解的人容易理解,就有必要尽可能清晰地解释相关细节。在本文中,我将引导读者一步步完成“破解”,并在一些关键步骤中做进一步说明。让你对这件事是怎么发生的有更深入的了解,而不是只知道一二。   

  

  为了表达方便,我们暂且称这个“黑客”为乔。Joe在十几秒(一个以太坊块的时间)内按顺序发起了以下交易:   

  

  第一步:闪贷借款:从dydx借款10000 WETH。   

  

  CortexLabs注2: WETH:英文全称:Wrapped-Ether,翻译为“打包的ETH”。因为ETH在ERC20标准定制之前就已经存在,所以ETH不符合自己的ERC20标准。WETH允许ETH在一个分散的交易平台上直接与其他符合ERC20标准的令牌进行交易。1WETH=1ETH .本文后面出现的WBTC原理和WETH一样,1WBTC=1BTC。   

  

  第二步:复合抵押贷款:5500湿充值到复合合同,用5500湿做抵押借112 WBTC。   

  

  第三步:dZx保证金杠杆交易:1300 WETH充值到dZx合约,5倍杠杆做空。具体操作可以简单理解为从bZx借出5637.623762 WETH,通过KyberSwap在Uniswap卖出,变成了51.345576 WBTC。   

  

  这一步其实就是把WETH/WBTC在Uniswap的价格砸了。   

  

  当时WETH/WBTC的正常价格是0.025974左右,但这一步卖出基本把WETH/WBTC在Uniswap的价格敲到了0.00910747。接近三倍。   

  

  CortexLabs注3:卖空:金融市场资产价格下跌时的一种赚钱手段。说明:当你做空100个ETH时,你从其他地方借入100个ETH,然后在ETH价格为280美元时立即卖出(这里有一个例子),你将获得28000美元。但是你还需要偿还100 ETH。这个时候BTC的价格已经被砸到250美元,那么你只需要偿还100 * 250=25000美元。所以你还有3000美元,这就是你做空的结果。此处说明了一次性杠杆的基本逻辑。   

  

  第四步:Uniswap交易:用第二步从大院里借的112 BTC回购Uniswap里的ETH,回购总数为6880 ETH。46880.88686886681   

  

  第三步:把WETH/WBTC的价格打近三倍。这时,用从复利抵押的112 WBTC把WETH买回来。另一方面,在Uniswap中WETH/WBTC的价格再次被抬高,最终ETH被回购。49660.68868688666   

  

  第五步:闪贷还:闪贷借出的10000 wet中,还有未使用的3200 WETH,加上第四步用112 WBTC回购的6871 WETH,一共是3200 WETH,用来归还闪贷。剩下的71.4127388。   

  

  至此,整个操作结束。   

  

  只要这些交易发生在以太坊的一个区块,并且被以太坊的下一个区块打包确认,这些交易就会按照发起的时间执行。重点:由于满足闪贷的条件,并且是批量归还,所以可以实现这几个步骤的整体交易。   

  

  让我们来看看乔的收入:   

  

  从这五个步骤来看,乔看起来好像只得到71.4127388 WETH。   

  

  但是别忘了:乔还有Compound和bZx两个位置。   

  

  首先是大院里的抵押贷款。抵押5500 WETH,贷款112 WBTC。   

  

  另一种是bZx的保证金杠杆交易,抵押1300 WETH,5倍杠杆做空。剩余51.345576 WBTC。   

  

  由于bZx采用Uniswap中WETH/WBTC的价格作为投料价格,而Uniswap中WETH/WBTC的价格由乔控制。所以按照常规理解,Joe在bZx的地位应该已经被爆了。实际上,这个位置只剩下51.345576 WBTC了。   

  

  乔显然不在乎这个职位。即使扣除剩余的51.345576 WBTC。(事实上,bZx确实扣除了51.345576 WBTC。)   

  

  乔对大院里的位置更感兴趣。此时ETH/BTC的正常价格约为0.025974,乔只要从市场上花4300 WETH就能买到112个WBTC。然后还复利,可以赎回5500 WETH。这可以生产大约1200 WETH。   

  

  因此,乔从这次经营中获得的利润应该是:   

  

  1200 71.4127388=1271.4127388 W   

ETH。

  

按照当时ETH的价格差不多在280美金,总获利大约为355880美金。

  

那么问题到底出在哪里?

  

综合上面的细节步骤来看,问题出在了bZx的保证金杠杆交易智能合约中。

  

首先,bZx采用了Uniswap中的WETH/WBTC价格作为喂价。而Uniswap里面的深度又不足。

  

其次, bZx中的保证金杠杆交易,无论做多或者做空,买入或卖出的市场也是Uniswap。也就是说,bZx本身就会对Uniswap的价格造成影响。

  

最关键的,bZx保证金杠杆交易,在Uniswap上面的价格被砸穿(其实是被bZx自己借出去的币砸穿)后,这个仓位的保证金早就严重不足,但又没有既定的阻止办法。

  

后记:

  

此文目的并非是在事件发生后,再去指责任何DeFi产品的漏洞或者对这位我们称之为Joe的黑客有什么褒贬。

  

此文目的,仅仅是为了让更多普通加密货币领域参与者对DeFi产品逻辑有更进一步的理解,并且是通过尽可能简单易懂的方式。

  

同时也希望让大家看到,导致此次事件的根本原因是什么,开发者在后续进行其他DeFi产品设计的时候,也应该从中吸取到教训。

  

再升华一下,此次事件其实也引起了DeFi领域关于DeFi产品到底要不要设置所谓“管理员权限”的讨论。此文作为一个引子,我们后续可以继续针对此类内容分享给Cortex中文社区。

  

CortexLabs注释1:Flash Loan,中文直译名称为闪电贷。“闪电贷”是在一个区块内在不同 DeFi 借贷平台发起多笔交易的方式,也就是不同资产和债务之间的转贷。“闪电贷”也是一种无需抵押物的借贷方式,前提是贷款的发行和偿还必须在以太坊同一个区块内完成,按照目前以太坊的出块速度,大约 13 秒。

相关文章