声明:本文旨在传递更多市场信息,不构成任何投资建议。文章仅代表作者观点,不代表火星财经官方立场。
边肖:记得要集中注意力。
来源:星球日报
原标题:简单易懂的5个步骤:如何利用DeFi漏洞获利36万美元?
最近一个“黑客”几乎零成本的使用了闪贷。详见注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 wet充值到复合合同中,并以5500 wet作为抵押贷款112 WBTC。
第三步:dZx保证金杠杆交易:1300 WETH充值到dZx合约,5倍杠杆做空。具体操作可以简单理解为从bZx借出5637.623762 WETH并通过KyberSwap在Uniswap卖出,卖出为51.76WBTC.
这一步其实就是把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美元,这是你做空的收益。这里有一个例子来说明1倍杠杆的基本逻辑。
第四步:Uniswap交易:用第二步中从Compound借的112 BTC回购Uniswap中的ETH,并全部回购ETH。46366.88668686616
第三步,把WETH/WBTC的价格砸近三倍。这时候我们就用复利抵押的112 WBTC回购WETH。在这个过程中,WETH/WBTC在Uniswap的价格再次被推高,最终第8架被回购。49686.88868888686
第五步:闪贷还:闪贷借出的10000 wet中,还有3200 WETH未使用,加上第四步用112 WBTC回购的6871 WETH,总共1000 wet,用于闪贷归还。还剩下71英镑。48660.68686868661
至此,整个操作结束。
只要这些交易发生在以太坊的一个区块内,并且被以太坊的下一个区块打包确认,那么这些交易就会按照发起的时间来执行。重点:由于满足闪贷的条件,一次性归还,所以可以实现这几个步骤的整体交易。
那么让我们来看看乔的收入:
从这五步来看,乔好像只拿到了71.88 WETH。
但是别忘了:乔还有Compound和bZx两个位置。
第一个是大院里的抵押贷款。抵押5500 WETH,出借112 WBTC。
另一个是bZx的保证金杠杆交易,抵押了1300 WETH,5倍杠杆做空。剩余51.345576 WBTC。
因为bZx使用Uniswap中的WETH/WBTC价格作为饲料价格,而Uniswap中的WETH/WBTC价格由Joe控制。所以按照常规理解,Joe在bZx的地位应该已经被爆了。事实上,在第三次操作中获得的仅51.6WBTC留在该位置。
乔显然不想关注这个位置。即使扣除剩余的51.345576 WBTC。(其实bZx确实扣了这个51.345576 WBTC。)
乔对大院里的位置更感兴趣。按照此时ETH/BTC的正常价格约为0.025974,乔从市场上花4300 WETH可以买到112个WBTC。然后还复利,可以赎回5500 WETH。这样可以受益1200 WETH左右。
因此,乔在这次操作中的利润应该是:
1200 71.4127388=1271.4127388 WETH .
按照当时ETH的价格差不多280美元,总利润大概355880美元。
那么问题出在哪里?综合以上详细步骤,问题出在bZx的保证金杠杆交易智能合约上。
首先,bZx采用Uniswap中的WETH/WBTC价格作为饲料价格。而Uniswap中的深度不够。
其次,bZx的保证金杠杆交易,不管是做多还是做空,也是Uniswap。换句话说,bZx本身会对Uniswap的价格产生影响。
关键的是,bZx保证金杠杆交易,在Uniswap上的价格被砸(实际上是被bZx自己借出去的钱砸的)之后,这个头寸的保证金已经严重不足,却没有既定的办法阻止。
后记:本文的目的不是批评DeFi产品的任何漏洞,也不是在事件发生后批评这个我们称之为Joe的黑客。
本文的目的只是为了让更多普通加密货币领域的参与者对DeFi产品的逻辑有进一步的了解,而且是尽可能的简单易懂。
同时希望大家能看到这次事件的根本原因是什么,开发者在以后设计其他DeFi产品的时候也要借鉴。
进一步升华,这个事件其实已经在DeFi领域引起了一场关于DeFi产品是否应该设置所谓“管理员权限”的讨论。作为介绍,以后可以继续把这类内容分享给Cortex中文社区。
CortexLabs Note 1:闪贷,其中文直译叫闪电贷。“闪电贷”是一种在不同的DeFi借贷平台上批量发起多笔交易的方式,即在不同的资产和债务之间转移贷款。“闪电贷”也是一种无抵押物的贷款方式,前提是贷款的发放和还款必须在以太坊的同一街区完成。按照以太坊目前的速度,大概需要13秒。