繁体   English   中英

在 Polygon Mumbai Tes.net 上恢复 Balancer 闪贷交易执行

[英]Balancer flashloan transaction execution reverting on Polygon Mumbai Testnet

我试图在 Balancer 的金库合约上调用 flashLoan() function,但是当我在 polygonscan mumbai 上查看交易时,我不断收到“执行已恢复”错误。

这是我的智能合约代码:

// SPDX-License-Identifier: agpl-3.0
pragma solidity ^0.8.7;
pragma abicoder v2; 
import "@balancer-labs/v2-interfaces/contracts/vault/IFlashLoanRecipient.sol";
import "@openzeppelin/contracts/utils/math/SafeMath.sol";

interface Vault {
    function flashLoan(
        IFlashLoanRecipient recipient,
        IERC20[] memory tokens,
        uint256[] memory amounts,
        bytes memory userData
    ) external;
}

contract FlashLoanSimple is IFlashLoanRecipient {
    using SafeMath for uint256;
    address internal constant vaultAddr = 0xBA12222222228d8Ba445958a75a0704d566BF2C8;

    Vault vault = Vault(vaultAddr);

    function receiveFlashLoan(IERC20[] memory tokens,uint256[] memory amounts,uint256[] memory 
    feeAmounts,bytes memory userData) external override {   
        userData;
    
        for (uint i = 0; i < tokens.length; i++) {
            uint amountOwing = amounts[i].add(feeAmounts[i]);
            if(address(this).balance >= amountOwing) {
                IERC20(tokens[i]).approve(vaultAddr,amountOwing);
                IERC20(tokens[i]).transfer(vaultAddr, amountOwing);
            }             
        }
    }

    function executeFlashLoan(address _flTokenAddr,uint256 _flAmount) external {
        IERC20 flToken = IERC20(_flTokenAddr);
        IERC20[] memory flTokens = new IERC20[](1);
        uint256[] memory flAmounts = new uint256[](1);
        flTokens[0] = flToken;
        flAmounts[0] = _flAmount ;
        Vault(vaultAddr).flashLoan(IFlashLoanRecipient(address(this)),flTokens,flAmounts,"");
    }
}

这是我的脚本的一部分:

const maticProvider = new ethers.providers.JsonRpcProvider("https://polygon- 
mumbai.g.alchemy.com/v2/Q0iw05Ps4B9YV10FMtVUSBOzxNKVoV2x");
const private_key = "xxxxxxxxxxxxxxxxxxxxxxxx";
const signer = new ethers.Wallet(private_key, maticProvider);
const Flashloan = new ethers.Contract(flashloanAddress,FlashloanJson.abi,maticProvider);

export const flashloan = async (address: string, amountIn: BigNumber) => {
  const gasPrice = await maticProvider.getGasPrice();
  const tx = await Flashloan.connect(signer).executeFlashLoan(address,amountIn, {gasLimit: 
  15000000,gasPrice: gasPrice});
  return tx;
};

任何帮助将不胜感激,我之前收到与气体相关的错误,但在我增加气体限制后我不再收到该错误。 我的合约部署在 Polygon Mumbai.network 上,余额为 3 MATIC。

问题是我使用的是 Mumbai.network,它仅在部署在 mai.net 上时有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM