【问题标题】:ERC20: transfer amount exceeds allowance, even when it is approvedERC20:转账金额超过限额,即使被批准
【发布时间】:2021-11-07 23:47:52
【问题描述】:

返回错误: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"
      }
   }
]

【问题讨论】:

    标签: blockchain ethereum erc20


    【解决方案1】:
    ERC20Tokens[tokenTicker].token.approve(ERC20Tokens[tokenTicker].tokenHolder, 10);
    

    此行批准tokenHolder 花费您的合同的代币。反之亦然。

    所以transferFrom() 失败了,因为你的合约试图花费tokenHolder 的代币。


    如果你希望你的合约能够花费tokenHolder 的代币,tokenHolder 需要直接从他们的地址在token 上执行approve() 函数。不是通过中间的合同。

    【讨论】:

    • 这是以太坊主网络的一个分支,我正在尝试向我的账户发送一些 USDC 代币。我发现代币的所有者有一些,所以我使用了他的地址。有没有其他方法可以在这个智能合约中获得多个 USDC 币?
    • @taranchik 除非您知道tokenHolder 地址的私钥(您可以使用它直接从他们的地址执行transfer() 方法),否则他们需要先从approve() 获取令牌他们的地址直接。目前没有其他已知方式可以在没有密钥/批准的情况下使用属于其他地址的代币。
    • 传入ERC20 openzeppelin构造函数令牌地址,是否有可能以某种方式获得其中一些令牌?
    • @taranchik 您正在实例化的合约的唯一令牌(使用构造函数)。但是由于 USDC 合约已经实例化,所以不能第二次执行它的构造函数。
    猜你喜欢
    • 2022-12-05
    • 2022-01-08
    • 2021-12-28
    • 1970-01-01
    • 2021-11-02
    • 2016-03-17
    • 1970-01-01
    • 2015-02-04
    • 2013-09-22
    相关资源
    最近更新 更多