Przejdź do głównej treści

Jak rozwijać i testować zdecentralizowaną aplikację (dapp) w lokalnej, wieloklienckiej sieci testowej

klienci
węzły
inteligentne kontrakty
komponowalność
warstwa konsensusu
warstwa wykonawcza
testowanie
Średniozaawansowany
Tedi Mitiku
11 kwietnia 2023
10 minut czytania

Wprowadzenie

Ten przewodnik przeprowadzi Cię przez proces tworzenia konfigurowalnej lokalnej sieci testowej Ethereum, wdrażania w niej inteligentnego kontraktu oraz używania tej sieci testowej do uruchamiania testów Twojej zdecentralizowanej aplikacji (dapp). Przewodnik ten jest przeznaczony dla programistów dapp, którzy chcą rozwijać i testować swoje aplikacje lokalnie w różnych konfiguracjach sieci przed wdrożeniem ich w działającej sieci testowej lub Sieci głównej.

W tym przewodniku:

  • Utworzysz lokalną sieć testową Ethereum za pomocą eth-network-package (opens in a new tab) używając Kurtosis (opens in a new tab),
  • Połączysz swoje środowisko programistyczne dapp Hardhat z lokalną siecią testową, aby skompilować, wdrożyć i przetestować zdecentralizowaną aplikację (dapp), oraz
  • Skonfigurujesz lokalną sieć testową, w tym parametry takie jak liczba węzłów i konkretne pary klientów warstwy wykonawczej (EL) i warstwy konsensusu (CL), aby umożliwić procesy programistyczne i testowe w różnych konfiguracjach sieci.

Czym jest Kurtosis?

Kurtosis (opens in a new tab) to komponowalny system budowania przeznaczony do konfigurowania wielokontenerowych środowisk testowych. W szczególności umożliwia programistom tworzenie powtarzalnych środowisk, które wymagają dynamicznej logiki konfiguracji, takich jak sieci testowe blockchain.

W tym przewodniku pakiet eth-network-package narzędzia Kurtosis uruchamia lokalną sieć testową Ethereum z obsługą klienta warstwy wykonawczej (EL) geth (opens in a new tab), a także klientów warstwy konsensusu (CL) teku (opens in a new tab), lighthouse (opens in a new tab) i lodestar (opens in a new tab). Pakiet ten służy jako konfigurowalna i komponowalna alternatywa dla sieci w frameworkach takich jak Hardhat Network, Ganache i Anvil. Kurtosis oferuje programistom większą kontrolę i elastyczność nad używanymi przez nich sieciami testowymi, co jest głównym powodem, dla którego Fundacja Ethereum użyła Kurtosis do testowania The Merge (opens in a new tab) i nadal używa go do testowania aktualizacji sieci.

Konfiguracja Kurtosis

Zanim przejdziesz dalej, upewnij się, że masz:

Tworzenie lokalnej sieci testowej Ethereum

Aby uruchomić lokalną sieć testową Ethereum, wykonaj:

kurtosis --enclave local-eth-testnet run github.com/kurtosis-tech/eth-network-package

Uwaga: To polecenie nadaje Twojej sieci nazwę: „local-eth-testnet” przy użyciu flagi --enclave.

Kurtosis wypisze kroki, które wykonuje wewnętrznie, podczas interpretacji, walidacji, a następnie wykonywania instrukcji. Na koniec powinieneś zobaczyć wynik podobny do poniższego:

Gratulacje! Użyłeś Kurtosis do utworzenia lokalnej sieci testowej Ethereum z klientem warstwy konsensusu (CL) (lighthouse) i klientem warstwy wykonawczej (EL) (geth) za pośrednictwem narzędzia Docker.

Podsumowanie

W tej sekcji wykonałeś polecenie, które nakazało Kurtosis użycie eth-network-package hostowanego zdalnie na GitHub (opens in a new tab) do uruchomienia lokalnej sieci testowej Ethereum wewnątrz Enklawy (opens in a new tab) Kurtosis. Wewnątrz swojej enklawy znajdziesz zarówno „artefakty plików” (file artifacts), jak i „usługi użytkownika” (user services).

Artefakty plików (opens in a new tab) w Twojej enklawie obejmują wszystkie dane wygenerowane i wykorzystane do uruchomienia klientów EL i CL. Dane te zostały utworzone przy użyciu usługi prelaunch-data-generator zbudowanej z tego obrazu Docker (opens in a new tab).

