Перейти до основного вмісту

Як розробляти та тестувати dapp у локальній багатоклієнтській тестовій мережі

клієнти
вузли
смарт-контракти
компонованість
рівень консенсусу
рівень виконання
тестування
Середній рівень
Теді Мітіку
11 квітня 2023 р.
10 хвилин на читання

Вступ

Цей посібник проведе вас через процес створення налаштовуваної локальної тестової мережі Етеріуму, розгортання в ній смарт-контракту та використання тестової мережі для запуску тестів вашого децентралізованого застосунку (dapp). Цей посібник призначений для розробників dapp, які хочуть розробляти та тестувати свої застосунки локально з різними конфігураціями мережі перед розгортанням у живій тестовій мережі або Головній мережі.

У цьому посібнику ви:

  • Створите локальну тестову мережу Етеріуму за допомогою eth-network-package (opens in a new tab), використовуючи Kurtosis (opens in a new tab),
  • Підключите середовище розробки dapp Hardhat до локальної тестової мережі для компіляції, розгортання та тестування dapp, а також
  • Налаштуєте локальну тестову мережу, включно з такими параметрами, як кількість вузлів і конкретні пари клієнтів рівня виконання (EL) та рівня консенсусу (CL), щоб забезпечити робочі процеси розробки та тестування для різних конфігурацій мережі.

Що таке Kurtosis?

Kurtosis (opens in a new tab) — це компонована система збірки, призначена для налаштування багатоконтейнерних тестових середовищ. Зокрема, вона дозволяє розробникам створювати відтворювані середовища, які вимагають динамічної логіки налаштування, наприклад, тестові мережі блокчейну.

У цьому посібнику пакет Kurtosis eth-network-package розгортає локальну тестову мережу Етеріуму з підтримкою клієнта рівня виконання (EL) geth (opens in a new tab), а також клієнтів рівня консенсусу (CL) teku (opens in a new tab), lighthouse (opens in a new tab) та lodestar (opens in a new tab). Цей пакет слугує налаштовуваною та компонованою альтернативою мережам у таких фреймворках, як Hardhat Network, Ganache та Anvil. Kurtosis пропонує розробникам більший контроль і гнучкість над тестовими мережами, які вони використовують, що є головною причиною, чому Фундація Ethereum використовувала Kurtosis для тестування Злиття (opens in a new tab) і продовжує використовувати його для тестування оновлень мережі.

Налаштування Kurtosis

Перш ніж продовжити, переконайтеся, що ви:

Створення локальної тестової мережі Етеріуму

Щоб розгорнути локальну тестову мережу Етеріуму, виконайте:

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

Примітка: Ця команда називає вашу мережу «local-eth-testnet» за допомогою прапорця --enclave.

Kurtosis виводитиме кроки, які він виконує внутрішньо, під час інтерпретації, перевірки та виконання інструкцій. Наприкінці ви побачите вивід, схожий на цей:

Вітаємо! Ви використали Kurtosis для створення локальної тестової мережі Етеріуму з клієнтом CL (lighthouse) та EL (geth) через Docker.

Огляд

У цьому розділі ви виконали команду, яка вказала Kurtosis використати eth-network-package, розміщений віддалено на GitHub (opens in a new tab), щоб розгорнути локальну тестову мережу Етеріуму в межах Enclave (opens in a new tab) Kurtosis. Усередині вашого анклаву ви знайдете як «файлові артефакти» (file artifacts), так і «користувацькі сервіси» (user services).

Файлові артефакти (opens in a new tab) у вашому анклаві включають усі дані, згенеровані та використані для початкового завантаження клієнтів EL та CL. Дані були створені за допомогою сервісу prelaunch-data-generator, зібраного з цього образу Docker (opens in a new tab).

Користувацькі сервіси відображають усі контейнеризовані сервіси, що працюють у вашому анклаві. Ви помітите, що було створено один вузол, який містить як клієнт EL, так і клієнт CL.

Підключення середовища розробки dapp до локальної тестової мережі Етеріуму

Налаштування середовища розробки dapp

Тепер, коли у вас запущена локальна тестова мережа, ви можете підключити середовище розробки dapp для її використання. У цьому посібнику буде використано фреймворк Hardhat для розгортання dapp для гри в блекджек у вашій локальній тестовій мережі.

Щоб налаштувати середовище розробки dapp, клонуйте репозиторій, який містить наш зразок dapp, і встановіть його залежності, виконавши:

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

Папка smart-contract-example (opens in a new tab), яка тут використовується, містить типове налаштування для розробника dapp, що використовує фреймворк Hardhat (opens in a new tab):

  • contracts/ (opens in a new tab) містить кілька простих смарт-контрактів для dapp блекджеку
  • scripts/ (opens in a new tab) містить скрипт для розгортання контракту токена у вашій локальній мережі Етеріуму
  • test/ (opens in a new tab) містить простий .js тест для вашого контракту токена, щоб підтвердити, що для кожного гравця в нашому dapp блекджеку викарбувано 1000 токенів
  • hardhat.config.ts (opens in a new tab) налаштовує вашу конфігурацію Hardhat

Налаштування Hardhat для використання локальної тестової мережі

Після налаштування середовища розробки dapp ви підключите Hardhat для використання локальної тестової мережі Етеріуму, згенерованої за допомогою Kurtosis. Для цього замініть <$YOUR_PORT> у структурі localnet у вашому файлі конфігурації hardhat.config.ts на порт RPC URI, виведений з будь-якого сервісу el-client-<num>. У цьому прикладі портом буде 64248. Ваш порт буде іншим.

