Erc-20

使用乙太幣發送 tx 時如何繞過飛行前檢查?

  • July 12, 2021

在我的 dapp 中,我有以下流程:

  1. 創建一個空的事務數組。
  2. 檢查 ERC-20 配額是否足夠,如果沒有,則將令牌批准 tx 附加到數組中。
  3. 將代幣存款交易附加到數組中。

在所有情況下,數組最終都會在其中包含一個或兩個事務。在後一種情況下,當配額不足時,由於 ethers 拋出的錯誤,第二筆交易無法發送:

“執行恢復:SafeERC20:低級呼叫失敗”

現在,我知道這是什麼原因了。我不是在等待批准交易通過,因此區塊鏈的狀態假定配額不足,並在嘗試呼叫“transferFrom”函式時恢復。

我想繞過這個檢查。基本上,我想樂觀地假設批准交易會通過,並且沒有其他任何事情會導致存款交易恢復。

一種方法是將合約呼叫包裝在 try/catch 塊中,但這意味著我必須檢查錯誤字元串,以便當錯誤與上面引用的錯誤不同時,會向使用者發出警報。有沒有更優雅的方式在乙太中做到這一點?也許有一個選項可以打開和禁用“此交易是否會恢復”檢查?

感謝ricmoo留下的評論,我在發布問題後想通了:

你在設置gasLimit嗎?如果沒有設置gasLimit,則ethers 將使用estimateGas,如果呼叫失敗,它會拋出一個CALL_EXCEPTION,在這種情況下它會失敗。

如果我們不提供硬編碼的“gasLimit”,ethers 會嘗試自行估算 gas 成本。但是當 ERC-20 配額不足時(如我的情況),交易會恢復,因為它應該。

因此,解決方案是將“gasLimit”傳遞給合約呼叫。不是很好,也不是很糟糕。

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