5.10 闪电贷及EIP-3156:一种闪电贷标准
Flash Loans or Flash Loan?
什么是闪电贷?
在常规贷款中,您需要先准备好抵押资产,然后去特定机构提出申请,然后等待几天乃至几个月,结果可能是批准,也可能是驳回(然后再修订资料再花数天乃至数月)。然后还必须在规定的时间范围内以约定的利率偿还贷款。闪电贷是特殊的,因为这些都不复存在,没有人必须申请,甚至都不需要抵押,并且每个人的闪电贷都会被批准。当然,也没有贷款人能够跑路违约。
闪电贷的基础是智能合约的免许可和可自由组合的特色。
闪电贷是 DeFi 无抵押贷款的新思路,其前提是所有操作都在一笔交易(一个区块,以太坊大约是13秒)中完成,它允许借款人无需抵押资产即可实现借贷。因为代码保证同时偿还借款,如果资金没有返还,那么交易会被还原,即撤消之前执行的所有操作,从而确保协议和资金的安全。
闪电贷的最早应用是无担保借贷,由 Aave 于 2020 年初率先推出。
闪电贷应用案例
操控 DeFi 贷款协议 bZx 的两则事件:
案例1
某人通过闪电贷 ,从去中心化加密货币衍生品交易平台 dYdX 借出了 1 万枚 ETH,使用其中 5000 ETH 在 Compound 借出 112 wBTC,另外 5000 ETH 到 Fulcrum(bZx 协议)上开了 wBTC 的空单(最终由Kyber从Uniswap采购),再利用 Compound 借到的 wBTC 去 Uniswap 砸盘,导致 Fulcrum 空仓大赚,然后归还了最初借到的 1 万枚 ETH,在这个过程中,某人获得了价值 35 万美元的 ETH 的收益。所有这些操作,一气呵成!
案例2
数天后,黑客贷入ETH,用ETH大量买入sUSD,Kyber上的sUSD价格上升了一倍。此时,bZx认为sUD的价值是2美元而不是1美元。于是攻击者在bZx上用sUSD提取了比正常情况下更多的ETH贷款。最后,攻击者偿还了原来的ETH贷款,并带著剩下的ETH跑了。
B.Protocol操纵 MakerDAO 治理投票事件
DeFi 流动性聚合协议 B.Protocol 因为希望被加进 MakerDAO 价格预言机的白名单中,就在 MakerDAO 的治理投票中,利用闪电贷大量借入 MKR 藉此获取大量投票权,成功让提案以“100% 得票率”通过。
B.Protocol 先用 5 万枚 ETH 透过 dYdX 和 AAVE,借出 1.3 万枚 MKR 治理代币,锁定借出的 MKR 并对其自己的提案灌入大量同意票,接著再解锁 MKR 以将资金迅速返还给借出资产的 AAVE 和 dYdX 平台。

要点?
您必须在与收到贷款时的同一笔交易中偿还贷款。从贷方的角度来看,这是完全合理的。如果您立即偿还贷款,贷方就没有风险。因此,他可以将这笔贷款提供给任何需要的人。
同一笔交易中必须偿还的贷款有什么好处?
这无疑极大地限制了您的选择,但由于以太坊的力量,我们仍然可以做很多事情。最常见的是,您可以将其用于套利,同时大幅降低您自己的资本要求。无需在多个账户中拥有数百万美元即可实现利润最大化。而是采取闪贷,在一笔交易中尽可能多地套利,然后在交易结束时偿还贷款。
不幸的是,闪电贷经常被用于黑客攻击。如果某个智能合约中存在有利可图的纰漏,闪电贷款可让任何人利用该错误。黑客常常因此获得数百万美元甚至更高的利润,而不是仅仅获得数千美元。
更新:Alberto 本人提出的另一个很好的用例是债务再融资。 “想象一下,你已经将ETH锁仓到Aave并 借出Dai,为此你需要支付10%的贷款利息。然后你使用Dai买了房子,大概十年都不会还清。现在,Compound 支持你以ETH抵押品借出Dai,仅收取9%的利息。使用Dai的一笔闪电贷,你可以偿还Aave的债务,取回放置在 Compound中的ETH抵押品。你以9%的利率从Compound借出Dai并偿还了闪电带宽。简单地说,你将10%的Aave贷款,再融资为9%的复合贷款。“
什么是EIP-3156闪电贷标准?
许多协议都提供了可供任何人使用的闪电贷,例如dYdX、Aave和Uniswap。不幸的是,这些接口彼此截然不同。这不仅对使用这些闪电贷的用户不利,开发者还必须学习如何在每个生态系统中选用闪电贷。显而易见的是,当这些开发者试图使用其中之一设计自己所需的闪电贷机制时,它们带来的复杂性(噪音干扰太多)对于其dApp的安全性也是不利的。
这就是EIP-3156提出的意义,它旨在支持各种不同的借贷机制。
兼容现有闪电贷协议的EIP-3156封装
EIP-3156封装器是个有趣的项目。 它可以将现存的闪电贷协议封装为EIP-3156兼容接口,目前已经支持如下协议:
接口IERC3156FlashLender
贷方接口必须由想要提供闪电贷的服务实现。函数 maxFlashLoan 和 flashFee 的作用是不言自明的。
使用 flashLoan 函数,您将能够执行闪电贷。接收方地址必须指向一个实现了borrower接口的合约。除了调用之外,还可以传递任意数据。
该函数的实现的唯一要求是您必须从接收器调用 onFlashLoan 回调:
当然了,既然现有的借贷项目都已经失败,这个标准也就没了未来!
但是其技术细节还是值得我们学习!
最后更新于
这有帮助吗?