【DeFi学堂】空手套白狼的利器-闪电贷原理及应用案例

 

DeFi利器 - 闪电贷原理及应用案例

 

  • 概述

闪电贷顾名思义,就是在极短的时间内完成贷款与还款的操作。

在DeFi领域,闪电贷为金融业务提供了免抵押借款服务,是DeFi世界的一款利器。

闪电贷的概念最早是由Marble协议提出来的,并由Aave、dYdX、Uniswap等协议进行了普及,第一笔闪电贷操作来自于Aave协议。

本文档从原理、应用案例等方面,对闪电贷进行了解读,欢迎对闪电贷有兴趣的朋友一起交流、讨论。

 

 

  • 闪电贷原理

闪电贷是通过智能合约的原子性,来完成零风险贷款的业务,因此闪电贷业务只能由智能合约来实现。

简单来讲,就是在一个区块交易中,同时完成借款和还款操作这两个操作,无需抵押任何资产,只需支付手续费即可。

用户在借到款之后,可以利用借到的资产进行其他操作,比如套利、偿还抵押借款、自清算等操作。

然后在交易结束的时候,用户只要把借到的款项及手续费及时归还就可以,否则该笔交易就会回滚,就像什么也没有发生过一样。

 

什么是原子性?

这里的原子性是指具有原子性的事务。

该原子事务是不可分割的,在事务执行完毕之前,不会被任何其他操作所中断。

而该事务中的所有操作,要么全部被成功执行,要么全部执行失败,不会出现一部分成功而另一部分失败的情况。

 

以太坊的每个交易都是具有原子性的,每笔以太坊交易中,可以包含多个操作,例如:

  1. 向dYdX进行借款、还款;
  2. 在Compound上提供ETH并借出DAI;
  3. 在Curve上将借出的DAI的一半换成USDC;
  4. 在Uniswap上为DAI/USDC池提供流动性等等。

 

所有这些操作都可以同时在一个交易中完成,而其中只要有一个操作失败,则整笔交易都会失败回滚,就像什么都没有发生一样。

单笔交易只受Gas费用限制,以及以太坊区块容量的限制,所以理论上可以有成千上万个操作步骤。

 

 

  • 闪电贷优缺点

传统信贷机构在放贷时,面临两种风险:

  1. 违约风险:

如果贷款人违约不还款,则信贷机构会承担损失;

  1. 流动性风险:

如果一家信贷机构在错误的时间放出太多贷款,或者借款人没有及时还款,则信贷机构就会遭遇资金流动性紧张的危机。

 

而闪电贷的机制,则减缓了这两种风险。

在一个单笔区块交易中,贷出借款人需要的资金,然后在交易结束的时候,借款人必须偿还不少于贷款金额的数目。

如果借款人不能偿还贷款,则这笔交易就会被回滚,就像什么也没有发生过一样。

如果借款人及时偿还了贷款,则交易成功,贷款机构的资金也会及时回流,不会产生资金紧张的危机。

简单的讲,闪电贷就是由智能合约自动执行的零风险贷款业务:如果借款人不能及时还款,那么整个交易就会回滚,就像贷款根本没发生一样。

 

这样的业务,只有区块链智能合约才可以做到这一点。

 

闪电贷优点:

  1. 没有任何资金风险,而借款人只需要支付借款手续费及Gas费用即可。
  2. 无需任何资产抵押,就可以借到高达百万美元甚至千万、上亿美元的资产,用来进行杠杆等金融业务进行获利,不用抵押任何资产。

 

闪电贷缺点:

  1. 有一定的技术门槛及金融知识门槛,调用者需要熟悉用智能合约进行闪电贷的操作,并且要利用金融知识从闪电贷操作中进行获利,这样才不会有任何财产损失(比如借款手续费及Gas费用)
  2. 会被别有用心者用于黑客攻击:利用项目方的智能合约漏洞,从闪电贷借到巨额资金,从项目方资金池中获取巨额收益。

 

 

  • 闪电贷协议比较

目前提供闪电贷业务的DeFi项目,主要有Uniswap、Aave、dYdX等协议。

Aave是最早将闪电贷进行实际应用的DeFi协议,Uniswap是从V2版本开始支持闪电贷功能。

下面对这三个闪电贷协议进行一下比较:

闪电贷协议

手续费

特点

Uniswap

0.3%+1

代币可选数量较多,可以直接借ETH。可以用币对的另一个代币来还款。

Aave

0.09%

代币可选数量较多,可以直接借ETH

dYdX

2wei

手续费几乎可以忽略,但代币可选数量有限,不能直接借ETH。借/还的token必须一致。

 

应该选择哪个闪电贷协议?

如果只想借ETH、DAI或USDC的话,建议选择dYdX,因为手续费仅需2wei,几乎可以忽略不计。

如果想获得更多代币,可以选择Aave,会收取0.09%的手续费。

如果在Aave里也没有想借的代币,那么可以选择Uniswap,这里有几乎所有市面上的代币,但要收0.3%+1的手续费。

 

 

  • 闪电贷应用场景
  1. 闪电贷套利:

