闪电贷原理及安全事件分析

其它相关内容可见:个人主页

本文主要参考有:

[捕鲸船的分享](闪电贷原理及安全事件分析——被攻击项目的原因和防范措施 (youtube.com))

[SharkTeam系列文章–闪电贷]([闪电贷技术详解-Part 3 | 登链社区 | 区块链技术社区 (learnblockchain.cn)](https://learnblockchain.cn/article/4502#Aave 闪电贷优缺点))

什么是区块链上的闪电贷:

闪电贷: 最初的目的是在区块链上实现,允许用户在不提供任何东西作为抵押的情况下进行借款。

如何让真正实现闪电贷这一功能,依靠区块链上交易的原子性,让闪电贷的借贷和偿还在同一交易中完成,如果没有完成相应的偿还,则回退整个交易;

为防止闪电贷在Defi中的滥用,每次闪电贷还款的时候需要支持贷款金额的贷款费用,如0.09%,否则也将回退整个交易。

Aave最初提出闪电贷的概念是为了想服务于金融业产品开发者群体,让更多的开发人员在无需资金的情况下,使用闪电贷创建再融资工具或套利工具,构建金融产品,降低开发门槛。(查了一圈找到的比较合理的答案)

但目前闪电贷被大量滥用与资产间套利。

闪电贷具体实现示例:

常见的闪电贷平台:Uniswap、Aave、Compound、MakerDAO、dYdX

存在闪电贷和闪电兑的区别:需不需要偿还相同的资产。

现有的闪电贷大多都是乐观转账,在借贷函数的实现的,先将借贷的代币转给借贷者,随后回调借贷者的函数,借贷者进行他的操作,最后在借贷函数结束前,必须还清借贷金额以及相应的手续费,否则交易回退

Aave_v2

  • 检查闪电贷的代币数量,计算手续费,协议费等

  • 进行乐观转账,将代币转到用户的地址中

  • 回调用户的excuteOperation函数,用户自己来进行套利操作,aave_v1在函数的最后需要进行相应的还款,aave_v2不需要立刻还款,但需要向借贷合约进行相应的授权。

  • v1检查还款金额(合约借贷前余额+手续费),v2借贷合约调用safetransform函数自己进行相应的转账,实现对应的还款。

    下图主要为aave_v1版本的实现

    image.png

    image.png

Uniswap_v2

uniswap其也提供闪电贷的功能,在v2版本中其主要是通过swap函数实现闪电贷

闪电贷其检测是否还款的原理,是根据自动做市商AMM原理,进行k值检验

可以粗略的理解uniswap,其代币的pair对是满足
x 1 ∗ x 2 = k x_1*x_2 = k x1x2=k

最后的k值校验只要满足:

( b a l a n c e 1 ′ − f e e ) ∗ ( b a l a n c e 0 ′ − f e e ) ≥ k (balance^{'}_1-fee)*(balance^{'}_0-fee) \ge k (balance1fee)(balance0fee)k
账户还款后的余额减去对应的交易费用,满足大于k即可。

从上式我们不难看出,在uniswap中还款,我们不一定需要还同一种资产,可以换相应pair对的资产也可。

  • 进行相关借款的检验
  • 进行乐观转账
  • 回调借贷者的uniswapV2call函数,进行相应的套利操作,并在函数的最后实现还款
  • k值校验,判断是否还款

其闪电贷其余步骤,与aave相似,唯一不同的是,uniswap是将对应的还款在uniswapV2call函数中,直接转给相应的借贷合约

image.png

image.png

闪电贷的攻击类型

DFX攻击事件分析

漏洞的主要原因是主要有两个:

  • 闪电贷归还逻辑为闪电贷前后池子中金额的差值

  • 但DFX合约的中并未对它的借贷方法和添加流动性方法进行重入限制。通俗来说,就是将借贷的钱抵押到同一个池子中,用户需要还款的闪电贷很少,但却有着大量的LP流动性证明

攻击的主要步骤为:

  • 调用flash函数借贷大量的USDC和XIDR
  • 后将借到的两种代币在同一个池子中进行抵押
  • 此时闪电贷前后的池子差,远远小于攻击者借出的资金,攻击者归还很少的资金即可
  • 但用户抵押的流动性还依然在它手中,移除流动性,获得大量的USDC和XIDR

image-20231218112539740

  • 20
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值