Vertrag debuggen

Mit Solidity-Konsolenlogs können Sie Verträge debuggen, die auf dem simulierten lokalen Hardhat-Knoten ausgeführt werden.

Um einen Vertrag zu debuggen, stellen Sie ihn in der integrierten Hardhat Local Node-Umgebung bereit, und nehmen Sie alle Loggingänderungen nur in einer lokalen Debuggingverzweigung oder einer temporären Arbeitskopie vor.

Die integrierte lokale Umgebung heißt hardhatnode und verwendet http://127.0.0.1:8545 mit der Ketten-ID 31337. Es handelt sich nicht um eine gespeicherte Oracle Blockchain Platform- oder andere EVM-Umgebung. Wenn Sie einen Vertrag bereitstellen oder ausführen und kein lokaler Knoten horcht, startet Blockchain App Builder for Besu einen Hardhat-Knoten für das ausgewählte Projekt und öffnet das lokale Hardhat-Knotenterminal.

  1. Fügen Sie oben in der Solidity-Datei, die den Codepfad enthält, den Sie prüfen möchten, den Hardhat-Konsolenimport hinzu.
    import "hardhat/console.sol";
  2. Fügen Sie zur Untersuchung ein temporäres Log in der Funktion oder dem internen Helper hinzu.
    console.log("value", value);
    Der folgende Code zeigt gängige Logbeispiele.
    console.log("entered transfer");
    console.log("caller", msg.sender);
    console.log("amount", amount);
    console.log("is allowed", isAllowed);
    Verwenden Sie den Werttyp, der mit der Variablen übereinstimmt, die Sie prüfen. In diesen Beispielen werden Zeichenfolgen, Adressen, Ganzzahlwerte und boolesche Werte behandelt. Schränken Sie die Loganweisungen eng und temporär ein, und protokollieren Sie keine privaten Schlüssel, Authentifizierungstoken oder anderen Zugangsdaten.
  3. Wählen Sie im Formular Bereitstellen/Ausführen die Option Bereinigen aus, wenn Sie alte Artefakte verwerfen müssen, und wählen Sie Kompilieren aus.
  4. Wählen Sie Lokaler Hardwareknoten als Umgebung aus.
  5. Stellen Sie die lokale Vertragsinstanz bereit, oder verwenden Sie einen lokalen Proxy, der bereits bereitgestellt ist. Erfüllen Sie alle projektspezifischen Bereitstellungsvoraussetzungen, wie Governance-Verträge, im lokalen Netzwerk.
  6. Öffnen Sie den Bereich Ausführen, wählen Sie das lokale Token oder den Accountproxy aus, geben Sie die Funktionsparameter ein, und wählen Sie Abfrage oder Aufrufen aus.

    Abfrage schließt einen lokalen Aufruf ab, und Aufrufen sendet eine lokale Transaktion. Entweder kann ein protokollierter Codepfad erreicht werden, aber nur ein Aufruf ändert den simulierten Kettenstatus.

  7. Öffnen Sie das Terminal Lokaler Hardwareknoten in Visual Studio Code, und prüfen Sie die ausgegebenen Logzeilen.
  8. Entfernen Sie die hardhat/console.sol-Importanweisung und jede temporäre console.log-Anweisung.
  9. Bereinigen und kompilieren Sie erneut, bevor Sie Code festschreiben oder eine Oracle Blockchain Platform Besu-, andere EVM- oder Produktionsumgebung verwenden.

Versuchen Sie nicht, die reine Hardhat-Instrumentierung für Oracle Blockchain Platform oder andere EVM-Umgebungen zu verwenden. Verwenden Sie stattdessen normale Anwendungsereignisse, das Tracing von Transaktionen außerhalb der Kette oder eine von der Umgebung genehmigte Beobachtbarkeit. Konsolenprotokollierung ist kein Ersatz für Produktionsdiagnosen.

Fehler im Debugging-Prozess beheben

Bedingung Lösung
hardhat/console.sol kann nicht gefunden werden Führen Sie Install Dependencies im ausgewählten Projekt aus, und kompilieren Sie dann erneut. Der Import wird durch die Hardhat-Abhängigkeit des Projekts bereitgestellt.
Der lokale Knoten wird nicht gestartet Prüfen Sie, ob das ausgewählte Projekt hardhat.config.ts oder hardhat.config.js enthält, ob Node.js und npm für Visual Studio Code verfügbar sind, und prüfen Sie das Terminal Lokaler Hardwareknoten auf Startfehler.
Keine Protokolle angezeigt Stellen Sie sicher, dass Lokaler Hardwareknoten die ausgewählte Umgebung ist, dass der aufgerufene Codepfad die Loganweisung erreicht und dass Sie das Terminal Lokaler Hardwareknoten anstelle eines Oracle Blockchain Platform- oder Projektterminals anzeigen.
Die Anwendung verwendet alten Code Wählen Sie Bereinigen, Kompilieren aus, bevor Sie das Deployment oder den Aufruf erneut ausführen.
Ein nicht lokales Build oder Deployment verläuft nach dem Debugging nicht erfolgreich Entfernen Sie jeden hardhat/console.sol-Import- und console.log-Aufruf, und bereinigen Sie das Projekt, und kompilieren Sie es erneut.