0

我是新来的,我正在尝试将令牌从“地址 A”交换到“地址 B”。

我使用了函数approval和transferFrom,但我仍然收到错误:“错误:处理交易时出现VM异常:使用原因字符串'BEP20:转账金额超过限额'恢复”

你能帮我解决这个问题吗?

// SPDX-License-Identifier: MIT OR Apache-2.0
pragma solidity ^0.8.3;

import "./CryptoPlinkoBall.sol";
import "./CryptoPlinko.sol";

import "hardhat/console.sol";

contract TokenSwap {
    address admin;
    address public owner;
    address private _token;

    constructor(address token) {
        admin = msg.sender;
        _token = token;
    }

    function swapTokens(address recipient, uint256 amount) external {
         BEP20(_token).approve(msg.sender, amount);
        BEP20(_token).allowance(msg.sender, address(this));
        BEP20(_token).transferFrom(msg.sender, recipient, amount);
    }

}
4

2 回答 2

0

当您打电话BEP20(_token).approve(msg.sender, amount);时,如果您想从用户那里转移代币,则您正在批准用户移动合约拥有的代币数量,如果您正在做,用户应该在调用此函数之前调用代币合约并批准该金额将与合约交互的前端,您需要先调用令牌合约,然后调用此合约

于 2021-12-02T02:25:06.397 回答
0

approve必须在调用之前进行挖掘。您transferFrom不能在同一个调用中同时执行这两种操作,这意味着应该在进入swapTokens函数之前进行批准。

于 2021-12-01T13:35:29.693 回答