首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >失败与错误'27‘- Aave闪存贷款稳健

失败与错误'27‘- Aave闪存贷款稳健
EN

Ethereum用户
提问于 2022-11-19 03:23:45
回答 1查看 204关注 0票数 0

我已经成功地将合同部署到goerli测试网,通过“硬帽子”。然而,当我尝试用元问询调用requestFlashLoan函数时,事务建议的煤气费似乎异常大,并且失败时出现了“失败与错误'27'”。我发现这意味着‘函数的调用者不是贷款池配置器’。然而,我仍然被困在如何实际解决这个问题上。

被困在这几天现在,任何方向都会非常感谢!

Tx:https://goerli.etherscan.io/tx/0xfb200d7dafa42dc811a19e984b75ae966951f12b8864d10995491a644044a3f8

我的可靠代码在下面。

代码语言:javascript
复制
// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.10; // .10 because thats the version a lot of the aave contracts that will be used are on.

import {FlashLoanSimpleReceiverBase} from "@aave/core-v3/contracts/flashloan/base/FlashLoanSimpleReceiverBase.sol";
import {IPoolAddressesProvider} from "@aave/core-v3/contracts/interfaces/IPoolAddressesProvider.sol";
import {IERC20} from "@aave/core-v3/contracts/dependencies/openzeppelin/contracts/IERC20.sol";

contract FlashLoan is FlashLoanSimpleReceiverBase {
    address payable owner;

    constructor(address _addressProvider)
        FlashLoanSimpleReceiverBase(IPoolAddressesProvider(_addressProvider))
    {
        owner = payable(msg.sender);
    }

    function executeOperation(
        address asset,
        uint256 amount,
        uint256 premium,
        address initiator,
        bytes calldata params
    ) external override returns (bool) {
        // we have the borrowed funds
        // Logic
        uint256 amountOwed = amount + premium;
        IERC20(asset).approve(address(POOL), amountOwed);

        return true;
    }

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

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

    function getBalance(address _tokenAddress) external view returns (uint256) {
        return IERC20(_tokenAddress).balanceOf(address(this));
    }

    function withdraw(address _tokenAddress) external onlyOwner {
        IERC20 token = IERC20(_tokenAddress);
        token.transfer(msg.sender, token.balanceOf(address(this)));
    }

    modifier onlyOwner() {
        require(msg.sender == owner, "Only the contract owner can call this function");
        _;
    }

    receive() external payable {}
}
EN

回答 1

Ethereum用户

回答已采纳

发布于 2022-11-24 21:52:05

我想你想借用一个错误的地址标记pool.<

函数requestFlashLoan(_token,_amount)包含两个参数:要借入的令牌地址和金额。

我认为您把令牌的地址传递给了第一个参数。

尝试在AAVE V3测试网上使用USDC的官方地址: 0xa2025b15a1757311bfd68cb14eaefcc237af5b43

(请参阅文档地址:https://docs.aave.com/developers/deployed-contracts/v3-testnet-addresses)

在本文档中,您可以在闪存贷款上借入的所有令牌地址都在本文档中。

我想我的回答会对你有所帮助:)

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/139653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档