鸵鸟区块链

Bzx闪电贷事件之套利逻辑,盈亏分析和敏感度测试

鸵鸟区块链速递 2020-02-19 12:01 3098
摘要:

Bzx闪电贷事件之套利逻辑

Bzx事件的五个套利步骤,PC:Peckshield

本次Bzx闪电贷事件的区块链技术分析已经有不少了,但是数据和商业逻辑分析除了一些基本事实数据以外,还有所欠缺,所以这里尝试一下

想更清楚了解事件经过和看技术分析的建议看这几个链接 (英文)

Bzx官方回顾: 

https://bzx.network/blog/postmortem-ethdenver

Palkeo 的分析: 

https://www.palkeo.com/en/projets/ethereum/bzx2.html

Peckshield的分析: 

https://medium.com/@peckshield/bzx-hack-full-disclosure-with-detailed-profit-analysis-e6b1fa9b18fc

背景与逻辑

这里先补一些背景,Bzx是一个杠杆交易平台,所以自然分为两部分,借贷和交易,借贷是Bzx自己的,交易接的是Kyber,Kyber旗下有很多流动性池子,其中一个是Uniswap,Kyber的价格体系是在旗下池子里面选最优价格。在本次事件中,最优价格一直用的是Uniswap,所以Kyber基本没有发挥作用。另外杠杆交易既可以在Bzx一样的平台里面完成,也可以自己去第三方平台借钱然后交易。就像本次事件的另一部分就是在Compound借钱去Uniswap交易。简单总结,本次事件的主要角色,有两个借贷平台,Bzx,Compound,一个交易平台Uniswap。

而这里金融套利的本质,有一个传统金融案例的类比,google财报之前,同时一百倍开多开空,只要财报波动幅度超过1%,一头爆仓另一头就是送钱。比如涨了5%,那么做空的爆仓,一倍直接没了。做多的赚钱,赚五倍,两头抵消,交易者赚走四倍,平台损失四倍。这套逻辑在传统市场已经被玩坏,被禁止了。

在本次defi事件,两头的借钱加杠杆的平台不同,一头Bzx借钱交易爆仓,另一头Compound的交易赚钱。但由于交易平台是没有对手方的Uniswap,所以逻辑并不完全一样。这里就默认大家明白Uniswap的基本产品逻辑和价格走势规律了。

Flashloan闪电贷只提供了本金,和具体的金融套利逻辑无关。一开始从Dydx Flashloan借10000eth是个需要简化的信息,因为3200eth没用,所以直接理解为借了6800个eth即可。借五万十万都是可以的,但并没有用上。

说Oracle的,其实也没啥关系,锅也不归Kyber。要说背锅的话,Bzx背一部分,Uniswap背一部分吧

盈亏分析和敏感性测试浅析

从头开始说起,先是从Dydx用flashloan借了6800个eth,获得了操作本金,其中1300去了Bzx,5500去了Compound。然后Bzx这头5倍杠杆(用1300eth抵押借到了5637eth)做多,Compound这头借了券(用5500eth抵押,借了112btc,等值4400eth)来做空。效果是Bzx侧5637eth换成了51个btc,之后Compound侧112个btc换成了6871个eth。

价格波动方面,原来正常btc/eth的价格大概是39,在Uniswap的曲线上,Bzx拉盘是拉到了均价108,也就意味着拉盘结束的时候价格可能是200,Compound这头沿着同一曲线砸回来,抵消完以后,超过的部分均价约20 【(6871-5637)/(112-51)=20】,所以最低价格可能在10

Compound正常1.25倍超抵押,拿出来一倍等值btc,硬生生通过Uniswap曲线拉盘砸盘来回走两趟,卖出了1.56倍的eth,超过了抵押额。(从这里往后,1倍指112btc或4400eth)

最后盈亏数据结果是,Compound这头交易赚了0.56倍(5500eth的押金,拿出4400eth等值btc,卖成了6871eth=2471eth)。Bzx那头交易本身亏了应该有0.83倍(5637-2000=3637eth),但Bzx的collateral只有0.3倍(1300eth),所以净亏损大约0.53倍(2337eth),由Bzx的储户承担了,储户是亏损本金的。这里体现的问题,是Bzx这侧的大单Uniswap交易,明明会导致collateral不够用爆仓,却没有被中止。