Usługi użytkownika wyświetlają wszystkie skonteneryzowane usługi działające w Twojej enklawie. Zauważysz, że utworzono pojedynczy węzeł, zawierający zarówno klienta EL, jak i klienta CL.

Połączenie środowiska programistycznego dapp z lokalną siecią testową Ethereum

Konfiguracja środowiska programistycznego dapp

Teraz, gdy masz działającą lokalną sieć testową, możesz połączyć swoje środowisko programistyczne zdecentralizowanej aplikacji (dapp), aby z niej korzystało. W tym przewodniku użyjemy frameworka Hardhat do wdrożenia aplikacji dapp do gry w blackjacka w Twojej lokalnej sieci testowej.

Aby skonfigurować środowisko programistyczne dapp, sklonuj repozytorium zawierające naszą przykładową aplikację dapp i zainstaluj jej zależności, wykonując:

git clone https://github.com/kurtosis-tech/awesome-kurtosis.git && cd awesome-kurtosis/smart-contract-example && yarn

Użyty tutaj folder smart-contract-example (opens in a new tab) zawiera typową konfigurację dla programisty dapp korzystającego z frameworka Hardhat (opens in a new tab):

Konfiguracja Hardhat do korzystania z lokalnej sieci testowej

Po skonfigurowaniu środowiska programistycznego dapp, połączysz teraz Hardhat, aby korzystał z lokalnej sieci testowej Ethereum wygenerowanej przy użyciu Kurtosis. Aby to osiągnąć, zamień <$YOUR_PORT> w strukturze localnet w pliku konfiguracyjnym hardhat.config.ts na port z wyjścia rpc uri dowolnej usługi el-client-<num>. W tym przykładowym przypadku portem byłoby 64248. Twój port będzie inny.

Przykład w hardhat.config.ts:

Po zapisaniu pliku Twoje środowisko programistyczne dapp Hardhat jest teraz połączone z lokalną siecią testową Ethereum! Możesz sprawdzić, czy Twoja sieć testowa działa, uruchamiając:

npx hardhat balances --network localnet

Wynik powinien wyglądać mniej więcej tak:

0x878705ba3f8Bc32FCf7F4CAa1A35E72AF65CF766 has balance 10000000000000000000000000
0x4E9A3d9D1cd2A2b2371b8b3F489aE72259886f1A has balance 10000000000000000000000000
0xdF8466f277964Bb7a0FFD819403302C34DCD530A has balance 10000000000000000000000000
0x5c613e39Fc0Ad91AfDA24587e6f52192d75FBA50 has balance 10000000000000000000000000
0x375ae6107f8cC4cF34842B71C6F746a362Ad8EAc has balance 10000000000000000000000000
0x1F6298457C5d76270325B724Da5d1953923a6B88 has balance 10000000000000000000000000

Potwierdza to, że Hardhat korzysta z Twojej lokalnej sieci testowej i wykrywa wstępnie zasilone konta utworzone przez eth-network-package.

Wdrażanie i testowanie aplikacji dapp lokalnie

Mając środowisko programistyczne dapp w pełni połączone z lokalną siecią testową Ethereum, możesz teraz uruchamiać procesy programistyczne i testowe dla swojej aplikacji dapp przy użyciu lokalnej sieci testowej.

Aby skompilować i wdrożyć inteligentny kontrakt ChipToken.sol do lokalnego prototypowania i rozwoju, wykonaj:

npx hardhat compile
npx hardhat run scripts/deploy.ts --network localnet

Wynik powinien wyglądać mniej więcej tak:

ChipToken deployed to: 0xAb2A01BC351770D09611Ac80f1DE076D56E0487d

Teraz spróbuj uruchomić test simple.js w swojej lokalnej aplikacji dapp, aby potwierdzić, że każdy gracz w naszej aplikacji dapp do gry w blackjacka ma dla siebie wybite 1000 tokenów:

Wynik powinien wyglądać mniej więcej tak:

npx hardhat test --network localnet

Wynik powinien wyglądać mniej więcej tak:

ChipToken
    mint
      ✔ should mint 1000 chips for PLAYER ONE

  1 passing (654ms)

Podsumowanie

W tym momencie skonfigurowałeś już środowisko programistyczne dapp, połączyłeś je z lokalną siecią Ethereum utworzoną przez Kurtosis, a także skompilowałeś, wdrożyłeś i uruchomiłeś prosty test swojej aplikacji dapp.

Teraz sprawdźmy, jak możesz skonfigurować bazową sieć do testowania naszych aplikacji dapp w różnych konfiguracjach sieciowych.

Konfiguracja lokalnej sieci testowej Ethereum

