Tokens
使用 transfer from 方法時由 EVM 還原的事務
我正在使用一種方法,其中呼叫了 ERC20 令牌的 transferfrom 方法。在測試 enn 中,我使用自己的 ERC20 令牌和 ganache,一切正常。但是在 Rinkeby 測試網中,當我在 Rinkeby 中使用 ERC20 的介面和 Deplyoed 令牌的地址時,我得到了錯誤。
這是我的存款功能:
function deposit(uint _value, IERC20 _currency) public { require(_currency.transferFrom(msg.sender , address(this), _value), "transferFrom failed"); } }
在我的 web3 中,我首先呼叫批准函式(並等待被開採)然後呼叫存款,在 Ganache 中一切正常,但在 Rinkeby 中,我總是會恢復我的存款。
web3 程式碼:
ERCInstance.methods.approve('deposit contract address', token amount).send({from: accounts[0]}).on('transactionHash', (hash) => { dipositeContractInstance.methods.deposit(amount, 'ERC address'). send({from: accounts[0]}).on('receipt', function(receipt){ });
請注意,我在 rinkeby 中使用了預先創建的 ERC20 代幣,甚至創建了自己的代幣,但仍然可以恢復。例如 rinkeby dai 地址是:‘0xc7AD46e0b8a400Bb3C915120d284AafbA8fc4735’
這可能導致錯誤有幾個原因:
- 根據web3js 文件
transactionHash
,一旦事務雜湊可用,該事件就會自動觸發。在本地 ganache 區塊鏈上,交易通常在發送後立即得到確認和探勘(除非另有配置)。在測試網和主網上,這個事件通常總是在交易被真正確認之前觸發。如果您隨後發送另一筆交易,他們可能會以錯誤的順序被確認或被拒絕。(儘管隨機數應該防止這種情況)。確保始終使用receipt
事件或只是等待承諾解決。- 您沒有足夠的代幣來完成轉移。為了成功呼叫
transferFrom
,發送方不僅必須批准運營商,還必須有足夠的令牌。希望我能幫上忙。