我对 Solidity 编程很陌生,我目前正在尝试在 Remix 中运行一个简单的智能合约,如下所示:
pragma solidity ^0.8.0;
import "github.com/OpenZeppelin/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol";
contract Swap {
address public owner;
uint256 public balance;
event TransferReceived(address _from, uint _amount);
event TransferSent(address _from, address _destAddr, uint _amount);
constructor() {
owner = msg.sender;
}
receive() payable external {
balance += msg.value;
emit TransferReceived(msg.sender, msg.value);
}
function withdraw(uint amount, address payable destAddr) public {
require(msg.sender == owner, "Only owner can withdraw funds");
require(amount <= balance, "Insufficient funds");
destAddr.transfer(amount);
balance -= amount;
emit TransferSent(msg.sender, destAddr, amount);
}
function transferERC20(IERC20 token, address to, uint256 amount) public {
require(msg.sender == owner, "Only owner can withdraw funds");
uint256 erc20balance = token.balanceOf(address(this));
require(amount <= erc20balance, "balance is low");
token.transfer(to, amount);
emit TransferSent(msg.sender, to, amount);
}
}
虽然我可以成功发送 BNB 并withdraw
在 BSC 测试网中调用提供发送值和我的钱包地址的函数,但在运行该transferERC20
函数时遇到了问题。调用此方法时我得到的唯一输出是以下消息:
气体估计错误并显示以下消息(见下文)。事务执行可能会失败。是否要强制发送?内部 JSON-RPC 错误。{“代码”:-32000,“消息”:“执行恢复”}
我尝试了几个在 testnet.bscscan 网站上为 BNB 找到的不同地址,同时确保合约有足够的资金进行转账,但我没有成功。
有人可以建议我的合同/设置可能出了什么问题吗?我是否正确进行此转移?