我是新来的,我正在尝试把代币从“地址A”换成“地址B”。
我使用了transferFrom和BEP20函数,但仍然收到错误:“错误:处理事务时的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);
}
}发布于 2021-12-02 02:25:06
当您调用BEP20(_token).approve(msg.sender, amount);时,您正在批准用户移动契约所拥有的令牌数量--如果您想从用户转移令牌,用户应该在调用此函数之前调用令牌契约并批准该金额,如果您正在执行与契约交互的前端操作,则需要先调用令牌契约,然后调用此合同。
发布于 2021-12-01 13:35:29
approve必须在transferFrom获取called.You不能在相同的调用中同时执行之前进行挖掘,这意味着在进入swapTokens函数之前应该进行审批。
https://stackoverflow.com/questions/70183999
复制相似问题