articles, resource-center

Tworzenie inteligentnych kontraktów: porównanie dwóch wiodących frameworków

October 31, 2025
8 min
Artem Zaitsev
Porównanie frameworków do tworzenia inteligentnych kontraktów Hardhat i Foundry, pokazujące edytory kodu i środowiska testowe

Wprowadzenie

Kiedy zacząłem programować w Solidity, szybko porzuciłem internetowe środowiska IDE i przyjąłem Hardhat jako mój nowy główny framework. Po kilku miesiącach pracy nad projektami i tworzenia związanego z nimi przepływu pracy poczułem się komfortowo z jego układem sieciowym, strategią testowania i organizacją projektów.

Jednak kiedy ktoś powiedział, że wydajność Foundry jest imponująca, zainteresowałem się tym na tyle, że postanowiłem dokonać rzetelnego porównania obu popularnych frameworków do tworzenia inteligentnych kontraktów (smart contracts development) (/smart-contract-development).

Aby dokonać sprawiedliwej oceny, stworzyłem te same projekty z pomocą obu narzędzi i zastosowałem tę samą umowę MiniBank oraz dalsze ustawienia testowe. To praktyczne doświadczenie pokazało, że wydajność, doświadczenie programistów i przepływ pracy różnią się znacznie między tymi dwoma narzędziami i warto to zbadać, decydując się na jedno z nich.

Architektura projektu i konfiguracje

Wstępne doświadczenia związane z ich konfiguracją są zupełnie różne w obu frameworkach. Foundry tworzy plik konfiguracyjny foundry.toml oparty na parach klucz-wartość, który jest analogiczny do pliku hardhat.config.js w Hardhat. Oba obsługują również dostosowywanie folderów źródłowych, katalogów wyjściowych kompilacji itp.

Domyślna struktura folderów w Foundry jest jednak zupełnie inna, nie można bezpośrednio skonfigurować wielu sieci w pliku konfiguracyjnym, ponieważ Hardhat doskonale radzi sobie z obsługą wielu sieci. Pozostałe parametry w foundry.toml są związane z opcjami testowymi, w tym szczegółowością lub ustawieniami konta i opcjami ceny gazu.

Funkcja remappingu Foundry jest szczególnie interesująca, ponieważ oferuje skuteczne podejście do importowania zależności. Możesz znacznie ułatwić importowanie kontraktów, tworząc skróty w konfiguracji.

Na przykład, zamiast pisać długie ścieżki importu, możesz użyć skrótów, które sprawią, że twój kod będzie bardziej czytelny i łatwiejszy w utrzymaniu.

Podejścia do zarządzania zależnościami

Frameworki różnią się radykalnie sposobem zarządzania zależnościami:

  • Hardhat korzysta z uznanego ekosystemu npm, który jest natychmiast dostępny dla programistów JavaScript
  • Instalacja kontraktów OpenZeppelin polega jedynie na wykonaniu polecenia npm install
  • Foundry opiera się na zarządzaniu zależnościami przez podmoduł Git za pomocą narzędzia CLI forge
  • Zależności są przechowywane w folderze lib/ i zapisywane w pliku .gitmodules, w przeciwieństwie do pliku package.json

Ta metoda wykorzystuje dowolne repozytorium GitHub, które zawiera inteligentne kontrakty jako zależność, i pozwala na większą elastyczność w wyborze bibliotek.

Możesz określić nazwę organizacji i repozytorium GitHub oraz opcjonalnie określić gałąź lub tag do zainstalowania. Po zainstalowaniu forge można użyć polecenia forge remapping, aby wyświetlić domyślne ścieżki importu, które będą używane przez Foundry, a następnie dostosować je za pomocą plików konfiguracyjnych.

Narzędzia programistyczne i debugujące

Jednym z obszarów, w których Hardhat wyróżnia się, jest doświadczenie związane z debugowaniem. Framework oferuje również domyślne użycie console.log, które przypomina oczekiwany styl debugowania w programowaniu JavaScript. Funkcja ta jest intensywnie promowana jako atut i może być łatwo śledzona przez programistów, aby zrozumieć sposób wykonania i wykryć błędy.

Foundry potrzebuje alternatywnej metody rejestrowania umów. Chociaż możliwe jest ręczne zainstalowanie i zaimportowanie Hardhat oraz zainstalowanie umowy konsolowej, najlepszym sposobem byłoby skopiowanie specjalistycznej umowy konsolowej do twojego projektu.

W przypadku plików testowych w szczególności umowa DSTest zawiera zdarzenia logowania, takie jak logstring, logint i logaddress, które mogą być wysyłane bez dodatkowych zależności.

