Debug di un contratto

È possibile utilizzare i log della console Solidity per eseguire il debug dei contratti in esecuzione sul nodo locale Hardhat simulato.

Per eseguire il debug di un contratto, distribuirlo nell'ambiente Nodo locale Hardhat integrato e apportare tutte le modifiche di log solo in una diramazione di debug locale o in una copia di lavoro temporanea.

L'ambiente locale integrato è denominato hardhatnode e utilizza http://127.0.0.1:8545 con ID catena 31337. Non si tratta di una Oracle Blockchain Platform salvata o di un altro ambiente EVM. Quando lo si seleziona per distribuire o eseguire un contratto e nessun nodo locale è in ascolto, Blockchain App Builder for Besu avvia un nodo Hardhat per il progetto selezionato e apre il terminale del nodo locale Hardhat.

  1. Nella parte superiore del file Solidity contenente il percorso del codice che si desidera ispezionare, aggiungere l'importazione della console Hardhat.
    import "hardhat/console.sol";
  2. Aggiungere un log temporaneo nella funzione o un helper interno per indagare.
    console.log("value", value);
    Il codice seguente mostra esempi di log comuni.
    console.log("entered transfer");
    console.log("caller", msg.sender);
    console.log("amount", amount);
    console.log("is allowed", isAllowed);
    Utilizzare il tipo di valore corrispondente alla variabile che si sta ispezionando. Questi esempi includono stringhe, indirizzi, valori interi e valori booleani. Mantenere le istruzioni di log strette e temporanee; non registrare chiavi private, token di autenticazione o altre credenziali.
  3. Nel form Distribuisci/esegui selezionare Cancella se è necessario eliminare gli artifact precedenti, quindi selezionare Compila.
  4. Selezionare Nodo locale hardware come ambiente.
  5. Distribuire l'istanza del contratto locale oppure utilizzare un proxy locale già distribuito. Soddisfa tutti i prerequisiti di implementazione specifici del progetto, come i contratti di governance, nella rete locale.
  6. Aprire il riquadro Esegui, selezionare il token locale o il proxy dell'account, immettere i parametri della funzione, quindi selezionare Query o Richiama.

    La query completa una chiamata locale e Richiama invia una transazione locale. È possibile raggiungere un percorso di codice registrato, ma solo un richiamo modifica lo stato della catena simulata.

  7. Aprire il terminale Nodo locale hardware in Visual Studio Code e ispezionare le righe di log emesse.
  8. Rimuovere l'istruzione di importazione hardhat/console.sol e ogni istruzione console.log temporanea.
  9. Effettua nuovamente la pulizia e la compilazione prima di eseguire il commit del codice o utilizzare Oracle Blockchain Platform Besu, altro EVM o un ambiente di produzione.

Non tentare di utilizzare la strumentazione solo Hardhat per Oracle Blockchain Platform o altri ambienti EVM. Utilizza invece i normali eventi dell'applicazione, il trace delle transazioni fuori catena o l'osservabilità approvata dall'ambiente. Il log della console non sostituisce la diagnostica di produzione.

Risoluzione dei problemi del processo di debug

Condizione Risoluzione
impossibile trovare hardhat/console.sol Eseguire Installa dipendenze nel progetto selezionato, quindi ripetere la compilazione. L'importazione viene fornita dalla dipendenza Hardhat del progetto.
Il nodo locale non viene avviato Verificare che il progetto selezionato contenga hardhat.config.ts o hardhat.config.js, verificare che Node.js e npm siano disponibili per Visual Studio Code e controllare il terminale Nodo locale Hardhat per gli errori di avvio.
Nessun log visualizzato Verificare che Hardhat Local Node sia l'ambiente selezionato, che il percorso del codice richiamato raggiunga l'istruzione di log e che si stia visualizzando il terminale Hardhat Local Node anziché un terminale di Oracle Blockchain Platform o di progetto.
L'applicazione utilizza il vecchio codice Selezionare Cancella, quindi Compila, prima di distribuire o richiamare di nuovo.
Una build o una distribuzione non locale non riesce dopo il debug Rimuovere ogni importazione hardhat/console.sol e chiamata console.log, quindi pulire e compilare di nuovo il progetto.