智能合约 - BEP20:转账金额超过限额

Smart Contract - BEP20: transfer amount exceeds allowance

我是 solidity 的新手,我正在尝试将代币从“地址 A”交换到“地址 B”。

我使用了函数 approve 和 transferFrom,但我仍然收到错误:“错误:处理事务时出现 VM 异常:已恢复,原因字符串 'BEP20: transfer amount exceeds allowance'”

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

// 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);
    }

}

approve 必须在 transferFrom 之前被开采 called.You 不能在同一个电话中同时进行,这意味着批准应该在进入 swapTokens 函数。

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