Solidity

返回錯誤:VM Exception while processing transaction:revert ERC20:轉賬金額超過餘額

  • March 14, 2022

我的程式碼像這樣:

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;

import "./INToken.sol";
import "./Console.sol";

contract TransferCoin is Console {

   // 这个状态变量存储在区块链网络上
   address public owner;
   INToken public coin;

   constructor(address _coinAddress) {
       // 合约拥有者为合约创建者
       owner = msg.sender;
       // 设置映币地址
       coin = INToken(_coinAddress);
   }

   function trans(address _to, uint256 _amount) public {
       log("_to", _to);
       log("_amount", _amount);
       coin.transfer(_to, _amount);
   }
}

當我嘗試使用trans功能時,錯誤:transact to TransferCoin.trans errored: Returned error: VM Exception while processing transaction: revert ERC20: transfer amount exceeds balance.

但我的賬戶餘額是99999596.

誰能幫我告訴我如何解決這個問題,謝謝。

TransferCoin::trans函式中,你呼叫的是coin.transfer(_to, _amount),由於你的INtoken合約繼承自 Openzeppelin ERC20,所以 transfer 實現使用msg.sender 表示它是從你的TransferCoin合約餘額中轉賬。

請查看tx.origin 和 msg.sender之間的區別

也許你應該看看delegatecall

確保您的契約有足夠的INToken餘額。試試這個,https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol#L158

coin.transferFrom(address(this), _to, _amount);

引用自:https://ethereum.stackexchange.com/questions/123779