套利就是利用不同的交易所之间的价差,进行搬砖套利。

传统的套利,需要套利者准备大量的套利资金,并且也承担着套利失败的风险。

而闪电贷套利,可以极大的放大成功套利的利润,并且无需承担巨额资金损失的风险。

 

  1. 更换抵押品:

主要应用在用户想将现有抵押资产换成另一种资产作为抵押品的情况。

 

  1. 清算抵押贷款:

用户抵押的资产,会有被清算的风险。

与其不能及时偿还而被清算掉,用户可以使用闪电贷进行自我清算,来尽量减少资产损失。

 

  1. 更多想象空间:

闪电贷为我们提供了无抵押就可以借到巨额资金的便利,有更多的应用空间等待我们去挖掘和使用。

 

 

  • 闪电贷套利案例

场景描述:

Uniswap和Curve之间的DAI/USDC币对池存在价格差异,可以在Curve上用1个DAI换取1个USDC,但在Uniswap上您只需要0.99个DAI就可以买到1个USDC。

 

操作步骤:

  1. 通过Aave的闪电贷借到100000个DAI;
  2. 在Uniswap上将100000个DAI换成USDC,收到101010个USDC;
  3. 在Curve上将101010个USDC换成101010个DAI;
  4. 向Aave偿还借款100000个DAI,以及0.09%的手续费90个DAI,共100090个DAI;
  5. 本次获利:101010-100090=920个DAI,这920个DAI就是本次套利的获利金额。

 

这个案例只是个理想逻辑,还需要考虑一些其他因素:

  1. 交易Gas费用:

操作步骤的多少,决定了Gas费用的多少,因此利润中需要扣除Gas费用;

  1. 价格滑点:

DEX的AMM模型都会有价格滑点,这取决于交易额的大小及流动性池的流动性,因此并不是资金量越大,获利就越大,需要事先进行计算;

  1. 抢先交易:

DEX之间的价格平衡,主要是靠不只一个的套利者进行维护,因此套利机会可能会被其他套利者使用更高的gas费用抢先套走。

 

 

  • 闪电贷更换抵押品场景案例

场景描述:

假设你用ETH作为抵押品,从Compound借了DAI,那么你可以通过以下方式,将抵押品从ETH换成其他资产,例如BAT。

 

操作步骤:

  1. 向dYdX协议借出DAI;
  2. 用借来的DAI偿还Compound中的贷款;
  3. 提取你的ETH;
  4. 在Uniswap上将你的ETH换成BAT;
  5. 将换来的BAT作为Compound上的抵押品;
  6. 用抵押的BAT,借出DAI;
  7. 用从Compound上借来的DAI,向dYdX偿还借出的DAI。

 

备注:

通过这轮操作,只需支付dYdX借款的0.09%的手续费,以及少量的Gas费用,就可以成功的把你在Compound上的ETH抵押品,换成了BAT抵押品。

 

 

  • 闪电贷自我清算场景案例

场景描述:

你在Compound上有一笔以ETH作为抵押品借出DAI的贷款。现在ETH价格不断下跌,已经接近清算边界。

你也没有或者不想存入更多的ETH来降低你的清算边界,同时你也没有偿还贷款所需要的DAI。

那么,与其让Compound合约清算掉你的抵押品并向你收取清算费用,就不如用闪电贷自清算机制来降低损失。

 

操作步骤:

  1. 向dYdX借出一笔DAI,金额是需要在Compound上进行偿还的欠债金额;
  2. 偿还Compound上的DAI贷款,提取出来抵押的ETH;
  3. 将足够的ETH换成DAI;
  4. 用换来的DAI,向dYdX偿还闪电贷借款(包含手续费);
  5. 剩下的ETH,就是本轮操作为你保留下来的资产。

 

备注:

自我清算并没有获利,只是利用闪电贷来尽可能的减少资产损失,避免抵押资产被全部清算掉。

 

 

  • 闪电贷攻击

闪电贷是一种金融技术,同时也是一把双刃剑,既为人们提供了极大的便利性,也为别有用心者提供了一把利器。

在DeFi的世界里,闪电贷也被大量的应用在了DeFi攻击的案例中。

通过闪电贷,黑客可以利用智能合约中的漏洞,用极低的成本,从闪电贷协议借得大量资金,用于攻击操作,获得了巨大的利益。

但事物都是有两面性的,黑客的攻击行为在造成巨大财产损失的同时,也产生了一种鲶鱼效应,让整个DeFi生态系统得到了加强,并不断完善和发展。

 

 

  • 总结

通过这篇文章,希望能让你对闪电贷有所了解。

有对DeFi领域感兴趣的朋友,也欢迎一起交流讨论及合作,让我们一起在DeFi的世界里乘风破浪!

【DeFi学堂】空手套白狼的利器-闪电贷原理及应用案例

 

 

 

上一篇:12-2 nodejs的增删改查


下一篇:【Error】expected declaration specifiers or ‘...‘ before numeric constant