DeFi安全之借贷杠杆
2022-8-24 09:42:37 Author: www.aqniu.com(查看原文) 阅读量:14 收藏

熊市就像一块试金石,Defi的各核心业态,哪些能够穿越周期,更好的发展?在周期中又暴露了哪些问题,值得后来者借鉴?SharkTeam合约安全系列课程之【DeFi安全】和您一起讨论和深入。这一课我们聊聊【Defi借贷杠杆】。

如何在借贷市场实现杠杆交易呢?我们Compoun借贷市场为例,将A资产抵押到Compound再借出B资产,之后再到DEX平台(如Uniswap)用B资产兑换成A资产,又重复投入Compound,如此反复操作,最终实现杠杆交易。

这种循环借贷与兑换的方式,对用户来说,是非常繁琐的,而且中间多次操作会消耗较多手续费。而且,在循环借贷的过程中,若借款超额则会触发清算机制。因此,直接提供杠杆交易服务的产品很受欢迎,因为杠杆交易服务使用闪电贷技术,只需要一次兑换,即不会消耗很多手续费;而且只要杠杆率是安全地,就不会在添加杠杆的过程中触发清算。

从需求角度角度,用户使用杠杆交易的目的是获取更多收益,包括:

1.利用借贷协议存款与借款APY(或APR)差值来扩大存款收益。比如单币循环贷:假设BTC存款收益APY为2%,借款费用APY为-15%,BTC抵押因子为80%,可以抵押BTC借出BTC,然后存入再借出,循环操作,实现杠杆,可以增加2~3倍的收益。

2.想要做多或做空某种资产。比如:选定ETH/USDT交易对,做多ETH就需要借入USDT并兑换成ETH;做空ETH则借入ETH来兑换USDT。

当然,用户想要开仓,就需要先抵押资产作为保证金,这样才可借入资产。该逻辑其实和Compound的借贷逻辑一样,不同点在于,Compound属于超额抵押借贷,比如对于最大抵押率为75%的ETH,存入价值100U的ETH,最多只可借出75U的其他类型的代币;但杠杆交易则可以借出多倍的资产,比如开3倍杠杆做多ETH时,100U的ETH作为抵押代币,可以借出300U的ETH来开仓,实际相当于借出了200U,这200U是从哪儿借来的呢?

首先我们要弄清楚3倍杠杆做多ETH是怎么做到的?实现过程如下:

1.将100U的ETH存入到CompoundETH资金池中;

2.通过闪电贷从闪电贷平台(如:Uniswap、Aave、dYdX等)借贷200U的ETH;

3.将借贷的200U的ETH存入到CompoundETH资金池中,然后抵押物变成了300U的ETH;

4.凭借300U的ETH抵押物,从Compound中借出200U的USDT;

5.将200U的USDT通过DEX兑换成200U的ETH用于闪电贷还款(忽略闪电贷和DEX兑换的手续费)

通过以上步骤,最终以3倍杠杆做多100U的ETH。对于CompoundETH资金池,实际上存入了300U的ETH,借出了200U的USDT,抵押借贷率=200U/300U=66.67%<75%

从整个过程来看,以100U的ETH开3倍杠杆,200U的USDT从Compound的USDT资金池中借出,然后兑换成ETH后再与100U再次存入到CompoundETH资金池中。

对于用户来说,其实际支付了100U,当ETH价格上涨时,实际可以获得3倍的收益;当ETH价格下跌时,同样会有3倍的损失。相比于原来的只存入100U来说,被清算的风险也更高,本质上还是超额抵押贷,抵押借贷率为66.67%。换言之,用户以更高的清算风险换来了3倍的收益/损失。

对于CompoundETH资金池来说,流入资金池的ETH分为两部分:

  • 用户直接的存款,即100U的ETH,来自于用户
  • 杠杆借贷的资产,即200U的ETH,来自于其他资金池(USDT资金池)

