【问题标题】:Sending ERC20 tokens using the transfer function使用转账功能发送 ERC20 代币
【发布时间】:2022-01-04 19:58:04
【问题描述】:

我对 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 找到的不同地址,同时确保合约有足够的资金进行转账,但我没有成功。

有人可以建议我的合同/设置可能出了什么问题吗?我是否正确地进行了这种转移?

【问题讨论】:

    标签: cryptography ethereum solidity smartcontracts bsc


    【解决方案1】:
    • 修复构造器

      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");
      
    • 检查您是否连接到正确的网络

    【讨论】:

    • 感谢您的回答!确实是合约地址和余额的问题。
    • 也谢谢你。祝你好运
    猜你喜欢
    • 2022-03-15
    • 2018-04-04
    • 2019-12-15
    • 2021-08-06
    • 2022-01-20
    • 2018-11-09
    • 2021-09-17
    • 2022-09-27
    • 2021-04-26
    相关资源
    最近更新 更多