对黑客来说,两头加起来,Compound这头赚的0.56倍(2471eth),需要扣掉Bzx这头的成本1300eth,剩下1171eth,盈利大约0.26倍

如果算总账的话,Bzx这头亏损0.83倍,Compound盈利0.56倍,那剩下的0.27倍去哪里了呢?这个要怪Uniswap的滑点了。之前提到Uniswap来回走两遍以后,超过的部分均价约20 【(6871-5637)/(112-51)=20】,所以这里是亏损出货的,大概是61个btc在Uniswap上以对折的均价出售。占便宜的是Uniswap上的做市池子了

问题1:Uniswap这曲线来回走两遍,可以互相抵消吗,能不能只走抵消以后剩余的部分?

答案是不行的。如果只讨论互相抵消的部分,我们可以看见,本来是Bzx侧有5637个eth,Compound侧有51个btc,第一步拉完(Bzx侧卖eth换btc)以后,Bzx侧剩下51个btc。第二步砸完(Compound侧卖btc换eth)以后,Compound侧留下了5637个eth。可以说是一拉一砸,完成了财富从Bzx侧到Compound侧的转移,这是Uniswap特有的现象,在传统世界没有对标,这也是本次金融套利的最核心逻辑。所以,为了造出Compound这头盈利0.56倍,Uniswap曲线走两次是必要的,必须Bzx这头先拉到顶,然后Compound这头砸下来,再算上额外的未抵消的部分,才能卖出6871eth,盈利0.56倍(2471eth)。

问题2:如果Bzx这边风控没问题没砸穿仓,就是只花完1300eth的collateral,储户没损失,那么黑客能赚钱吗?

答案是不确定,如果赚的话,肯定比现在的少,也有可能亏损,因为Uniswap曲线没走到那么极端的位置,之后1倍的资金拉盘是拉不出1.56倍的效果的,如果1.3倍都没拉出来的话,那就覆盖不了Bzx这边1300eth的成本,就会亏钱,就算覆盖了,也比之前少赚。

问题3:如果Bzx这头借了2800eth(原来是1300eth),然后只开2倍杠杆做多(总共借出数量保持5637个eth,行不行?

Bzx这头仍然会爆仓,因为亏损3637eth,collateral只有2800eth。另一头,Compound赚钱2471eth,少于这边损失的collateral 2800eth,所以黑客亏损329eth,Bzx储户损失837eth。这样会形成n输的局面……只有Uniswap的流动性提供者获利了。当然了,这是执行交易的情况下。黑客如果发现这次交易不赚钱的话,交易并不会执行。

问题4:如果Bzx借了1300eth,但可以8倍做多(10400,明显超过事实借出的5637个,行不行?

当拉盘用了5637个eth的时候,价格已经达到了200左右,之后价格只会更差,所以假设多出来4763个eth只换到了15个btc,总共是10400eth换到66个btc。另一头112个btc,肯定可以把10400个eth都买回来,但多出来46个btc,少于之前多出来61个btc。这46个btc均价应该会比那61个的均价20稍高,比如22,那么总共112个btc卖掉获得了11412个eth。相比本金4400eth赚了1.6倍,扣掉0.3倍(1300个eth),黑客赚钱1.3倍,5700个eth,远高于之前1171个eth。Bzx储户亏损会比之前更多 

注:

  1. 本文所有的btc都是指wbtc

  2. 本文后面几个问题,对于Uniswap的曲线都是拍脑袋估算数据,欢迎大家建模实际跑一下。盈亏数据也比较匆忙大都是口算的,欢迎验算指正

加入鸵鸟社群交流,微信id:tuoniao02


来源:嘉里小黄鸭

作者:张天然

本文经「原本」原创认证,作者鸵鸟区块链,访问yuanben.io查询【2K27JZH4】获取授权信息。

声明: 鸵鸟区块链所有发布内容均为原创或授权发布,如需转载,请务必注明文章作者以及来源:鸵鸟区块链(微信公众号:MyTuoniao),任何不尊重原创的行为鸵鸟区块链都将进行责任追究!鸵鸟区块链报道和发布内容,不构成任何投资建议。

鸵鸟区块链速递

要输就输给追求

1246 篇 作品
402.9W 总阅读量