除了用户直接存入100U的ETH外,添加杠杆需要的额外的代币(200U的ETH)实际上来自于其他资金池(如:如这里的USDT资金池),即杠杆实现了借贷资金池之间的资金流转,同时借贷资金池资金总价值不变,还提高借贷资金池(如这里的USDT资金池)的资金使用率。

资金使用率utilizationRate计算如下:

其中,borrows表示借款总额,cash表示资金池余额,reserves表示储备金。此外,ETH资金池中资金增加,而USDT资金池资金减少。如果资金池资金一直减少下去而又没有用户存款的话,资金池可能出现资金不足甚至资金枯竭的情况。

在多空平衡的情况下,资金池的流动性也会保持平衡。但是,如果出现极端情况,比如,做多远超于做空的时候,就要考虑是否会出现某一资金池枯竭的风险。比如上面做多ETH,抵押了ETH,借出了USDT,兑换回ETH,随着做多杠杆越来越大,ETH资金池中的资金会越来越多,但USDT资金池中的资金则越来越少,资金使用率会越来越高,那么USDT的资金就会面临资金不足甚至枯竭的风险。

为了降低甚至避免这种风险,借贷协议通过利率模型调高存款利率来鼓励用户存款。如Compound利率模型如下,当资金使用率增加到一定程度,如80%,借款利率快速增长,进而激励用户存款到资金池中。

1、循环贷模式

以Flux中的DAI资金池为例:

DAI存款APR为0.78%,借款APR为-8.29%,抵押率限额为130%。存入1000DAI,最大可借出1000/130%=769.23DAI。以存入1000DAI的保证金为例,循环贷如下:

(1)借出769DAI,然后存入资金池,此时:

  • 总存款=1000+769=1769DAI,
  • 总借款=769DAI,
  • 抵押率=1769/769=230.04%,
  • 最大可借出1769/130%-769=591.77DAI,
  • 杠杆率=1.769,
  • 收益APR=(1769*0.78%+769*8.29%)/1000=7.75%

(2)借出591DAI,然后存入资金池,此时:

  • 总存款=1769+591=2360DAI,
  • 总借款=769+591=1360DAI,
  • 抵押率=2360/1360=173.53%,
  • 最大可借出2360/130%-1360=455.38DAI,
  • 杠杆率=2.36,
  • 收益APR=(2360*0.78%+1360*8.29%)/1000=13.10%

(3)借出455DAI,然后存入资金池,此时:

  • 总存款=2360+455=2815DAI,
  • 总借款=1360+455=1815DAI,
  • 抵押率=2815/1815=155.10%,
  • 最大可借出2815/130%-1815=250.38DAI,
  • 杠杆率=2.815
  • 收益APR=(2815*0.78%+1815*8.29%)/1000=17.22%

(4)借出250DAI,然后存入资金池,此时:

  • 总存款=2815+250=3065DAI,
  • 总借款=1815+250=2065DAI,
  • 抵押率=3065/2065=148.43%,
  • 最大可借出3065/130%-2065=292.69DAI,
  • 杠杆率=3.065
  • 收益APR=(3065*0.78%+2065*8.29%)/1000=19.49%

以上过程中,每次都借出后立即存入到资金库中,而且几乎以抵押率限额来借出资产,通过循环借款与存款,利用收益率的差来获得数倍的收益。

循环贷在实际实现的时候可以选择两种模式:

1. 合约循环贷模式,即按照循环贷的步骤,以合约的方式实现,可以在一笔交易内完成。

2. 交易循环贷模式,即每次存入和借出都是一笔交易。

比较之下,前者被清算的风险低,清算取决于最终的抵押率,即在中间步骤可以借取最大的资产;而且会消耗较小的Gas费,但会增加部署合约的成本;后者需要发起多笔交易,会消耗更多的Gas费,此外每笔交易成功后都有可能被清算,取决于交易后的抵押率,每次借取的资产不能太大,否则会面临清算的风险;但没有部署合约的成本。

 合约循环贷模式交易循环贷模式
清算风险
交易Gas费
操作简单复杂
额外费用合约部署费用

