【发布时间】:2022-01-01 07:31:51
【问题描述】:
我的目标是创建一个智能合约,用户可以使用它来存入 erc20 和提取 erc20 代币。我尝试使用代币转移和 transferfrom 函数来实现此功能,尝试将代币发送到合约地址。但它显示了一些错误。我尝试了互联网上所有可能的解决方案,但没有运气。请帮助我################################ #######
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.10;
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
contract TestFunding{
mapping(address => uint) public users;
address public owner;
uint public minimumDeposit;
uint public totalDeposit;
uint public noOfUsers;
constructor(){
owner = msg.sender;
}
function depositToken(address _token,uint _amount) public {
IERC20(_token).approve(address(this), _amount);
IERC20(_token).transferFrom(msg.sender,address(this),_amount);
}
function depositToken2(address _token,uint _amount) public {
IERC20(_token).transfer(address(this), _amount);
}
function getUserBalance() public view returns(uint)
{
return users[msg.sender];
}
function getCurrentBalance(address _token) public view returns(uint)
{
return IERC20(_token).balanceOf(address(this)) ;
}
function getTokenBalance(address _token,address _account) public view returns(uint)
{
return IERC20(_token).balanceOf(_account) ;
}
function withdrawToken(address _token,uint _amount) public
{
IERC20(_token).approve(msg.sender, _amount);
IERC20(_token).transferFrom(address(this),msg.sender,_amount);
}
}
在此处输入图片说明
当我尝试使用 depositToken 转账时出现错误,显示交易到 TestFunding.depositToken 错误:VM 错误:还原。
revert 事务已恢复到初始状态。合约提供的原因:“ERC20:转账金额超过限额”。调试事务以获取更多信息。
当我尝试使用 depositToken 函数进行转账时,错误显示交易到 TestFunding.depositToken2 出错:VM 错误:还原。
revert 事务已恢复到初始状态。注意:如果您发送值并且您发送的值应该小于您当前的余额,则调用的函数应该是应付的。调试事务以获取更多信息。
【问题讨论】:
标签: blockchain solidity transfer metamask erc20