Solidity

如何調試可靠性測試

  • August 20, 2021

我正在使用 ganache 和 truffle 編寫一​​些可靠的測試(按照https://www.trufflesuite.com/docs/truffle/testing/writing-tests-in-solidity中的範例)。

我收到了通常但不是很有幫助的消息:“錯誤:返回錯誤:處理事務時出現 VM 異常:還原”。

我在程式碼中添加了事件,包括測試和實際契約。

發生錯誤時不顯示任何內容。

它沒有顯示失敗的事務,因此我無法嘗試啟動調試會話。

沒有斷點,也沒有日誌記錄。如何調試此測試?

使用控制台,我已驗證契約是否按預期工作。

首先,事務失敗時不會保存事件日誌,因此您可以使用日誌查看程式碼停止的位置。

如果您正在使用,您可以使用帶有參數geth的 rpc 命令,它將返回從您正在呼叫的合約開始對每個外部合約進行的所有呼叫。debug_traceTransaction``traceCaller

如果您正在使用ganache,則上述選項不可用,最好的辦法是創建一個測試智能合約,該合約永遠不會失敗交易以獲取事件日誌。另一種選擇是使用solidity try,並且catch在您認為會在沒有消息的情況下恢復的合約呼叫中,在您的catch塊中,您可以使用自己的消息進行恢復。

no message revert 很容易成為您自己的合約程式碼未正確執行的問題,例如索引超出範圍,或者嘗試遍歷更改的列表時。

在調試方面,您可能想檢查Hardhat。這是一個開發環境,您可以在其中將 console.logs(與在 javascript 中的方式相同)放置在您的智能合約中,這將使您更好地了解您的邏輯到底在哪里中斷。

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