由于借款和存款的操作不是一笔交易,因此,这种做法风险较高,尤其是在借出的时候,资产价格的波动可能会使得当前的债务被清算。因此,实际借款要远低于最大可借资产数量,而且杠杆率一般在1x~3x之间,无法实现更高的杠杆率。

循环贷提取存入的资金并还款只需要按照相反的顺序,提款-还款-提款-还款……也可以通过闪电贷直接还款,然后提款后还闪电贷和手续费,剩余的为最终收益。

对于单币循环贷,理论上因为存借的都是同一个币种,就算币价发生了大波动,抵押和借贷价值的波动一样,比值会一直固定。这意味着循环借贷可以无视币价上的波动,也不用担心因为币价波动太大导致被清算。

若是循环贷选择交易对中的两种代币,则每一次借款与存款之间都需要一次兑换,需要支付兑换的手续费,这将严重影响最终的收益。另外,由于抵押(即存款)与借贷的币种不同,其币价波动也不一样,相比于单币来说,抵押率更容易超出限额而触发资产清算。

2、闪电贷模式

还是以DAI为例,存入1000DAI,使用3倍杠杆,过程如下:

1. 通过闪电贷借款2000DAI(闪电贷平台:dYdX,Aave,Uniswap),不同平台手续费不同

  • Uniswap手续费为0.3%,即6DAI
  • Aave手续费为0.09%,即1.8DAI
  • dYdX手续费为2Wei,可以忽略不计

2. 将本金1000DAI以及闪电贷的2000DAI存入到借贷平台

3. 以存入的3000DAI为抵押物,借出2000DAI

4. 还闪电贷的2000DAI借款,同时还要还闪电贷的手续费。

通过以上4个步骤,在一笔交易内实现了3倍杠杆存款,完成后的各项系数如下:

  • 总存款=3000DAI,
  • 总借款=2000DAI,
  • 抵押率=3000/2000=150%,
  • 最大可借出3000/130%-2000=307.69DAI,
  • 杠杆率=3
  • 收益APR=(3000*0.78%+2000*8.29%)/1000=18.92%

提取存入的资金并还款步骤如下:

1. 通过闪电贷借款2000DAI,

2. 利用闪电贷得到的2000DAI还借贷平台的债务

3. 提取借贷平台存入的3000DAI以及所有的收益

4. 使用提取的DAI还闪电贷的2000DAI以及闪电贷的手续费

对比循环贷模式,闪电贷模式有很多优点:

  • 可以实现更大的杠杆率,
  • 实现的步骤简单,且只需要一笔交易即可实现,消耗的Gas较少
  • 清算风险完全取决于杠杆交易后的抵押率;过程中没有任何风险
  • 虽然需要部署合约,但合约实现也相对简单,不需要复杂的步骤,部署合约的费用相对较低

唯一的缺点应该就是在整个过程中需要支付闪电贷的手续费,因此建议优先选择手续费低的闪电贷平台,比如dYdX。因此,基于闪电贷模式的直接的杠杆交易服务非常受用户欢迎。

1、杠杆做多

以ETH/USDT为例,假设看涨ETH,想要以3倍杠杆做多ETH,假设当前ETH的价格为2000U,ETH的抵押率为130%,本金为1ETH,以3倍杠杆做多1ETH过程如下(忽略闪电贷的手续费):

1. 通过闪电贷借入2ETH,价值4000U

2. 将本金1ETH以及闪电贷的2ETH存入借贷平台的ETH资金池,作为抵押物,价值6000U

3. 在借贷平台借出4000USDT,此时抵押率为6000/4000=150%>130%

4. 将4000USDT兑换成2ETH用于闪电贷还款。若通过Uniswap平台的ETH/USDT交易对进行闪电贷,则直接以USDT进行还贷即可,同样需要一次DEX的兑换费用,即手续费。

此时:

  • 总存款为3ETH,价值6000U
  • 总借款为4000USDT,价值4000U
  • 抵押率为6000/4000=150%

当ETH价格上涨时,假设涨至3000U,即上涨1.5倍,此时:

  • 总存款为3ETH,价值9000U
  • 总借款为4000USDT,价值4000U
  • 抵押率为9000/4000=225%

