BDS
articles, resource-center

Sviluppo di contratti intelligenti: confronto tra due framework leader

October 31, 2025
8 min
Artem Zaitsev
Confronto tra i framework di sviluppo di contratti intelligenti Hardhat e Foundry che mostrano editor di codice e ambienti di test

Introduzione

Quando ho iniziato a sviluppare con Solidity, ho lasciato gli IDE online e ho iniziato a usare Hardhat come mio nuovo framework principale. Dopo mesi passati a costruire progetti e a creare un flusso di lavoro, mi sono trovato bene con il layout della rete, la strategia di test e l'organizzazione dei progetti.

Tuttavia, quando qualcuno ha detto che i vantaggi in termini di prestazioni di Foundry erano impressionanti, mi sono interessato abbastanza da fare un confronto adeguato tra i due popolari framework di sviluppo di contratti intelligenti.

Per fare una valutazione giusta, ho creato gli stessi progetti con l'aiuto di entrambi e ho usato lo stesso contratto MiniBank e altre impostazioni di test. Questa esperienza pratica ha mostrato che le prestazioni, l'esperienza degli sviluppatori e il flusso di lavoro sono molto diversi tra questi due strumenti e vale la pena esaminarli per chiunque debba scegliere tra i due.

Architettura e configurazioni del progetto

All'inizio, impostarli è un po' diverso nei due framework. Foundry crea un file di configurazione foundry.toml basato su coppie chiave-valore, che è simile al file hardhat.config.js di Hardhat. Entrambi permettono anche di personalizzare le cartelle sorgente, le directory di output della compilazione, ecc.

La struttura predefinita delle cartelle è un po' diversa in Foundry, però, non puoi configurare direttamente più reti nel file di configurazione, dato che Hardhat fa un ottimo lavoro nel gestire più reti. Gli altri parametri in foundry.toml sono legati alle opzioni di test, come la verbosità o le impostazioni dell'account e le opzioni relative al prezzo del gas.

La funzione di rimappatura di Foundry è davvero interessante perché offre un approccio efficace all'importazione delle dipendenze. Puoi rendere l'importazione dei contratti molto più semplice creando scorciatoie nella configurazione.

Per esempio, invece di scrivere lunghi percorsi di importazione, puoi usare delle scorciatoie che rendono il tuo codice più facile da leggere e mantenere.

Approcci alla gestione delle dipendenze

I framework sono molto diversi nel modo in cui gestiscono le dipendenze:

  • Hardhat usa l'ecosistema npm già pronto, che è subito accessibile agli sviluppatori JavaScript
  • Per installare i contratti OpenZeppelin basta un comando npm install
  • Foundry usa la gestione delle dipendenze tramite il sottomodulo Git con lo strumento CLI forge
  • Le dipendenze sono salvate in una cartella lib/ e aggiunte in un file .gitmodules invece che in package.json

Questo metodo accetta qualsiasi repository GitHub che includa smart contract come dipendenza e ti permette di essere più flessibile nella scelta delle librerie.

Puoi specificare il nome dell'organizzazione e del repository GitHub e, se vuoi, anche il ramo o il tag da installare. Una volta installato il forge, puoi usare il comando di rimappatura del forge per vedere i percorsi di importazione predefiniti che Foundry userà, che poi puoi personalizzare ancora di più con i file di configurazione.

Strumenti di sviluppo e debug

Uno dei punti di forza di Hardhat è il suo debugging. Il framework offre anche l'uso di console.log di default, che è simile allo stile di debugging che ci si aspetta nello sviluppo JavaScript. Questa funzionalità è molto pubblicizzata come punto di forza e può essere facilmente monitorata dagli sviluppatori per capire come è stata eseguita l'operazione e cosa non va.

Foundry ha bisogno di un altro modo per registrare i contratti. Anche se puoi installare e importare Hardhat a mano e mettere un contratto console, il modo migliore per farlo è copiare un contratto console speciale nel tuo progetto.

