Přejít na hlavní obsah

Jak vyvíjet a testovat dApp na lokálním testnetu s více klienty

klienti
uzly
chytré kontrakty
komponovatelnost
vrstva konsensu
exekuční vrstva
testování
Středně pokročilý
Tedi Mitiku
11. dubna 2023
10 minut čtení
Upravit stránku (opens in a new tab)

Úvod

Tento průvodce vás provede procesem vytvoření konfigurovatelného lokálního testnetu Etherea, nasazení chytrého kontraktu na něj a použitím testnetu ke spouštění testů vaší decentralizované aplikace (dapp). Tento průvodce je určen pro vývojáře dapp, kteří chtějí vyvíjet a testovat své dapp lokálně proti různým konfiguracím sítě před nasazením na živý testnet nebo Mainnet.

V tomto průvodci budete:

  • Vytvářet lokální testnet Etherea pomocí eth-network-package (opens in a new tab) s využitím nástroje Kurtosis (opens in a new tab),
  • Připojovat své vývojové prostředí Hardhat pro dapp k lokálnímu testnetu za účelem kompilace, nasazení a testování dapp, a
  • Konfigurovat lokální testnet, včetně parametrů jako je počet uzlů a specifické párování klientů EL/CL, abyste umožnili vývojové a testovací procesy proti různým konfiguracím sítě.

Co je Kurtosis?

Kurtosis (opens in a new tab) je komponovatelný sestavovací systém navržený pro konfiguraci testovacích prostředí s více kontejnery. Konkrétně umožňuje vývojářům vytvářet reprodukovatelná prostředí, která vyžadují dynamickou logiku nastavení, jako jsou testnety blockchainu.

V tomto průvodci balíček Kurtosis eth-network-package spustí lokální testnet Etherea s podporou klienta exekuční vrstvy (EL) geth (opens in a new tab) a také klientů vrstvy konsensu (CL) teku (opens in a new tab), lighthouse (opens in a new tab) a lodestar (opens in a new tab). Tento balíček slouží jako konfigurovatelná a komponovatelná alternativa k sítím ve frameworcích jako Hardhat Network, Ganache a Anvil. Kurtosis nabízí vývojářům větší kontrolu a flexibilitu nad testnety, které používají, což je hlavní důvod, proč Nadace Ethereum použila Kurtosis k testování Merge (opens in a new tab) a nadále jej používá k testování upgradů sítě.

Nastavení Kurtosis

Než budete pokračovat, ujistěte se, že máte:

Vytvoření lokálního testnetu Etherea

Chcete-li spustit lokální testnet Etherea, spusťte:

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

Poznámka: Tento příkaz pojmenuje vaši síť: „local-eth-testnet“ pomocí příznaku --enclave.

Kurtosis vypíše kroky, které provádí na pozadí, když pracuje na interpretaci, validaci a následném provedení instrukcí. Na konci byste měli vidět výstup, který se podobá následujícímu:

Gratulujeme! Použili jste Kurtosis k vytvoření lokálního testnetu Etherea s klientem CL (lighthouse) a EL (geth) přes Docker.

Shrnutí

V této části jste provedli příkaz, který nařídil Kurtosis použít eth-network-package hostovaný vzdáleně na GitHubu (opens in a new tab) ke spuštění lokálního testnetu Etherea v rámci Enklávy (opens in a new tab) Kurtosis. Uvnitř vaší enklávy najdete jak „souborové artefakty“ (file artifacts), tak „uživatelské služby“ (user services).

Souborové artefakty (opens in a new tab) ve vaší enklávě zahrnují všechna data vygenerovaná a využitá k inicializaci klientů EL a CL. Data byla vytvořena pomocí služby prelaunch-data-generator sestavené z tohoto obrazu Dockeru (opens in a new tab)

Uživatelské služby zobrazují všechny kontejnerizované služby fungující ve vaší enklávě. Všimnete si, že byl vytvořen jeden uzel, který obsahuje jak klienta EL, tak klienta CL.

Připojení vašeho vývojového prostředí dapp k lokálnímu testnetu Etherea

Nastavení vývojového prostředí dapp

Nyní, když máte běžící lokální testnet, můžete připojit své vývojové prostředí dapp, aby váš lokální testnet využívalo. V tomto průvodci bude použit framework Hardhat k nasazení blackjack dapp na váš lokální testnet.

Chcete-li nastavit své vývojové prostředí dapp, naklonujte repozitář, který obsahuje naši ukázkovou dapp, a nainstalujte její závislosti spuštěním:

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

Zde použitá složka smart-contract-example (opens in a new tab) obsahuje typické nastavení pro vývojáře dapp používajícího framework Hardhat (opens in a new tab):

Konfigurace Hardhat pro použití lokálního testnetu

S nastaveným vývojovým prostředím dapp nyní připojíte Hardhat, aby používal lokální testnet Etherea vygenerovaný pomocí Kurtosis. Abyste toho dosáhli, nahraďte <$YOUR_PORT> ve struktuře localnet ve vašem konfiguračním souboru hardhat.config.ts portem z výstupu rpc uri z jakékoli služby el-client-<num>. V tomto ukázkovém případě by port byl 64248. Váš port se bude lišit.

Příklad v hardhat.config.ts:

Jakmile soubor uložíte, vaše vývojové prostředí Hardhat pro dapp je nyní připojeno k vašemu lokálnímu testnetu Etherea! Můžete ověřit, že váš testnet funguje, spuštěním:

