Solidity
返回錯誤:VM Exception while processing transaction:revert ERC20:轉賬金額超過餘額
我的程式碼像這樣:
// 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
合約繼承自 OpenzeppelinERC20
,所以 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);