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.
- 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"; - Aggiungere un log temporaneo nella funzione o un helper interno per indagare.
Il codice seguente mostra esempi di log comuni.console.log("value", value);
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.console.log("entered transfer"); console.log("caller", msg.sender); console.log("amount", amount); console.log("is allowed", isAllowed); - Nel form Distribuisci/esegui selezionare Cancella se è necessario eliminare gli artifact precedenti, quindi selezionare Compila.
- Selezionare Nodo locale hardware come ambiente.
- 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.
- 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.
- Aprire il terminale Nodo locale hardware in Visual Studio Code e ispezionare le righe di log emesse.
- Rimuovere l'istruzione di importazione
hardhat/console.sole ogni istruzioneconsole.logtemporanea. - 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.
|