[英]Sending ERC20 tokens using the transfer function
我對 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
function 提供發送的值和我在 BSC 測試網中的錢包地址,但在運行transferERC20
function 時遇到問題。 我在調用此方法時得到的唯一 output 是以下消息:
氣體估計錯誤並顯示以下消息(見下文)。 事務執行可能會失敗。 是否要強制發送? 內部 JSON-RPC 錯誤。 {“代碼”:-32000,“消息”:“執行恢復”}
我嘗試了幾個在 testnet.bscscan 網站上為 BNB 找到的不同地址,同時確保合約有足夠的資金進行轉賬,但我沒有成功。
有人可以建議我的合同/設置可能出了什么問題嗎? 我是否正確進行此轉移?
修復構造器
constructor() { // payable allows payment of ether with a call. owner = payable(msg.sender); }
確保滿足這些require
語句
require(msg.sender == owner, "Only owner can withdraw funds"); require(amount <= balance, "Insufficient funds");
檢查您是否連接到正確的網絡
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.