對合約進行除錯

您可以使用 Solidity 主控台日誌對在模擬的 Hardhat 本機節點上執行的合約進行除錯。

若要對合約進行除錯,請將它部署到內建的硬體本地節點環境,然後只在本機除錯分支或暫時工作複本中進行所有記錄變更。

內建的本機環境名稱為 hardhatnode,並使用鏈結 ID 為 31337 的 http://127.0.0.1:8545。它不是已儲存的 Oracle Blockchain Platform 或其他 EVM 環境。當您選取它來部署或執行合約且沒有監聽本機節點時,Besu 的 Blockchain App Builder 會啟動所選專案的 Hardhat 節點,並開啟 Hardhat 本機節點終端機。

  1. 在包含要檢查之程式碼路徑的 Solidity 檔案頂端,新增 Hardhat 主控台匯入。
    import "hardhat/console.sol";
  2. 在功能或內部協助程式中新增暫時日誌以進行調查。
    console.log("value", value);
    下列程式碼顯示一般日誌範例。
    console.log("entered transfer");
    console.log("caller", msg.sender);
    console.log("amount", amount);
    console.log("is allowed", isAllowed);
    使用與您正在檢查的變數相符的值類型。這些範例包含字串、地址、整數值和布林值。縮小日誌敘述句的範圍和暫時性;請勿記錄私密金鑰、認證權杖或其他證明資料。
  3. 在部署 / 執行表單中,如果您需要捨棄舊的人工因素,請選取清除,然後選取編譯。
  4. 選取 Hardhat Local Node 作為環境。
  5. 部署本機合約實例,或使用已部署的本機代理。滿足本機網路中任何專案特定的部署先決條件,例如治理合約。
  6. 開啟執行窗格,選取本機權杖或帳戶代理主機,輸入函數參數,然後選取查詢或呼叫。

    查詢會完成本機呼叫,呼叫會傳送本機交易。可以到達記錄的程式碼路徑,但只有呼叫會變更模擬的鏈結狀態。

  7. 在 Visual Studio Code 中開啟 Hardhat Local Node 終端機,並檢查發出的日誌行。
  8. 移除 hardhat/console.sol import 敘述句和每個暫時的 console.log 敘述句。
  9. 在確認程式碼或使用 Oracle Blockchain Platform Besu、其他 EVM 或生產環境之前,請先清除和編譯。

請勿嘗試在 Oracle Blockchain Platform 或其他 EVM 環境使用僅限硬體儀表。相反地,使用一般應用程式事件、鏈外交易追蹤或環境核准的可觀察性。主控台日誌記錄無法取代生產環境診斷。

除錯處理程序疑難排解

條件 解決方式
找不到 hardhat/console.sol 在選取的專案中執行安裝相依性,然後重新編譯。匯入是由專案的「強制」相依性提供。
本機節點未啟動 確認選取的專案包含 hardhat.config.ts 或 hardhat.config.js,確認 Visual Studio 程式碼可以使用 Node.js 和 npm,並檢查硬體本機節點終端機是否有啟動錯誤。
未顯示任何日誌 確認 Hardhat Local Node 是選取的環境,所呼叫的程式碼路徑會到達 log 陳述式,且您正在檢視 Hardhat Local Node 終端機,而非 Oracle Blockchain Platform 或專案終端機。
應用程式正在使用舊代碼 請先選取清除,然後選取編譯,再進行部署或重新呼叫。
非本機組建或部署在除錯後失敗 移除每一個 hardhat/console.sol 匯入和 console.log 呼叫,然後清除並再次編譯專案。