Tokens

使用 transfer from 方法時由 EVM 還原的事務

  • January 19, 2021

我正在使用一種方法,其中呼叫了 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’

這可能導致錯誤有幾個原因:

  1. 根據web3js 文件transactionHash,一旦事務雜湊可用,該事件就會自動觸發。在本地 ganache 區塊鏈上,交易通常在發送後立即得到確認和探勘(除非另有配置)。在測試網和主網上,這個事件通常總是在交易被真正確認之前觸發。如果您隨後發送另一筆交易,他們可能會以錯誤的順序被確認或被拒絕。(儘管隨機數應該防止這種情況)。確保始終使用receipt事件或只是等待承諾解決。
  2. 您沒有足夠的代幣來完成轉移。為了成功呼叫transferFrom,發送方不僅必須批准運營商,還必須有足夠的令牌。

希望我能幫上忙。

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