Soprattutto per i file di prova, il contratto DSTest che c'è dentro include eventi di registrazione come logstring, logint e logaddress che possono essere emessi senza bisogno di altre dipendenze.

Metodologie di test

L'esperienza di test è forse la differenza più evidente tra i due framework.

Approccio di test Hardhat

Hardhat si basa su modelli di test JavaScript standard:

  • Usa describe e it blocks insieme a Mocha come libreria di asserzioni predefinita
  • I file di prova potrebbero assomigliare a questo stile più naturale degli sviluppatori che hanno familiarità con lo sviluppo web
  • Offre nomi descrittivi dei test che spiegano chiaramente lo scopo
  • Modelli asincroni familiari
  • La curva di apprendimento è minima per chi ha già familiarità con lo sviluppo web moderno

Approccio di test della fonderia

Foundry funziona in modo completamente diverso:

  • I test sono fatti come contratti intelligenti Solidity, che prendono da DSTest
  • Tutti i test hanno come prefisso la parola test o testFail
  • Tutte le affermazioni sono fatte tramite il contratto DSTest ereditato
  • I file di prova sono veri e propri contratti intelligenti che si usano nei test

Padroneggia il test degli smart contract

Confronta i framework e scegli l'approccio di test più adatto al tuo progetto.

Il metodo Foundry ha un sacco di implicazioni:

  • I contratti di prova devono essere istanziati in una procedura setUp() simile a beforeEach nei clienti JavaScript
  • Il metodo di invio dei contratti ETH ha una sintassi particolare con i parametri di valore racchiusi tra parentesi graffe
  • La curva di apprendimento iniziale, che può sembrare un po' ripida, può essere compensata dal fatto che non serve gestire operazioni asincrone

Funzionalità di test di Learning Foundry

Foundry introduce il concetto noto come cheat code, che offre potenti utilità di test. Si tratta di funzioni speciali a un indirizzo di contratto designato che ti permettono di accedere allo stato nella blockchain durante i test.

Puoi:

  • Cambia il numero del blocco attuale
  • Non fingere di essere altri account
  • Rivendica determinati comportamenti contrattuali

Per usare i cheat code devi definire un'interfaccia e istanziarla come variabile di stato all'indirizzo speciale del cheat. Dopo averlo impostato, puoi usare il cheat con funzioni come:

  • vm.prank() per impostare la prossima chiamata al contratto su un destinatario diverso
  • vm.roll() per far avanzare la blockchain fino a un certo punto

Uno dei cheat code più interessanti è vm.expectRevert(), che va chiamato prima della transazione che vuoi fallisca. Questa inversione dei modelli standard di asserzione può sembrare controintuitiva, ma dà un controllo chiaro delle probabili condizioni di fallimento.

Risultati del confronto delle prestazioni

La differenza di prestazioni tra i framework è notevole e si nota subito. Con gli stessi contratti e scenari di test, ho ottenuto risultati interessanti sui tempi di compilazione ed esecuzione dei test:

Risultati del confronto delle prestazioni

ScenarioFoundryCasco di protezione
Progetti puliti (senza cache)1,44 secondi5,17 secondi
Con la cache attivata0,45 secondi3,98 secondi
26 progetti di contratti intelligenti8,53 secondi14,56 secondi

Queste differenze di prestazioni diventano più evidenti quando il progetto diventa più complesso.

Test di fonderia: pro e contro

Pro e contro dei test di fonderia

ProContro
Niente complicazioni con async/awaitI nomi dei test non sono così descrittivi come nei test JavaScript
I test funzionano super veloceL'asserzione expectRevert è controintuitiva.
Rapporto sul gas generato automaticamenteCurva di apprendimento per i cheat code
Tutto quello che è scritto in SolidityGli strumenti di implementazione sono ancora in fase di sviluppo

I vantaggi in termini di prestazioni sono indiscutibili, ma i nomi dei test Solidity non possono essere descrittivi come quelli JavaScript, il che può rendere poco chiaro lo scopo del test. Il sistema di cheat code, sebbene potente, richiede un investimento iniziale in termini di apprendimento.

