如何使用 Aave 进行闪电贷

  • QuickNode
  • 发布于 2024-12-01 16:13
  • 阅读 67

本文详细介绍了如何使用Aave V3进行闪电贷操作,包括部署智能合约、设置MetaMask、获取测试代币以及执行闪电贷的步骤。

概述

Aave,前身为 ETHLender,已经一跃成为 DeFi 领域的先锋。Aave 是该领域第一个提出 闪电贷 想法的项目。在闪电贷之前,你必须抵押一种超额抵押的资产才能借入另一种资产。例如,如果我想借入一个 DAI,我必须存入另一种超过该价值的加密货币。换句话说,你必须有钱才能借钱。闪电贷打破了这个概念。它们为一种新的借贷系统打开了大门。它们通过允许用户在不提供任何抵押品的情况下借款来实现这一点。在本教程中,你将学习如何部署一个 Aave V3 闪电贷智能合约!

更喜欢视频教程?跟随 Sahil,在 19 分钟内学习如何使用 Aave 进行闪电贷。

如何使用 Aave V3 进行闪电贷 - YouTube

QuickNode

131K 订阅者

如何使用 Aave V3 进行闪电贷

QuickNode

搜索

信息

购物

点击取消静音

如果播放没有立即开始,请尝试重新启动设备。

你已退出登录

你观看的视频可能会被添加到电视的观看历史记录中,并影响电视推荐。为避免这种情况,请取消并在电脑上登录 YouTube。

取消确认

分享

包含播放列表

检索共享信息时出错。请稍后再试。

稍后观看

分享

复制链接

在 YouTube 上观看

0:00

/ •直播

在 YouTube 上观看

订阅我们的 YouTube 频道以获取更多视频!订阅

关于 Aave

摘自 Aave 网站

Aave 是一个去中心化的非托管流动性市场协议,用户可以以存款人或借款人的身份参与。存款人向市场提供流动性以赚取被动收入,而借款人可以以超额抵押(永久)或低抵押(单块流动性)的方式借款。

虽然这完全正确,但如果你不熟悉所有的 DeFi 行业术语,这可能对你来说没有太大意义。你可以把 Aave 看作是一个去中心化的伪银行。与一个中央银行验证所有交易不同,Aave 有智能合约以自动化的方式完成所有这些工作。存款人将他们的代币存入 Aave,并开始赚取存款利息。另一方面,借款人则相反。他们将从 Aave 中取出资金,并开始累积借款利息。为了做到这一点,他们必须 超额抵押

对于那些不想向 Aave 存入资金,只想借款的人来说,还有另一种方法。这就是我们之前提到的闪电贷。

关于闪电贷

前面提到的闪电贷是一种在区块链上借入资产的新方式。最初由 Aave 实施,其他流行的 DeFi 协议如 dYdX 也迅速跟进,增加了这一新功能。所有以太坊交易都有一个共同的属性,使得闪电贷成为可能。这个关键特性是 原子性

当一个交易的一系列操作不可分割且不可还原时,它就是原子的。或者用通俗的话来说——交易要么全部发生,要么全部不发生。没有半途而废!闪电贷利用原子性允许用户在不提供抵押品的情况下借款。有两个注意事项需要提及。首先,每当你在闪电贷中借入资产时,你必须支付借款金额的 0.09% 作为费用。其次,你必须在借入的同一笔交易中偿还贷款。虽然这个能力很棒,但它的使用有些受限。闪电贷主要用于 资产之间的套利

Remix 设置

为了简单起见,我们将使用 Remix IDE

这是一个基于浏览器的 IDE,也称为集成开发环境。

Remix 具有编写、调试、部署和其他操作 EVM 智能合约 的能力。在本指南中,我们将在 Polygon Mumbai 测试网上部署一个智能合约。

当你在浏览器中加载 Remix 时,你将看到这个菜单。

Remix 工作区

