solidity - 通过合约将代币从地址A发送到地址B
问题描述
我试图在我的合同中做一个功能,当有人使用它时:
- 它得到了 msg.sender 的 tokenX_v1 余额,
- 从我的合约中发送相同数量的 tokenX_v2,
- 将他的 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);
在调用这个函数之前,用户应该在旧代币合约上批准新代币的地址
推荐阅读
- flutter - 带有页面视图的自定义导航栏 [Flutter]
- swift - UITextView 属性文本未设置
- io - 使用 Cray 编译器可以直接 I/O 吗?
- javascript - chartjs - 如何在自定义工具提示回调中访问图表实例
- node.js - Vuejs错误:规则只能有一个资源源(提供资源和测试+包含+排除)
- r - 有条件地显示通过 withCallingHandlers 捕获的警告消息
- r - 创建的列在 R 中无法识别
- reactjs - 如何使用 Framer Motion 为数字设置动画?
- python-3.x - 在 groupby 中获得前 3 名,并将其余部分归为“其他类别”
- android - 如何在项目构建期间在 Android Studio IDE 中显示项目使用的所有 GCC / Clang 编译器选项?