Metodyki testowania

Doświadczenie testowe jest prawdopodobnie najbardziej zauważalną różnicą między tymi dwoma frameworkami.

Podejście do testowania Hardhat

Hardhat opiera się na standardowych wzorcach testowania JavaScript:

  • Używa opisów i bloków it wraz z Mocha jako domyślną biblioteką asercji
  • Pliki testowe mogą przypominać ten bardziej naturalny styl programistów zaznajomionych z tworzeniem stron internetowych
  • Oferuj opisowe nazwy testów, które jasno określają ich cel
  • Znane wzorce asynchroniczne
  • Krzywa uczenia się jest minimalna dla osób, które są już zaznajomione z nowoczesnym tworzeniem stron internetowych

Podejście do testowania Foundry

Foundry działa w zupełnie inny sposób:

  • Testy są opracowywane jako inteligentne kontrakty Solidity, które dziedziczą DSTest
  • Wszystkie testy mają przedrostki test lub testFail.
  • Wszystkie twierdzenia są formułowane za pośrednictwem odziedziczonej umowy DSTest
  • Pliki testowe to prawdziwe inteligentne kontrakty, które są wykorzystywane w testowaniu

Testowanie inteligentnych kontraktów

Porównaj frameworki i wybierz najlepsze podejście testowe dla swojego projektu.

Metoda Foundry ma szereg implikacji:

  • Kontrakty testowe muszą być instancjonowane w procedurze setUp() analogicznej do beforeEach w klientach JavaScript.
  • Wysyłanie metod kontraktowych ETH wymaga określonej składni z parametrami wartości zamkniętymi w nawiasach klamrowych
  • Początkowa trudność w nauce może być zrównoważona przez fakt, że nie wymaga obsługi operacji asynchronicznych

Funkcje testowania Learning Foundry

Foundry wprowadza koncepcję znaną jako tzw. kody oszukańcze, które oferują potężne narzędzia testowe. Są to funkcje specjalne pod wyznaczonym adresem kontraktu, które umożliwiają dostęp do stanu w łańcuchu bloków podczas testowania.

Możesz:

  • Zmieniaj aktualny numer bloku
  • Nie podszywajcie się pod inne konta.
  • Domagaj się określonego zachowania w ramach umowy

Aby używać kodów, musisz zdefiniować interfejs i zainicjować go jako zmienną stanu pod specjalnym adresem kodu. Po skonfigurowaniu można oszukiwać za pomocą takich funkcji, jak:

  • vm.prank(), aby ustawić następne wywołanie kontraktu do innego odbiorcy
  • vm.roll(), aby przejść do określonego punktu łańcucha bloków

Jednym z najciekawszych kodów oszukańczych jest vm.expectRevert(), który należy wywołać przed transakcją, która ma zakończyć się niepowodzeniem. To odwrócenie standardowych wzorców asercji może być sprzeczne z intuicją, ale zapewnia wyraźną kontrolę nad prawdopodobnymi warunkami niepowodzenia.

Wyniki porównania wydajności

Różnice w wydajności między frameworkami są znaczące i od razu rzucają się w oczy. Na podstawie tych samych umów i scenariuszy testowych uzyskałem odkrywcze wyniki dotyczące czasu kompilacji i wykonywania testów:

Wyniki porównania wydajności

ScenariuszFoundryKask ochronny
Czyste projekty (bez pamięci podręcznej)1.44 sekundy5,17 sekundy
Przy włączonej pamięci podręcznej0,45 sekundy3.98 sekund
26 projektów inteligentnych kontraktów8,53 sekundy14,56 sekundy

Różnice w wydajności są bardziej widoczne wraz ze wzrostem złożoności projektu.

Testowanie odlewni: zalety i wady

Zalety i wady testowania odlewni

ZaletyWady
Żadnych złożonych konstrukcji async/awaitNazwy testów nie są tak opisowe jak w testach JavaScript.
Testy działają bardzo szybkoTwierdzenie expectRevert jest sprzeczne z intuicją.
Automatycznie generowany raport dotyczący gazuKrzywa uczenia się dla kodów oszukańczych
Wszystko napisane w SolidityNarzędzia wdrożeniowe są nadal w fazie rozwoju

Korzyści płynące z wydajności są niepodważalne, a nazwy testów Solidity nie mogą być tak opisowe jak nazwy testów JavaScript, co może utrudniać zrozumienie intencji testu. System kodów oszukańczych, choć potężny, wymaga nakładów na naukę.

Strategie wdrażania umów