将借贷平台中的存款提取出来,过程如下:

1. 通过闪电贷借入4000USDT

2. 将4000USDT用于借贷平台的还款,还款后借贷平台总借款为0

3. 将存入借贷平台的3ETH提取出来

4. 通过DEX平台将3ETH兑换成9000USDT

5. 使用4000USDT还闪电贷,剩余5000USDT,价值5000U。

最初投入1ETH=2000U,使用3倍杠杆后获利3000U;若不使用杠杆,只会获利1000U,即因价格涨了1000U而获利。因此,3倍杠杆使得收益也扩大了3倍。

同理,若价格下跌,3倍杠杆下的损失也将是3倍,甚至还会有被清算的风险,该风险同样是在不使用杠杆情况下的3倍。

2、杠杆做空

杠杆做空就是投资者利用杠杆的方式做空,用户可以利用做空赚取收益的。做空是一种在金融产品下跌过程牟利手段,下跌的差价就是投资者的利润。

以ETH/USDT为例,假设看跌ETH,想要以3倍杠杆做空ETH,假设当前ETH的价格为2000U,USDT的抵押率为130%,本金为1ETH,以3倍杠杆做多1ETH过程如下(忽略闪电贷的手续费):

1. 通过闪电贷借入6000USDT,价值6000U

2. 将闪电贷的6000USDT存入借贷平台的USDT资金池,作为抵押物,价值6000U

3. 在借贷平台借出2ETH,此时抵押率为6000/4000=150%>130%

4. 将本金1ETH以及借出的2ETH共计3ETH(价值6000U)兑换成6000USDT用于闪电贷还款。若通过Uniswap平台的ETH/USDT交易对进行闪电贷,则直接以ETH进行还贷即可,同样需要一次DEX的兑换费用,即手续费。

此时,

  • 总存款为6000USDT,价值6000U
  • 总借款为2ETH,价值4000U
  • 抵押率为6000/4000=150%

当ETH价格下跌时,假设跌至1000U,即下跌0.5倍,此时,

  • 总存款为6000USDT,价值6000U
  • 总借款为2ETH,价值2000U
  • 抵押率为6000/2000=300%

将借贷平台中的存款提取出来,过程如下:

1. 通过闪电贷借入2ETH

2. 将2ETH用于借贷平台的还款,还款后借贷平台总借款为0

3. 将存入借贷平台的6000USDT提取出来

4. 通过DEX平台将2000USDT兑换成2ETH

5. 使用2ETH还闪电贷,剩余4000USDT,价值4000U

最初投入1ETH=2000U,使用3倍杠杆后获利2000U;若不使用杠杆,会损失1000U,即获利-1000U,。因此,3倍杠杆使得收益也扩大了3倍。

同理,若价格上涨,3倍杠杆下的损失也将是3倍,甚至还会有被清算的风险,该风险同样是在不使用杠杆情况下的3倍。

总结:DeFi杠杆在为使用者提供更高的流动性和更少的启动资金的同时,也引入了更多的金融风险,如果使用DeFi杠杆工具,请先确保您已经完全理解它并具备控制风险的能力。

关于我们:SharkTeam的愿景是全面保护Web3世界的安全。团队成员分布在北京、南京、苏州、硅谷,由来自世界各地的经验丰富的安全专业人士和高级研究人员组成,精通区块链和智能合约的底层理论,提供包括智能合约审计、链上分析、应急响应等服务。已与区块链生态系统各个领域的关键参与者,如OKC、Huobi Global、polygon、Polkadot、imToken、ChainIDE等建立长期合作关系。

Web:https://www.sharkteam.org

Telegram:https://t.me/sharkteamorg

Twitter:https://twitter.com/sharkteamorg

更多区块链安全咨询与分析,点击下方链接查看

D查查|链上风险核查 https://m.chainaegis.com


文章来源: https://www.aqniu.com/edu/88205.html
如有侵权请联系:admin#unsafe.sh