微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Solidity - 转账金额超过消费者限额

如何解决Solidity - 转账金额超过消费者限额

代码看起来正确,在转移前批准令牌,但失败并出现错误:“转移金额超过了消费者限额” 发件人帐户的令牌余额超过了要求。

有什么想法吗? 合同:https://rinkeby.etherscan.io/address/0x2a855c479b14443489963eef90ad449ecdf40cf5#writeContract

pragma solidity ^0.7.0;  


interface IERC20 {
   function transferFrom(address sender,address recipient,uint256 amount) external returns (bool);
   function approve(address spender,uint256 amount) external returns (bool); 
   function transfer(address recipient,uint256 amount) external returns (bool);
} 
 
contract FundTokenContract { 
    address public owner;   
     
    constructor(){ 
        owner = msg.sender;
    }   
    
    modifier OnlyOwner() {
        require(msg.sender == owner,"Only owner can call this function.");
        _;
    } 
    
     function fundToken(address tokenAddress,uint amount ) external {  
        require(amount > 0);  
        IERC20(tokenAddress).approve(address(this),amount); 
        IERC20(tokenAddress).transferFrom(msg.sender,address(this),amount);  
    }  
      
      
    function withdrawToken(address _tokenAddress,address  _recipient,uint _amount) public  OnlyOwner returns (bool){  
        IERC20(_tokenAddress).transfer(_recipient,_amount);
        return true;
    }  
}

enter image description here

enter image description here

解决方法

当您的合约执行 tokenAddress 函数 approve() 时,msg.sender 函数中的 approve()您的合约(不是用户启动交易)。

有效地批准“您的合同”(第一个参数 address(this))花费“您的合同”的 (msg.sender) 资金。

然后它试图transferFrom()用户地址,但它没有获得批准。


如果您希望您的合同使用属于其他用户的代币,他们需要直接(而不是通过合同)从他们的地址执行 approve(<yourContract>,<amount>)

注意:请参阅 this answer 中的 TLDR,它显示了此要求的用途。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?