我们不会深入探讨 IDE,因为本教程的重点是闪电贷。但是,你需要熟悉四个高亮部分:主面板、侧面板、图标面板和终端。

在我们开始编写智能合约之前,我们需要下载一个浏览器扩展,使我们能够与以太坊区块链进行交互。有几个工具可以解锁这种功能,但最流行的是 MetaMask

创建 Polygon Mumbai 端点

我们将使用 QuickNode 作为 MetaMask 钱包中的自定义 RPC,以更快地传播交易。这并不能保证更快的交易确认,但增加了交易出现在验证者面前的机会。在此注册免费的 QuickNode Polygon Mumbai RPC

QuickNode RPC 仪表板

复制 HTTPS URL。我们将在下一步中需要它。

MetaMask 设置

以下是安装 MetaMask 的逐步说明。

  1. 你将从上面的网站下载扩展程序。
  2. 点击你新安装的扩展程序并同意条款和条件。
  3. 创建一个安全的密码!
  4. 写下助记词。这应该在物理世界中完成,不应保存在你的电脑上。
  5. 将我们在上一步中获得的 QuickNode Polygon Mumbai 测试网 RPC 添加为 MetaMask 中的自定义 RPC。学习 如何在 MetaMask 中添加自定义 RPC
  6. 获取一些 Polygon Mumbai 测试网 MATIC;你可以使用 QuickNode 多链水龙头

如果完成了上述六个步骤,你就可以开始编写你的第一个智能合约了!

闪电贷智能合约

智能合约允许我们通过执行确定性程序来读取和写入区块链数据。Polygon 是基于 EVM 的链,因此我们可以使用 Solidity 在 Polygon Mumbai 测试网上编写智能合约。Solidity 文件以 .sol 扩展名结尾。

我们将在 Polygon Mumbai 测试网上进行 USDC 的闪电贷。

创建一个新文件 SimpleFlashLoan.sol,并将以下代码复制粘贴到其中。

// SPDX-License-Identifier: MIT
pragma solidity 0.8.10;

import "https://github.com/aave/aave-v3-core/blob/master/contracts/flashloan/base/FlashLoanSimpleReceiverBase.sol";
import "https://github.com/aave/aave-v3-core/blob/master/contracts/interfaces/IPoolAddressesProvider.sol";
import "https://github.com/aave/aave-v3-core/blob/master/contracts/dependencies/openzeppelin/contracts/IERC20.sol";

contract SimpleFlashLoan is FlashLoanSimpleReceiverBase {
    address payable owner;

    constructor(address _addressProvider)
        FlashLoanSimpleReceiverBase(IPoolAddressesProvider(_addressProvider))
    {
    }

    function fn_RequestFlashLoan(address _token, uint256 _amount) public {
        address receiverAddress = address(this);
        address asset = _token;
        uint256 amount = _amount;
        bytes memory params = "";
        uint16 referralCode = 0;

        POOL.flashLoanSimple(
            receiverAddress,
            asset,
            amount,
            params,
            referralCode
        );
    }

        //该函数在你的合约收到闪电贷金额后调用

    function  executeOperation(
        address asset,
        uint256 amount,
        uint256 premium,
        address initiator,
        bytes calldata params
    )  external override returns (bool) {

        //逻辑在这里

        uint256 totalAmount = amount + premium;
        IERC20(asset).approve(address(POOL), totalAmount);

        return true;
    }

    receive() external payable {}
}

上述智能合约适用于 Aave V3。

代码解释:

第 1 行:指定 SPDX 许可证 类型,这是在 Solidity ^0.6.8 之后添加的。每当智能合约的源代码公开时,这些许可证可以帮助解决/避免版权问题。如果你不希望指定任何许可证类型,你可以使用特殊值 UNLICENSED 或直接跳过整个注释(不会导致错误,只是警告)。

第 2 行:声明 Solidity 版本。

第 4-6 行:从 Aave 的 V3 合约仓库 导入必要的 Aave V3 智能合约、Aave 的借贷池管理合约和 ERC20 OpenZepplin 合约。

