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