Solidity
如何調試可靠性測試
我正在使用 ganache 和 truffle 編寫一些可靠的測試(按照https://www.trufflesuite.com/docs/truffle/testing/writing-tests-in-solidity中的範例)。
我收到了通常但不是很有幫助的消息:“錯誤:返回錯誤:處理事務時出現 VM 異常:還原”。
我在程式碼中添加了事件,包括測試和實際契約。
發生錯誤時不顯示任何內容。
它沒有顯示失敗的事務,因此我無法嘗試啟動調試會話。
沒有斷點,也沒有日誌記錄。如何調試此測試?
使用控制台,我已驗證契約是否按預期工作。
首先,事務失敗時不會保存事件日誌,因此您可以使用日誌查看程式碼停止的位置。
如果您正在使用,您可以使用帶有參數
geth
的 rpc 命令,它將返回從您正在呼叫的合約開始對每個外部合約進行的所有呼叫。debug_traceTransaction``traceCaller
如果您正在使用
ganache
,則上述選項不可用,最好的辦法是創建一個測試智能合約,該合約永遠不會失敗交易以獲取事件日誌。另一種選擇是使用soliditytry
,並且catch
在您認為會在沒有消息的情況下恢復的合約呼叫中,在您的catch塊中,您可以使用自己的消息進行恢復。no message revert 很容易成為您自己的合約程式碼未正確執行的問題,例如索引超出範圍,或者嘗試遍歷更改的列表時。
在調試方面,您可能想檢查Hardhat。這是一個開發環境,您可以在其中將 console.logs(與在 javascript 中的方式相同)放置在您的智能合約中,這將使您更好地了解您的邏輯到底在哪里中斷。