Strategie di implementazione dei contratti

Il deployment è un ambito in cui Hardhat offre attualmente un'esperienza di sviluppo migliore. Il framework accetta:

  • Script di distribuzione basati su JavaScript
  • Collegamento con una varietà di reti
  • Carica la configurazione tramite variabili d'ambiente
  • Gestisci con eleganza le situazioni di implementazione complicate

Gli script di distribuzione basati su JavaScript sono attualmente richiesti in Foundry, ma possono essere complicati quando i costruttori devono avere i loro argomenti forniti. La soluzione suggerita è quella di creare script bash di distribuzione per gestire la complessità delle distribuzioni, ma il team di sviluppo sta lavorando a soluzioni di distribuzione più avanzate.

Questo è uno dei punti deboli più grossi di Foundry rispetto a Hardhat, che ha un ecosistema di distribuzione ben sviluppato.

Strumenti dell'interfaccia a riga di comando

Foundry ha lo strumento CLI cast per interagire con la blockchain e interrogare gli smart contract. È un'utilità potente che ti permette di:

  • Chiama le funzioni del contratto
  • Controlla lo stato della blockchain
  • Fai un sacco di cose con la blockchain dalla riga di comando

Anche se cast offre tutte le funzionalità per interagire con la blockchain, per fare operazioni complesse serve una struttura complessa della riga di comando. Come per l'implementazione, potrebbe servire uno script bash per evitare di digitare più volte comandi lunghi.

Riepilogo comparativo dei framework

Confronto delle caratteristiche del framework

CaratteristicaFoundryCasco di protezione
InstallazioneTramite comando curl CLINon serve con npx o tramite npm
Strumenti CLIforge per gestire il progetto, cast per interagire con i contrattihardhat gestisci il progetto (crea/compila/esegui script)
Crea e prova le prestazioniVelocità eccezionaleModerare le prestazioni
DipendenzeSottomoduli GitPacchetti npm
Configurazionefoundry.tomlhardhat.config.js
Isolamento dei testSì tramite -match-test -match-contractSì, solo tramite o salta nei file di prova
Implementazioni dei contrattiTramite lo strumento CLI CastScript basati su JavaScript

Fare la scelta giusta

Foundry ha un potenziale enorme grazie alle sue prestazioni fantastiche, alla sua community attiva e al suo modo creativo di testare gli smart contract. La struttura è perfetta per cicli di sviluppo veloci e ha ottimi strumenti di test che possono accelerare molto lo sviluppo una volta capito come usarli.

Comunque, Foundry sta ancora crescendo, soprattutto per quanto riguarda gli strumenti di implementazione e il miglioramento dell'esperienza degli sviluppatori. Foundry ha dei punti di forza interessanti per quegli sviluppatori che preferiscono un modello ibrido con:

  • Foundry per lo sviluppo e il collaudo dei contratti
  • Hardhat per la distribuzione e gli script

Gli utenti che hanno più familiarità con gli strumenti JavaScript standard e le pratiche di implementazione consolidate potrebbero ora essere più produttivi con Hardhat, anche se la scelta dipende ancora una volta dal proprio background e dalla capacità di adottare strumenti più recenti.

Entrambe le architetture stanno ancora cambiando velocemente e l'ecosistema dello sviluppo degli smart contract ha un sacco di alternative valide che rispondono alle esigenze di vari sviluppatori e casi d'uso.

FAQ

##smart_contract_development
##hardhat
##foundry
##solidity
##blockchain_development
##testing
##deployment
BDS

All'avanguardia nel futuro della tecnologia blockchain con soluzioni innovative che danno forza alle aziende e alle persone in tutto il mondo.

+1 929 560 3730 (USA)
+44 2045 771515 (Regno Unito)
+372 603 92 65 (Estonia)
Harju maakond, Tallinn, Lasnamäe linnaosa, Katusepapi tn 6-502, 11412, Estonia

Rimani aggiornato

Ricevi le ultime notizie e gli aggiornamenti sulla blockchain direttamente nella tua casella di posta elettronica.