npx hardhat balances --network localnet

Výstup by měl vypadat nějak takto:

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

To potvrzuje, že Hardhat používá váš lokální testnet a detekuje předem financované účty vytvořené pomocí eth-network-package.

Nasazení a testování vaší dapp lokálně

S vývojovým prostředím dapp plně připojeným k lokálnímu testnetu Etherea nyní můžete spouštět vývojové a testovací procesy proti vaší dapp pomocí lokálního testnetu.

Chcete-li zkompilovat a nasadit chytrý kontrakt ChipToken.sol pro lokální prototypování a vývoj, spusťte:

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

Výstup by měl vypadat nějak takto:

ChipToken deployed to: 0xAb2A01BC351770D09611Ac80f1DE076D56E0487d

Nyní zkuste spustit test simple.js proti vaší lokální dapp, abyste potvrdili, že každý hráč v naší blackjack dapp má pro sebe vyraženo 1000 tokenů:

Výstup by měl vypadat nějak takto:

npx hardhat test --network localnet

Výstup by měl vypadat nějak takto:

ChipToken
    mint
      ✔ should mint 1000 chips for PLAYER ONE

  1 passing (654ms)

Shrnutí

V tomto okamžiku jste nastavili vývojové prostředí dapp, připojili jej k lokální síti Etherea vytvořené pomocí Kurtosis a zkompilovali, nasadili a spustili jednoduchý test proti vaší dapp.

Nyní se podívejme, jak můžete konfigurovat podkladovou síť pro testování našich dapp v různých konfiguracích sítě.

Konfigurace lokálního testnetu Etherea

Změna konfigurací klientů a počtu uzlů

Váš lokální testnet Etherea lze nakonfigurovat tak, aby používal různé páry klientů EL a CL, stejně jako různý počet uzlů, v závislosti na scénáři a konkrétní konfiguraci sítě, kterou chcete vyvíjet nebo testovat. To znamená, že po nastavení můžete spustit přizpůsobený lokální testnet a použít jej ke spuštění stejných procesů (nasazení, testy atd.) v různých konfiguracích sítě, abyste se ujistili, že vše funguje podle očekávání. Chcete-li se dozvědět více o dalších parametrech, které můžete upravit, navštivte tento odkaz.

Vyzkoušejte to! Různé možnosti konfigurace můžete předat do eth-network-package prostřednictvím souboru JSON. Tento soubor JSON s parametry sítě poskytuje specifické konfigurace, které Kurtosis použije k nastavení lokální sítě Etherea.

Vezměte výchozí konfigurační soubor a upravte jej tak, aby spustil dva uzly s různými páry EL/CL:

  • Uzel 1 s geth/lighthouse
  • Uzel 2 s geth/lodestar
  • Uzel 3 s geth/teku

Tato konfigurace vytváří heterogenní síť implementací uzlů Etherea pro testování vaší dapp. Váš konfigurační soubor by nyní měl vypadat takto:

Každá struktura participants se mapuje na uzel v síti, takže 3 struktury participants řeknou Kurtosis, aby ve vaší síti spustil 3 uzly. Každá struktura participants vám umožní specifikovat pár EL a CL použitý pro daný konkrétní uzel.

Struktura network_params konfiguruje nastavení sítě, která se používají k vytvoření souborů genesis pro každý uzel, a také další nastavení, jako jsou sekundy na slot sítě.

Uložte svůj upravený soubor s parametry do libovolného adresáře (v níže uvedeném příkladu je uložen na ploše) a poté jej použijte ke spuštění balíčku Kurtosis spuštěním:

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

Poznámka: příkaz kurtosis clean -a se zde používá k tomu, aby dal Kurtosis pokyn zničit starý testnet a jeho obsah před spuštěním nového.

Kurtosis bude opět chvíli pracovat a vypíše jednotlivé kroky, které probíhají. Nakonec by výstup měl vypadat nějak takto:

Gratulujeme! Úspěšně jste nakonfigurovali svůj lokální testnet tak, aby měl 3 uzly místo 1. Chcete-li spustit stejné procesy jako dříve proti vaší dapp (nasazení a testování), proveďte stejné operace jako dříve nahrazením <$YOUR_PORT> ve struktuře localnet ve vašem konfiguračním souboru hardhat.config.ts portem z výstupu rpc uri z jakékoli služby el-client-<num> ve vašem novém lokálním testnetu se 3 uzly.

Závěr

A to je vše! Abychom shrnuli tohoto krátkého průvodce, vy jste:

  • Vytvořili lokální testnet Etherea přes Docker pomocí Kurtosis
  • Připojili své lokální vývojové prostředí dapp k lokální síti Etherea
  • Nasadili dapp a spustili proti ní jednoduchý test na lokální síti Etherea
  • Nakonfigurovali podkladovou síť Etherea tak, aby měla 3 uzly

Rádi od vás uslyšíme, co se vám povedlo, co by se dalo zlepšit, nebo zodpovíme jakékoli vaše dotazy. Neváhejte se na nás obrátit přes GitHub (opens in a new tab) nebo nám napište e-mail (opens email client)!

Další příklady a průvodci

Doporučujeme vám podívat se na náš rychlý start (opens in a new tab) (kde postavíte databázi Postgres a nad ní API) a naše další příklady v našem repozitáři awesome-kurtosis (opens in a new tab), kde najdete několik skvělých příkladů, včetně balíčků pro:

Poslední aktualizace stránky: 3. března 2026