Solidity
有沒有辦法擷取 require / revert 失敗的原因?
在我的契約中,我在公共功能開始時進行了大量檢查。它看起來像這樣:
require ( prx < 1e18, "Value prx too high") require ( prx != 0, "Value prx cannot be zero") if (!validAmt(amt)) { revert("Value amt invalid"); }
顯然,我希望使用者看到失敗和原因文本,這在 web3.js 或 web3.py 中是否可能?
我知道我可以擷取事件,但我不想記錄此類故障的事件。
在您的 web3 程式碼中,您可以使用 try/catch 塊,並解析拋出的錯誤:
try { const receipt = await web3.methods.foo().send(...); ... } catch (e) { //parse e here, the reason will be inside }
遺憾的是,沒有簡單的方法可以在通用的事務級別上做到這一點。如果您從合約中呼叫合約,您可以在呼叫合約中擷取原因。然後你會記錄一個事件日誌 LogError(string) 來記錄它找到的原因。
但是,如果您需要還原根呼叫(即 EOA 對合約進行的第一次呼叫),唯一的方法是對交易執行奇偶校驗調試跟踪以獲取還原原因。