第 8-9 行:通过接口 Aave 的 FlashLoanSimpleReceiverBase 合约启动 SimpleFlashLoan 合约,创建一个类型为 address 的变量 owner,并使其可支付。

第 11-12 行:使用 _addressProvider 作为参数初始化构造函数,这将是 Aave 借贷池的地址。

第 16-21 行:创建一个函数来借入贷款,并附带必要的参数,如 receiverAddress,这将是我们的智能合约部署后的地址,asset 将是我们想要借入的代币(在本例中为 USDC)的地址,amount 是我们要借入的代币数量,还有两个我们不会使用但 Aave 合约需要的参数。

第 23-29 行:与 Aave 的池进行交互以使用前一个函数的参数获取贷款。

第 34-50 行:通过计算溢价(利息费用),这是借款金额的 0.09%,批准 ERC20 代币与 Aave 的借贷池,并归还贷款金额。

部署闪电贷合约

编译合约并忽略编译智能合约后收到的警告。确保选择 0.8.10 作为 Solidity 编译器版本。 现在我们的合约已经编译完成,让我们部署它。我们需要 Aave 的池提供者地址来部署合约。前往 Aave V3 文档的测试网地址页面,选择 Polygon Mumbai,并复制 PoolAddressesProvider-Polygon 的地址。

Aave 文档中 Polygon Mumbai 测试网的 PoolAddressesProvider 地址

将地址粘贴到 Deploy 按钮附近,选择 REMIX 环境中的 Injected Provider,并部署合约。点击 Deploy 后,从 MetaMask 弹出窗口中批准交易。

使用 PoolAddressesProvider-Polygon 地址部署合约

部署完成后,合约将出现在 Deployed Contracts 部分下,复制合约地址并保存。

复制已部署合约的地址

为闪电贷提供资金

我们需要一些 Polygon Mumbai 测试网 USDC 在我们的智能合约中支付闪电贷的利息费用。前往 Aave 的水龙头,选择 Polygon Market,连接 MetaMask,并通过点击 USDC 旁边的 Faucet 获取 USDC。

Aave 水龙头的截图

然后将一些 USDC(本例中为 1)发送到我们在上一步中部署的智能合约。复制智能合约地址并将 USDC 发送到智能合约。

执行闪电贷

前往 Aave V3 文档的测试网地址页面,选择 Polygon Mumbai,并复制 USDC 储备的地址。

复制 USDC 储备的地址

展开 Deployed Contracts 部分下的智能合约,并展开 fn_RequestFlashLoan 函数按钮。将 USDC 储备的地址粘贴到 _token 字段中,并在 _amount 字段中输入要借入的 USDC 数量(本例中为 10)。在 Solidity 中输入 ERC20 代币数量时,我们还需要提到该 ERC20 代币的小数位数。USDC 的小数位数为六,因此 10 USDC 将是 10000000。

执行闪电贷

点击 transact 按钮,然后从 MetaMask 中批准交易。复制交易哈希并在 Mumbai Polygonscan 上搜索该交易。你可以看到一个闪电贷交易,其中包含有关借入和归还金额 + 利息的信息。

Mumbai Polygonscan 上闪电贷交易的截图

这就是你在 Aave V3 上进行闪电贷的方式!

结论

恭喜你完成了闪电贷;你在没有抵押品的情况下借入了贷款。在本指南中,我们了解了闪电贷,创建并部署了一个 Aave V3 闪电贷合约,在没有抵押品的情况下借入了一些代币,并归还了贷款和利息费用。如果你有任何问题,请加入我们的 Discord,或通过 Twitter 联系我们。

我们 ❤️ 反馈!

如果你对本指南有任何反馈或问题,请告诉我们。我们很乐意听取你的意见!

  • 原文链接: quicknode.com/guides/def...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
QuickNode
QuickNode
江湖只有他的大名,没有他的介绍。