熊市就像一块试金石,Defi的各核心业态,哪些能够穿越周期,更好的发展?在周期中又暴露了哪些问题,值得后来者借鉴?SharkTeam合约安全系列课程之【DeFi安全】和您一起讨论和深入。第二课【闪电贷技术详解】。
文章较长,分为3个部分,这是第2部分:
(相关资料图)
1.闪电贷原理和应用场景;
2.闪电贷合约实现和风险防范。
3.闪电贷相关项目协议分析。
1 闪电贷合约实现
1.1 闪电贷
以Aave项目为例,Aave项目实现了闪电贷业务的主要合约是 LendingPool.sol合约,关键函数为 flashLoan函数。
以下是AaveV1的实现代码:
IFlashLoanReceiver 代码如下:
FlashLoanReceiverBase 代码如下:
其中需要注意:
l闪电贷接收方合约 IFlashLoanReceiver (接口合约)的实现是需要闪电贷发起方自定义的。自定义闪电贷合约需要继承 IFlashLoanReceiver 接口合约或者 FlashLoanReceiverBase 合约,并实现其中的 executeOperation 函数。
l自定义闪电贷合约部署在区块链中的地址即为 flashloan 函数的参数 _receiver。
以下是 AaveV1 闪电贷的一个代码实现示例:
1.2 闪电兑
以 UniswapV2 项目为例,UniswapV2 项目实现了闪电兑换业务的主要 错误! 超链接引用无效。合约中的 swap函数,代码如下:
其中需要注意:
l闪电贷接收方合约 IUniswapV2Callee(接口合约)是需要闪电贷发起方自定义的。自定义闪电贷合约需要继承该接口合约,并实现其中的 uniswapV2Call函数。
l自定义闪电贷合约部署在区块链中的地址即为 swap 函数的参数 to。
以下是UniswapV2闪电贷的一个代码实现示例:
2 闪电贷风险与防范
2.1 闪电贷优点
1.没有任何资金风险,而借款人只需要支付借款手续费及Gas费用即可。
2.无需任何资产抵押,就可以借到高达百万美元甚至千万、上亿美元的资产,用来进行杠杆等金融业务进行获利,不用抵押任何资产。
2.2 闪电贷缺点
1.有一定的技术门槛及金融知识门槛,调用者需要熟悉用智能合约进行闪电贷的操作,并且要利用金融知识从闪电贷操作中进行获利,这样才不会有任何财产损失(比如借款手续费及Gas费用)
2.会被别有用心者用于黑客攻击:利用项目方的智能合约漏洞,从闪电贷借到巨额资金,从项目方资金池中获取巨额收益。
2.3 闪电贷攻击
闪电贷是一种金融技术,同时也是一把双刃剑,既为人们提供了极大的便利性,也为别有用心者提供了一把利器。
通过闪电贷,黑客可以利用智能合约中的漏洞,用极低的成本,从闪电贷协议借得大量资金,用于攻击操作,获得巨大的利益。
另外一面,黑客的攻击行为在造成巨大财产损失的同时,也产生了一种鲶鱼效应,让整个DeFi生态系统得到了加强,并不断完善和发展。
2.4 安全防范建议
闪电贷攻击的根本原因在于被攻击的项目的智能合约(尤其是价格预言机)存在漏洞,黑客利用了其中的漏洞完成攻击,而闪电贷只是提供了攻击的资金,降低了黑客攻击的成本。
因此,闪电贷攻击并没有有效的防范措施,只能尽可能的让项目的业务逻辑和合约代码不存在漏洞。
解决闪电贷攻击的办法:
1.说服所有的闪电贷协议停止提供这种服务
这是不可能的。提供闪电贷款符合每个协议的利益,并且其用户有合理原因的希望使用此功能。因此,我们可以放心地消除这一选项。闪电贷不会消失。
2.迫使关键交易跨越两个区块
如果一个资本密集型交易需要跨越至少 两个区块,用户需要至少在两个区块时间段取出贷款,闪电攻击就成为不可能。
3.要求提供链上证明,证明完成闪电贷后用户的账户余额未出现变化
如果可以通过某种方法来检测用户的 实际余额是多少 (即在他们贷款之前和还款之后的余额分别是多少) ,我们就可以战胜闪电攻击。
在原生 EVM 机制中无法执行此操作,但是可以对其进行修改。你要做的是:在用户与你的协议进行交互之前,你要求其提供 Merkle证明,证明在上一个区块末尾时他们有足够的余额来偿还当前使用的资金。 你需要针对每个区块中的每个用户跟踪此情况。
这种方法一定程度上是奏效的。当然,它还很粗糙,有一些问题:验证这些链上证据在链上的 成本极高,思维正常的用户没有人愿意提供这类证明,并为整个过程支付 gas 费用。另外用户完全可能有合法合理的理由,在上个区块想调整其余额。所以,尽管这种方法理论上有些作用,它不是一种可行的解决方案。
减缓闪电贷攻击的办法:
1.市场价预言机
像 Uniswap或 OasisDEX等市场价预言机 , 由于闪电攻击的可能性,你任何情况下不能把当前市价中位数当成喂价。 攻击者只需要一笔交易就能轻而易举地大幅改变市价中位数,让预言机失灵。对此最好的解决方案是通过 时间加权平均价格(TWAP) 或 成交量加权平均价格(VWAP) 计算 上一批 X 区块的加权平均数。 Uniswap v2会自带这一功能; 经济学家 Max Wolff 的著作 《 Polaris》为其它协议提供了一种通用方法。
2.治理代币
链上治理则是则会带来一连串令人头疼的问题。链上治理通常由治理代币持币人按权重投票决定。但如果这种治理代币进入某一贷款池,任何攻击者可以偷走大量选票,得到自己想要的结果。 当然,多数治理协议要求这些治理代币在投票期间锁定,这让闪电攻击无计可施。但有些治理协议并非如此,例如 Carbon Vote和Maker的行政投票。在闪电贷攻击的阴影之下,这些治理机制完全可能被攻陷。
理想情况下,你不想让治理代币进入闪电贷款池。但这并非由发币者决定,它是由市场决定的。因此,所有治理行动应该要求 代币锁定期,以阻止闪电攻击。更关键的是,所有治理代币必须有 时间锁(timelocks) 。时间锁迫使所有的执行决策在生效前都有一段等候期。(例如 Compound 的时间锁是 2 天 ) 。如果遭遇意料之外的治理攻击,这一机制让系统有了 容错时间。
关于我们:SharkTeam的愿景是全面保护Web3世界的安全。团队成员分布在北京、南京、苏州、硅谷,由来自世界各地的经验丰富的安全专业人士和高级研究人员组成,精通区块链和智能合约的底层理论,提供包括智能合约审计、链上分析、应急响应等服务。已与区块链生态系统各个领域的关键参与者,如Huobi Global、OKC、polygon、Polkadot、imToken、ChainIDE等建立长期合作关系。
Web:https://www.sharkteam.org
Telegram:https://t.me/sharkteamorg
Twitter:https://twitter.com/sharkteamorg
Reddit:https://www.reddit.com/r/sharkteamorg
更多区块链安全咨询与分析,点击下方链接查看
D查查|链上风险核查https://m.chainaegis.com