智能合约 - 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 在调用这个函数之前,如果你正在做将与合约交互的前端,你需要先调用代币合约,然后再调用这个合约
我是 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 在调用这个函数之前,如果你正在做将与合约交互的前端,你需要先调用代币合约,然后再调用这个合约