Solidity
呼叫 transfer 到合約本身後交易失敗
我在 ERC721 契約的某些功能中有這一行:
IERC20 實例 = IERC20(token_address); instance.transfer(address(this),1);
並在部署合約時確保函式的呼叫者至少獲得其中一個 ERC20 令牌:
ERC20代幣
$$ -1 $$.mint(account2,1,{“來自”:account1}) 在部署 ERC721 合約並使用 account2 呼叫此特定函式之前,我得到的錯誤是:“gas 估算失敗:‘執行恢復:ERC20:轉賬金額超過餘額’。此交易可能會恢復。如果你想廣播,你必須設置手動設置氣體限制。”
在批准 ERC721 合約從 account2 中花費一些 ERC20 之後,它就可以工作了。在批准這個特定問題時它不起作用.. (instance.approve(address(this),1)) msg.sender 是 account2.. 這是怎麼回事?謝謝!
ERC20 中的
transfer
功能是將代幣從目前合約地址轉移到其他帳戶,因此您的程式碼行試圖將 1 個單位的代幣從合約轉移到自己。您最有可能尋找的
transferFrom(sender, recipient, amount)
是一種更通用的形式transfer
,允許您的合約從已批准您的合約的賬戶發送代幣。在您的範例中,它將是:
IERC20 instance = IERC20(token_address); instance.transferFrom(msg.sender, address(this), 1);
但是,您將無法
approve
代表您的契約中的其他使用者呼叫 - 這始終是使用者在與您的契約互動之前必須做的事情。