Solidity
從智能合約返回錯誤消息
我正在嘗試從solidity 返回錯誤消息。我有這個契約:
pragma solidity ^0.4.23; contract Simple { function arithmetics(uint a, uint b){ require(a % 2 == 0, "Even value required."); b = b * 3; } }
當我在混音中進行測試時,它會返回以下錯誤消息:
處理到 Simple.arithmetics 錯誤:VM 錯誤:還原。revert 事務已恢復到初始狀態。契約提供的理由:“要求均值”。調試事務以獲取更多資訊。
但是,當我嘗試使用 web3.js 從我的 dApp 呼叫它時,我沒有收到錯誤消息,只有這個:
交易的gas用完了。
您可以找到跟踪事務的錯誤消息。例如,使用 geth 並且我假設您的節點執行在
http://127.0.0.1:8545
:1-打開控制台
geth attach http://127.0.0.1:8545
2-跟踪交易
debug.traceTransaction(<your TX hash here>)
您應該獲得交易跟踪。如果您的 geth 節點未
debug
啟用,您可以執行如下 HTTP 請求:
curl -X POST --data '{"jsonrpc":"2.0","method":"debug_traceTransaction","params":["<your TX hash here>"],"id":1}' http://127.0.0.1
現在您有了跟踪,您可以美化 JSON 以更好地查看它。在最底部,您將找到最後一條指令和 EVM 狀態(以及其他內容)。最後一條指令應該是一個
REVERT
操作碼。然後,轉到該MEMORY
部分,您可以將其轉換為 ascii 以查找錯誤消息。例如,在 bash 中,此命令將從 hex 轉換為 ascii:
echo <your HEX here> | xxd -r -p