Приклад у hardhat.config.ts:

Після збереження файлу ваше середовище розробки dapp Hardhat буде підключено до локальної тестової мережі Етеріуму! Ви можете перевірити, чи працює ваша тестова мережа, виконавши:

npx hardhat balances --network localnet

Вивід має виглядати приблизно так:

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

Це підтверджує, що Hardhat використовує вашу локальну тестову мережу та виявляє попередньо поповнені акаунти, створені eth-network-package.

Розгортання та тестування dapp локально

Коли середовище розробки dapp повністю підключено до локальної тестової мережі Етеріуму, ви можете запускати робочі процеси розробки та тестування вашого dapp, використовуючи локальну тестову мережу.

Щоб скомпілювати та розгорнути смарт-контракт ChipToken.sol для локального прототипування та розробки, виконайте:

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

Вивід має виглядати приблизно так:

ChipToken deployed to: 0xAb2A01BC351770D09611Ac80f1DE076D56E0487d

Тепер спробуйте запустити тест simple.js для вашого локального dapp, щоб підтвердити, що для кожного гравця в нашому dapp блекджеку викарбувано 1000 токенів:

Вивід має виглядати приблизно так:

npx hardhat test --network localnet

Вивід має виглядати приблизно так:

ChipToken
    mint
      ✔ should mint 1000 chips for PLAYER ONE

  1 passing (654ms)

Огляд

На цьому етапі ви налаштували середовище розробки dapp, підключили його до локальної мережі Етеріуму, створеної Kurtosis, а також скомпілювали, розгорнули та запустили простий тест для вашого dapp.

Тепер давайте розглянемо, як можна налаштувати базову мережу для тестування наших dapp за різних конфігурацій мережі.

Налаштування локальної тестової мережі Етеріуму

Зміна конфігурацій клієнтів та кількості вузлів

Вашу локальну тестову мережу Етеріуму можна налаштувати на використання різних пар клієнтів EL та CL, а також різної кількості вузлів, залежно від сценарію та конкретної конфігурації мережі, яку ви хочете розробляти або тестувати. Це означає, що після налаштування ви можете розгорнути кастомізовану локальну тестову мережу та використовувати її для запуску тих самих робочих процесів (розгортання, тести тощо) за різних конфігурацій мережі, щоб переконатися, що все працює як очікувалося. Щоб дізнатися більше про інші параметри, які можна змінити, перейдіть за цим посиланням.

Спробуйте! Ви можете передати різні параметри конфігурації до eth-network-package через файл JSON. Цей JSON-файл параметрів мережі містить конкретні конфігурації, які Kurtosis використовуватиме для налаштування локальної мережі Етеріуму.

Візьміть файл конфігурації за замовчуванням і відредагуйте його, щоб розгорнути два вузли з різними парами EL/CL:

  • Вузол 1 з geth/lighthouse
  • Вузол 2 з geth/lodestar
  • Вузол 3 з geth/teku

Ця конфігурація створює гетерогенну мережу реалізацій вузлів Етеріуму для тестування вашого dapp. Тепер ваш файл конфігурації має виглядати так:

Кожна структура participants відповідає вузлу в мережі, тому 3 структури participants вкажуть Kurtosis розгорнути 3 вузли у вашій мережі. Кожна структура participants дозволить вам вказати пару EL та CL, що використовується для цього конкретного вузла.

Структура network_params налаштовує параметри мережі, які використовуються для створення файлів генезису для кожного вузла, а також інші параметри, як-от кількість секунд на слот мережі.

Збережіть відредагований файл параметрів у будь-якому каталозі за вашим бажанням (у прикладі нижче він збережений на робочому столі), а потім використайте його для запуску вашого пакета Kurtosis, виконавши:

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

Примітка: команда kurtosis clean -a використовується тут, щоб дати вказівку Kurtosis знищити стару тестову мережу та її вміст перед запуском нової.

Знову ж таки, Kurtosis попрацює деякий час і виведе окремі кроки, які виконуються. Зрештою, вивід має виглядати приблизно так:

Вітаємо! Ви успішно налаштували локальну тестову мережу на 3 вузли замість 1. Щоб запустити ті самі робочі процеси для вашого dapp, що й раніше (розгортання та тестування), виконайте ті самі операції, замінивши <$YOUR_PORT> у структурі localnet у вашому файлі конфігурації hardhat.config.ts на порт RPC URI, виведений з будь-якого сервісу el-client-<num> у вашій новій локальній тестовій мережі з 3 вузлами.

Висновок

Ось і все! Підсумовуючи цей короткий посібник, ви:

  • Створили локальну тестову мережу Етеріуму через Docker за допомогою Kurtosis
  • Підключили локальне середовище розробки dapp до локальної мережі Етеріуму
  • Розгорнули dapp і запустили для нього простий тест у локальній мережі Етеріуму
  • Налаштували базову мережу Етеріуму на 3 вузли

Ми хотіли б почути від вас, що пройшло добре, що можна покращити, або відповісти на будь-які ваші запитання. Не соромтеся звертатися через GitHub (opens in a new tab) або напишіть нам на електронну пошту (opens email client)!

Інші приклади та посібники

Ми рекомендуємо вам ознайомитися з нашим коротким посібником (opens in a new tab) (де ви створите базу даних Postgres і API поверх неї) та іншими нашими прикладами в репозиторії awesome-kurtosis (opens in a new tab), де ви знайдете чудові приклади, зокрема пакети для: