闪电贷:你需要知道的一切
闪电贷是独特的金融产品,仅在 DeFi 中可用。这篇博客文章将教你什么是闪电贷,它是如何运作的,以及它可以用于什么。
闪电贷是一种无抵押贷款,借款人必须在同一笔区块链交易中偿还资产。
或者,用更简单的方式描述:闪电贷允许你借一百万美元,只要你立即归还。
在现实世界的背景下,这似乎相当愚蠢。然而,智能合约使得这些类型的贷款可以用来完成很多事情。在本文中,我们将描述:
闪电贷是无担保(无抵押)的贷款,借款人必须在同一笔交易中将整个贷款偿还给贷方。它们是独特的金融产品,仅在 DeFi 世界中可用,因为智能合约可以强制用户立即偿还贷款。相比之下,传统金融中不存在这样的原语。像 Aave 和DyDx这样的 DeFi 协议支持闪电贷。人们认为像 MakerDAO 和 Uniswap 这样的协议也支持闪电贷,但从技术上讲,它们是“闪电铸造”,非常相似。
通过了解闪电贷的工作原理,更容易理解闪电贷。让我们深入了解。
闪电贷的机制相当简单。以下是一个 USDC( 美元挂钩稳定币 )的闪电贷示例,从头到尾:
flashloan
函数,该函数执行以下操作,要么“全部执行”,要么“完全不执行”:
就是这样。
所有区块链交易都是原子
的,所谓原子是因为要么全部发生,要么完全不发生。这一特性也适用于flashloans
,所有闪电贷都是原子的。在这种情况下,原子意味着如果用户没有立即偿还贷款,他们根本没有获得贷款。
听起来像魔法,对吧?让我们看看一些伪 Solidity 代码来解释它。
function flashLoan(uint256 amount) external {
uint256 balanceBefore = token.balanceOf(address(this));
token.transfer(msg.sender, amount);
// Ignore IFlashLoanReceiver for this pseudo-code
IFlashLoanReceiver(msg.sender).execute();
if (token.balanceOf(address(this)) < balanceBefore) {
revert RepayFailed();
}
}
调用flashloan
函数的用户实际上会调用一个在智能合约中看起来像这样的函数。如果代码触及revert
行,整个交易将不会成功或完成,这意味着用户根本没有借到钱!
智能合约的工作原理是:每当触及revert
语句时,区块链会自动将所有状态更改从交易直接恢复到其原始状态。
更深入地说,大多数 EVM 社区遵循 EIP-3156 标准来支持闪电贷功能。在闪电贷兼容合约中,最重要的函数看起来像这样:
/**
* @dev Initiate a flash loan.
* @param receiver The receiver of the tokens in the loan, and the receiver of the callback.
* @param token The loan currency.
* @param amount The amount of tokens lent.
* @param data Arbitrary data structure, intended to contain user-defined parameters.
*/
function flashLoan(
IERC3156FlashBorrower receiver,
address token,
uint256 amount,
bytes calldata data
) external returns (bool);
通常, 外部拥有钱包 (即非智能合约钱包,即我们图中的 Metamask)不会是此类函数调用中的receiver
。相反,闪电贷合约会将借来的代币发送到另一个智能合约,该合约通常具有“执行”操作的功能。
下面,我们将扩展用户的接收合约可能会做什么。
在实践中,闪电贷通常用于类似于常规贷款的原因。最常见的是“获得杠杆”或资本用于以下机会:
我们不会详细介绍所有这些,但我们建议你深入了解每一个。我们将解释闪电贷套利,因为它是闪电贷使用的最强大可视化之一。
套利是一种金融策略,利用不同市场中同一资产的价格差异。想象一下,eBay 和 Amazon(在线转售商)以 5 美元的价格出售苹果,而 Alibaba(另一个在线转售商)以 1 美元的价格出售。如果你有 100 美元,赚钱的简单方法是什么?
这种类型的金融策略几乎存在于世界上的每个市场,但利润率通常非常微薄。
在 DeFi 中,这种机会存在于像 Uniswap 这样的去中心化交易所。
现在,让我们用 \$1 和 \$5 的苹果来看看这个相同的场景。我们只花了 \$100 买苹果,因为那是我们所有的钱,但如果我们有更多的钱,我们可以赚更多的利润。这就是闪电贷的用武之地。
让我们再来看看上述场景,但想象一下我们可以在先获得闪电贷后进行。
这就是闪电贷的力量。任何人,无需抵押品,都可以利用套利机会。
通过 Cyfrin Updraft 的闪电贷课程示例套利 闪电贷安全课
我喜欢闪电贷的一个原因是它们平衡了金融竞争环境。如果一个小投资者,或者正在阅读这篇文章的你,在传统金融中发现了一个惊人的套利机会,他们永远无法像资金雄厚的机构那样做得好,因为机构有更多的资金!但在 DeFi 中,由于闪电贷的存在,每个人都可以获得与大型对冲基金相同的资源!至少在单笔交易中是这样。
要使用闪电贷,你必须:
receiver
合约以在闪电贷期间执行你想要的操作receiver
在最后偿还全额贷款。在 Cyfrin Updraft Security and Auditing 课程中,我们会讲解闪电贷及其使用方法,因为它们对于理解价格 Oracle 操纵攻击至关重要(稍后会详细介绍)。
要使用 Foundry 运行一个闪电贷测试脚本并查看其端到端的工作原理,你可以在这里进行测试 ,然后运行:
forge test --mt testFlashLoanBreaksIt
这个具体的例子还会向你展示如何利用闪电贷来利用安全漏洞!
闪电贷是 DeFi 开发者在设计项目时需要解决的最重要的考虑因素之一。
闪电贷只是一个工具/机制,用于利用代码库中的一个漏洞,而这个漏洞在历史上只有富有的用户/鲸鱼才能利用。由于闪电贷实际上“暂时让你变得富有”,它们使得资金不足的用户更容易利用传统上只有富人才能利用的漏洞。
涉及闪电贷的常见攻击向量之一是“ 价格 Oracle 操纵 ”攻击。这是当一个协议使用交易所的流动性来确定资产价格时,闪电贷使价格崩溃。你可以在我们的文章中阅读更多关于这些攻击的信息。
通常,人们错误地将漏洞归类为“闪电贷攻击”,而实际上它们更准确地被归类为“价格 Oracle 操纵”。
通常,作为一个协议或智能合约,防御此类攻击的简单方法是不使用去中心化交易所来获取定价信息!
闪电贷是投资者最强大和最奇妙的工具之一,它们只在智能合约世界中才有可能。它们涉及在没有抵押品、信用或 KYC 的情况下暂时借出贷款,只要在同一笔交易中原子地偿还即可。闪电贷是一种可以用于套利、清算、抵押品交换和其他 MEV 机会的工具。在设计协议时,一定要考虑到闪电贷,否则可能会被利用!
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!