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

通过合约从地址A发送令牌到地址B

如何解决通过合约从地址A发送令牌到地址B

我试图在我的合同中执行一个功能,当有人使用它时:

  1. 获取msg.sender的tokenX_v1余额,
  2. 从我的合约中发送相同数量的 tokenX_v2,
  3. 将他的 tokenX_v1 发送到我的合约或销毁地址。

第 1 部分和第 2 部分我是这样做的:

function query_oldBalance(address _adrs) view public returns (uint) {
  address _tokenAddress = "tokenV1"
  return IERC20(_tokenAddress).balanceOf(_adrs);

function myfunction() public {
  _tokenTransfer(address(this),msg.sender,query_oldBalance(msg.sender),false);

直到这里它按预期工作,但现在我需要从 msg.sender 中删除 tokenV1,我想进行转移以将其发送到合同或销毁地址,但是当我尝试进行 transferFrom 我得到: execution reverted: ERC20: transfer amount exceeds allowance 即使我把津贴放在我试图转移的数量上 如果我尝试进行正常转移,我在这里得到了 "execution reverted: Transfer amount exceeds the maxTxAmount. 相同的信息,我尝试将 maxtxamount 设置为比我尝试转移的令牌大得多的数字..关于津贴, 我不确定津贴和批准是如何工作的,以及在这种情况下我是否需要它,但这是我尝试过的:

IERC20(_tokenAddress).allowance(msg.sender,address(this)); 
IERC20(_tokenAddress).approve(address(this),query_oldBalance(msg.sender)); //tried with this multiplied by 10 same story

我真的不明白如何通过合约进行地址A到地址B的代币转移..希望有人可以帮助我谢谢。

解决方法

        IERC20(_tokenAddress).transferFrom(msg.sender,address(this),old_balance);

在调用这个函数之前,用户应该在旧的代币合约上批准新代币的地址

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