blockchain - ERC20:转账金额超过限额,即使被批准
问题描述
返回错误:VM Exception while processing transaction:revert ERC20:转账金额超出限额
代码:
ERC20Tokens[tokenTicker].token.approve(ERC20Tokens[tokenTicker].tokenHolder, 10);
emit tokenOwnerBalance(ERC20Tokens[tokenTicker].token.balanceOf(ERC20Tokens[tokenTicker].tokenHolder));
ERC20Tokens[tokenTicker].token.transferFrom(ERC20Tokens[tokenTicker].tokenHolder, address(this), 1);
日志:
[
{
"from":"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"topic":"0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925",
"event":"Approval",
"args":{
"0":"0x7A2946b37399fa3F1C9EF81c7Bcf94AE1099D18F",
"1":"0x95Ba4cF87D6723ad9C0Db21737D862bE80e93911",
"2":"10",
"owner":"0x7A2946b37399fa3F1C9EF81c7Bcf94AE1099D18F",
"spender":"0x95Ba4cF87D6723ad9C0Db21737D862bE80e93911",
"value":"10"
}
},
{
"from":"0x7A2946b37399fa3F1C9EF81c7Bcf94AE1099D18F",
"topic":"0xcff530ae4ada35c1dd7ac314ef643b9eb7ae40665958ad5899e2fbc18865444a",
"event":"tokenOwnerBalance",
"args":{
"0":"31000000"
}
}
]
解决方案
ERC20Tokens[tokenTicker].token.approve(ERC20Tokens[tokenTicker].tokenHolder, 10);
此行批准使用tokenHolder
您的合约代币。不是反过来。
所以transferFrom()
失败是因为你的合约试图花费tokenHolder
's 的代币。
如果您希望您的合约能够花费tokenHolder
的代币,则tokenHolder
需要直接从他们的地址执行该approve()
功能。token
不是通过中间的合同。
推荐阅读
- sql - 如何在 postgresql 函数中捕获异常?
- ios - 如何使用 SwiftUI 为包含在视图中的数字设置动画?
- r - 使用 tidyverse 的 R 扩展函数获取冒号分隔列的宽格式
- amazon-web-services - Lambda 访问 EC2 实例上的 Kibana 服务以及 S3
- c# - 为什么 HashSet 保留插入顺序?
- coq - 外延性公理:为什么它不是不合理的
- ios - 如何从带有导航控制器 iOS 13 的模态呈现的 ViewController 中全屏推送 ViewController?
- javascript - 如何在JS中将声明变量简化为数组
- flutter - 如何在颤振中添加步进布局?
- msbuild - 在 Windows 容器内构建引用 master.dacpac 的 dacpac