最近,一个“黑客”几乎0成本,利用FlashLoan提供的贷款在一次交易中赚取了36万美金。考虑到此“破解”事件中涉及到的DeFi产品的数量,如果想要让那些对DeFi只有初步了解的人容易理解,必须要尽可能的讲清楚相关细节。在本文中,我将逐步引导读者一步一步完成“破解”操作,并在一些关键步骤中做出进一步解释。以便你可以对这次事件到底是如何发生的有一个更深刻的理解和认识,而不再只是“略知一二”。为了表述方便,我们暂且把这位“黑客”称之为Joe吧,Joe在十几秒按照顺序发起以下几笔交易:第1步:FlashLoan借:从dydx上借10000WETH。CortexLabs注释2:WETH:英文全称:Wrapped-Ether,翻译为“包装过的ETH”。因为ETH在ERC20标准被定制之前就存在了,因此ETH并不符合自己的ERC20标准。WETH可以让ETH在去中心化的交易平台上和其他符合ERC20标准的代币进行直接交易。1WETH=1ETH。后文中出现的WBTC原理和WETH一样,1WBTC=1BTC。第2步:Compound抵押借贷:5500WETH充值至Compound合约,以5500WETH作为抵押物借贷出112WBTC。第3步:dZx保证金杠杆交易:1300WETH充值到dZx合约,5倍杠杆做空。具体操作可简单理解为,从bZx借出5637.623762WETH,并通过KyberSwap在Uniswap中卖出,卖成为51.345576WBTC。这一步其实是将Uniswap中的WETH/WBTC的价格砸穿。当时正常WETH/WBTC的价格大约为0.025974,而这一步卖出的操作,基本上把Uniswap中WETH/WBTC的价格砸到了0.00910747。接近三倍。CortexLabs注释3:做空:金融市场中的一种当资产价格下跌时能获利赚钱的手段。举例说明:当你做空100ETH,你从其他地方借来了100ETH,然后在ETH价格为280美金的时候马上卖掉,你会获得28000美金。但是你仍然需要偿还100ETH。这个时候,BTC的价格已经被砸到了250美金,那么你只需要偿还100*250=25000美金。于是你还剩下3000美金,这就是你做空的收益。这里举例说明的是1倍杠杆的基础逻辑。第4步:Uniswap交易:用第2步从Compound里借出来的112BTC,在Uniswap里买回ETH,共买回6871.4127388ETH。第3步把WETH/WBTC的价格砸穿近三倍,这个时候再用从Compound中抵押借出来的112WBTC,把WETH买回来。此过程中,Uniswap中WETH/WBTC的价格又被拉升,最终买回了6871.4127388ETH。第5步:FlashLoan还:FlashLoan借出来的10000WETH中还有未使用的3200WETH,再加上第4步中用112WBTC买回的6871WETH,共10071.4127388WETH。10000WETH进行FlashLoan归还。还剩余71.4127388。到这一步,整个操作就结束了。只要这些交易在以太坊的一个区块时间内发生,并且被以太坊的下一个区块打包确认,那么这些交易就会按照发起的时间,进行执行。关键点:由于FlashLoan的条件达成,在一个区块内归还,那么整个这些步骤的交易就都可以实现。那么我们来看下,Joe的收益情况:从这5步操作,Joe看起来像是只获得了71.4127388WETH。但不要忘记:在Compound里和bZx里,Joe还有两个仓位。第一个是Compound里面的抵押借贷。抵押了5500WETH,借出了112WBTC。另一个是bZx里面的保证金杠杆交易,抵押了1300WETH,5倍杠杆卖出做空。剩余51.345576WBTC。由于bZx采用的是Uniswap中的WETH/WBTC价格作为喂价,而Uniswap中的WETH/WBTC价格又被Joe操控。所以,按照常规理解,bZx中Joe的这个仓位理应是被爆仓的。而实际情况是,这个仓位里只剩余了第3步操作中获得的51.345576WBTC。这个仓位,Joe显然并不想理会。哪怕剩余的51.345576WBTC被扣掉。而Compound中的仓位,Joe更有兴趣。按照此时ETH/BTC的正常价格大约为0.025974,Joe只要从市场上花费4300WETH,就可以买到112WBTC。然后归还给Compound,就可以赎回5500WETH。这一下可以收益大约1200WETH。因此,Joe在这次操作中获利情况应该是:1200+71.4127388=1271.4127388WETH。按照当时ETH的价格差不多在280美金,总获利大约为355880美金。那么问题到底出在哪里?
a16z将4725枚MKR转入Coinbase:金色财经报道,据链上数据分析师余烬监测,a16z将4725枚MKR(550万美元)转入Coinbase。这是a16z连续第12天转出MKR,已共计转移30933枚MKR(3591万美元)。[2023/7/29 16:05:33]
综合上面的细节步骤来看,问题出在了bZx的保证金杠杆交易智能合约中。首先,bZx采用了Uniswap中的WETH/WBTC价格作为喂价。而Uniswap里面的深度又不足。其次,bZx中的保证金杠杆交易,无论做多或者做空,买入或卖出的市场也是Uniswap。也就是说,bZx本身就会对Uniswap的价格造成影响。最关键的,bZx保证金杠杆交易,在Uniswap上面的价格被砸穿后,这个仓位的保证金早就严重不足,但又没有既定的阻止办法。后记:
Haru Invest:考虑分阶段出售公司资产,正在制定潜在可出售清单:7月6日消息,已暂停存取款的加密金融公司 Haru Invest 发文称,公司正在制定一份潜在可出售公司资产清单,目标是在出售公司资产时尽量减少价值损失,正在考虑分阶段出售公司资产。
此外,Haru 称目前正在建立一个数据库,以识别用户的债权和债务,一旦确认损失金额并确定资产分配方案后,计划及时分阶段分配资产。具体分配时间尚未确定。[2023/7/6 22:21:50]
此文目的并非是在事件发生后,再去指责任何DeFi产品的漏洞或者对这位我们称之为Joe的黑客有什么褒贬。此文目的,仅仅是为了让更多普通加密货币领域参与者对DeFi产品逻辑有更进一步的理解,并且是通过尽可能简单易懂的方式。同时也希望让大家看到,导致此次事件的根本原因是什么,开发者在后续进行其他DeFi产品设计的时候,也应该从中吸取到教训。再升华一下,此次事件其实也引起了DeFi领域关于DeFi产品到底要不要设置所谓“管理员权限”的讨论。此文作为一个引子,我们后续可以继续针对此类内容分享给Cortex中文社区。CortexLabs注释1:FlashLoan,中文直译名称为闪电贷。“闪电贷”是在一个区块内在不同DeFi借贷平台发起多笔交易的方式,也就是不同资产和债务之间的转贷。“闪电贷”也是一种无需抵押物的借贷方式,前提是贷款的发行和偿还必须在以太坊同一个区块内完成,按照目前以太坊的出块速度,大约13秒。
欧盟、德国银行业协会联合发起Tokenise Europe 2025倡议:2月8日消息,Tokenise Europe 2025旨在推动采用Token化,使欧盟成为该领域的领跑者并保护其主权。它由欧盟委员会与德国银行协会共同创立,咨询公司Roland Berger提供支持。迄今为止,已有20家公司加入了该协会,其中德国、西班牙和列支敦士登处于领先地位。涉及四家全球性银行——BBVA、德国商业银行、德意志银行和桑坦德银行——以及少数几家大型工业公司,如戴姆勒卡车、雷诺和雷普索尔。除了德国银行业协会外,意大利和列支敦士登的同行以及支付公司Iberpay和Worldline也参与其中。(Ledger Insights)[2023/2/9 11:55:32]
美国前财长萨默斯:通货膨胀很难消失:7月14日消息,美国前财长萨默斯表示,通货膨胀很难消失。财政前景将迅速恶化。如果失业率不达到6%,我们就无法摆脱困境。需要大幅减速才能恢复正常。(金十)[2022/7/14 2:11:28]
跨链DeFi平台Umee集成智能合约安全监控项目Forta Network:金色财经消息,跨链DeFi平台Umee宣布集成智能合约安全监控项目Forta Network,以及时响应技术问题。Forta的警报集成还将使Umee能够更灵活地对检测到的风险和问题采取行动。[2022/6/11 4:17:36]
正文共:614字预计阅读时间:3分钟昨天上午,一笔略显奇特的大额转账引起了我们的注意。 这笔发生在3月11日上午的交易在输入侧有28笔输入,总金额为1000BTC,输出地址为3CU4AYJH23.
1900/1/1 0:00:00最近看到一篇文章《前中国银行副行长王永利:还有人相信比特币是数字黄金或数字货币吗》这篇文章要表达的观点概括说来就是一点:“人们应充分认识到,它们不可能成为「数字黄金」.
1900/1/1 0:00:00一、IPFS的诞生2015年,协议实验室推出IPFS协议,并于2017年,推出Filecoin项目,尽管1CO仅针对授权投资者进行,但它筹集了有史以来的最高金额.
1900/1/1 0:00:00编者按:本文来自Cointelegraph中文,作者:HorusHughes,Odaily星球日报经授权转载.
1900/1/1 0:00:00编者按:本文来自加密谷Live,作者:BitMEXResearch,翻译:子铭,Odaily星球日报经授权转载。在该文章中我们分析了央行数字货币的概念.
1900/1/1 0:00:00编者按:本文来自:Cointelegraph中文,作者:SamuelHaig,Odaily星球日报经授权转载.
1900/1/1 0:00:00