Zmiana konfiguracji klientów i liczby węzłów

Twoja lokalna sieć testowa Ethereum może zostać skonfigurowana do korzystania z różnych par klientów EL i CL, a także różnej liczby węzłów, w zależności od scenariusza i konkretnej konfiguracji sieci, którą chcesz rozwijać lub testować. Oznacza to, że po skonfigurowaniu możesz uruchomić dostosowaną lokalną sieć testową i użyć jej do uruchamiania tych samych procesów (wdrożenie, testy itp.) w różnych konfiguracjach sieci, aby upewnić się, że wszystko działa zgodnie z oczekiwaniami. Aby dowiedzieć się więcej o innych parametrach, które możesz modyfikować, odwiedź ten link.

Spróbuj sam! Możesz przekazać różne opcje konfiguracji do eth-network-package za pośrednictwem pliku JSON. Ten plik JSON z parametrami sieci zawiera konkretne konfiguracje, których Kurtosis użyje do skonfigurowania lokalnej sieci Ethereum.

Weź domyślny plik konfiguracyjny i edytuj go, aby uruchomić dwa węzły z różnymi parami EL/CL:

  • Węzeł 1 z geth/lighthouse
  • Węzeł 2 z geth/lodestar
  • Węzeł 3 z geth/teku

Ta konfiguracja tworzy heterogeniczną sieć implementacji węzłów Ethereum do testowania Twojej aplikacji dapp. Twój plik konfiguracyjny powinien teraz wyglądać tak:

Każda struktura participants mapuje się na węzeł w sieci, więc 3 struktury participants powiedzą Kurtosis, aby uruchomił 3 węzły w Twojej sieci. Każda struktura participants pozwoli Ci określić parę EL i CL używaną dla tego konkretnego węzła.

Struktura network_params konfiguruje ustawienia sieci, które są używane do tworzenia plików genesis dla każdego węzła, a także inne ustawienia, takie jak liczba sekund na slot w sieci.

Zapisz edytowany plik z parametrami w dowolnym katalogu (w poniższym przykładzie jest on zapisany na pulpicie), a następnie użyj go do uruchomienia pakietu Kurtosis, wykonując:

kurtosis clean -a && kurtosis run --enclave local-eth-testnet github.com/kurtosis-tech/eth-network-package "$(cat ~/eth-network-params.json)"

Uwaga: polecenie kurtosis clean -a jest tutaj używane, aby poinstruować Kurtosis o zniszczeniu starej sieci testowej i jej zawartości przed uruchomieniem nowej.

Ponownie, Kurtosis będzie przez chwilę pracować i wypisywać poszczególne kroki, które mają miejsce. Ostatecznie wynik powinien wyglądać mniej więcej tak:

Gratulacje! Pomyślnie skonfigurowałeś swoją lokalną sieć testową tak, aby miała 3 węzły zamiast 1. Aby uruchomić te same procesy, co wcześniej dla swojej aplikacji dapp (wdrożenie i testowanie), wykonaj te same operacje, co wcześniej, zastępując <$YOUR_PORT> w strukturze localnet w pliku konfiguracyjnym hardhat.config.ts portem z wyjścia rpc uri dowolnej usługi el-client-<num> w Twojej nowej, 3-węzłowej lokalnej sieci testowej.

Podsumowanie

I to wszystko! Podsumowując ten krótki przewodnik:

  • Utworzyłeś lokalną sieć testową Ethereum za pośrednictwem narzędzia Docker przy użyciu Kurtosis
  • Połączyłeś swoje lokalne środowisko programistyczne dapp z lokalną siecią Ethereum
  • Wdrożyłeś zdecentralizowaną aplikację (dapp) i uruchomiłeś dla niej prosty test w lokalnej sieci Ethereum
  • Skonfigurowałeś bazową sieć Ethereum tak, aby miała 3 węzły

Chętnie dowiemy się, co poszło dobrze, co można by poprawić, lub odpowiemy na wszelkie Twoje pytania. Nie wahaj się skontaktować z nami przez GitHub (opens in a new tab) lub wyślij nam e-mail (opens email client)!

Inne przykłady i przewodniki

Zachęcamy do zapoznania się z naszym szybkim startem (opens in a new tab) (gdzie zbudujesz bazę danych Postgres i API na jej wierzchu) oraz innymi przykładami w naszym repozytorium awesome-kurtosis (opens in a new tab), gdzie znajdziesz świetne przykłady, w tym pakiety do:

Ostatnia aktualizacja strony: 3 marca 2026