Wdrożenie jest jednym z obszarów, w którym Hardhat zapewnia obecnie lepsze doświadczenia programistyczne. Framework akceptuje:

  • Skrypty wdrożeniowe oparte na JavaScript
  • Połączenie z różnymi sieciami
  • Załaduj konfigurację za pomocą zmiennych środowiskowych
  • Z wdziękiem radź sobie ze skomplikowanymi sytuacjami związanymi z wdrażaniem.

W Foundry wymagane są obecnie skrypty wdrożeniowe oparte na JavaScript, ale mogą one być uciążliwe, gdy konstruktorzy muszą podawać swoje argumenty. Sugerowanym rozwiązaniem jest opracowanie skryptów bash do obsługi złożonych wdrożeń, ale zespół programistów pracuje obecnie nad bardziej zaawansowanymi rozwiązaniami wdrożeniowymi.

Jest to jedna z najpoważniejszych współczesnych słabości Foundry w porównaniu z Hardhat, który ma rozwinięty ekosystem wdrożeniowy.

Narzędzia interfejsu wiersza poleceń

Foundry posiada narzędzie CLI cast do interakcji z łańcuchem bloków i wysyłania zapytań do inteligentnych kontraktów. Jest to potężne narzędzie, które umożliwia:

  • Wywołuj funkcje kontraktowe
  • Zapytanie o stan łańcucha bloków
  • Wykonuj szereg czynności związanych z łańcuchem bloków w wierszu poleceń

Chociaż cast zapewnia pełną funkcjonalność w interakcji z łańcuchem bloków, wymaga on złożonej konstrukcji wiersza poleceń, aby wykonać złożone operacje. Podobnie jak w przypadku wdrażania, może to wymagać skryptów bash, aby uniknąć wielokrotnego wpisywania długich poleceń.

Podsumowanie porównania frameworków

Porównanie funkcji frameworków

FunkcjaFoundryKask ochronny
InstalacjaZa pomocą polecenia CLI curlNie jest to wymagane w przypadku npx lub poprzez npm
Narzędzia CLIforge do zarządzania projektem, cast do interakcji z umowamizarządzaj projektem hardhat (buduj/kompiluj/uruchamiaj skrypty)
Buduj i testuj wydajnośćWyjątkowa szybkośćUmiarkowana wydajność
ZależnościPodmoduły Gitpakiety npm
Konfiguracjafoundry.tomlhardhat.config.js
Izolacja testowaTak poprzez -match-test -match-contractTak, tylko poprzez lub pomiń w plikach testowych
Wdrażanie umówZa pomocą narzędzia Cast CLISkrypty oparte na JavaScript

Dokonywanie właściwego wyboru

Foundry wykazuje ogromny potencjał dzięki swojej wyjątkowej wydajności, zaangażowanej społeczności i kreatywnej metodzie testowania inteligentnych kontraktów. Struktura jest doskonała w szybkim cyklu rozwoju i posiada świetne narzędzia testowe, które mogą znacznie przyspieszyć rozwój po zrozumieniu, jak z nich korzystać.

Niemniej jednak Foundry nadal się rozwija, zwłaszcza w zakresie narzędzi wdrażania i ulepszeń dotyczących doświadczeń programistów. Foundry ma kilka interesujących zalet dla programistów, którzy preferują model hybrydowy z:

  • Foundry do opracowywania i testowania umów
  • Hardhat do wdrażania i skryptów

Użytkownicy, którzy są bardziej przyzwyczajeni do standardowych narzędzi JavaScript i ustalonych praktyk wdrażania, mogą teraz być bardziej produktywni dzięki Hardhat, chociaż decyzja ta ponownie zależy od twojego doświadczenia i umiejętności korzystania z nowszych narzędzi.

Obie architektury wciąż szybko się zmieniają, a ekosystem tworzenia inteligentnych kontraktów oferuje wiele realnych alternatyw, które odpowiadają potrzebom różnych programistów i zastosowań.

FAQ

##tworzenie_inteligentnych_kontrakt_w
##kask_ochronny
##foundry
##solidno
##rozw_j_technologii_blockchain
##testowanie
##wdro_enie
BDS

Jesteśmy pionierami w dziedzinie technologii blockchain, oferując innowacyjne rozwiązania, które wzmacniają pozycję firm i osób prywatnych na całym świecie.

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

Bądź na bieżąco

Otrzymuj najnowsze wiadomości i aktualności dotyczące technologii blockchain na swoją skrzynkę e-mailową.

© 2025 BDS, część Idealogic Group. Wszelkie prawa zastrzeżone.