Lompat ke konten utama

Cara mengembangkan dan menguji dapp di testnet lokal dengan banyak klien

klien
node
kontrak pintar
kemampuan untuk disusun
lapisan konsensus
lapisan eksekusi
pengujian
Menengah
Tedi Mitiku
11 April 2023
10 menit baca

Pengantar

Panduan ini memandu Anda melalui proses menginisiasi testnet Ethereum lokal yang dapat dikonfigurasi, menyebarkan kontrak pintar ke dalamnya, dan menggunakan testnet tersebut untuk menjalankan pengujian terhadap aplikasi terdesentralisasi (dapp) Anda. Panduan ini dirancang untuk pengembang dapp yang ingin mengembangkan dan menguji dapp mereka secara lokal terhadap berbagai konfigurasi jaringan sebelum menyebarkannya ke testnet langsung atau Mainnet.

Dalam panduan ini, Anda akan:

  • Menginisiasi testnet Ethereum lokal dengan eth-network-package (opens in a new tab) menggunakan Kurtosis (opens in a new tab),
  • Menghubungkan lingkungan pengembangan dapp Hardhat Anda ke testnet lokal untuk mengompilasi, menyebarkan, dan menguji dapp, dan
  • Mengonfigurasi testnet lokal, termasuk parameter seperti jumlah node dan pasangan klien EL/CL tertentu, untuk memungkinkan alur kerja pengembangan dan pengujian terhadap berbagai konfigurasi jaringan.

Apa itu Kurtosis?

Kurtosis (opens in a new tab) adalah sistem pembangunan yang dapat disusun yang dirancang untuk mengonfigurasi lingkungan pengujian multikontainer. Ini secara khusus memungkinkan pengembang untuk membuat lingkungan yang dapat direproduksi yang memerlukan logika penyiapan dinamis, seperti testnet rantai blok.

Dalam panduan ini, paket eth-network Kurtosis menjalankan testnet Ethereum lokal dengan dukungan untuk klien Lapisan Eksekusi (EL) geth (opens in a new tab), serta klien Lapisan Konsensus (CL) teku (opens in a new tab), lighthouse (opens in a new tab), dan lodestar (opens in a new tab). Paket ini berfungsi sebagai alternatif yang dapat dikonfigurasi dan dapat disusun untuk jaringan dalam kerangka kerja seperti Hardhat Network, Ganache, dan Anvil. Kurtosis menawarkan pengembang kontrol dan fleksibilitas yang lebih besar atas testnet yang mereka gunakan, yang merupakan alasan utama mengapa Yayasan Ethereum menggunakan Kurtosis untuk menguji The Merge (opens in a new tab) dan terus menggunakannya untuk menguji peningkatan jaringan.

Menyiapkan Kurtosis

Sebelum Anda melanjutkan, pastikan Anda telah:

Menginisiasi testnet Ethereum lokal

Untuk menjalankan testnet Ethereum lokal, jalankan:

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

Catatan: Perintah ini menamai jaringan Anda: "local-eth-testnet” menggunakan tanda --enclave.

Kurtosis akan mencetak langkah-langkah yang diambilnya secara internal saat ia bekerja untuk menafsirkan, memvalidasi, dan kemudian mengeksekusi instruksi tersebut. Pada akhirnya, Anda akan melihat keluaran yang menyerupai berikut ini:

Selamat! Anda menggunakan Kurtosis untuk menginisiasi testnet Ethereum lokal, dengan klien CL (lighthouse) dan EL (geth), melalui Docker.

Tinjauan

Di bagian ini, Anda mengeksekusi perintah yang mengarahkan Kurtosis untuk menggunakan eth-network-package yang dihosting dari jarak jauh di GitHub (opens in a new tab) untuk menjalankan testnet Ethereum lokal di dalam Enclave (opens in a new tab) Kurtosis. Di dalam enclave Anda, Anda akan menemukan "artefak file" dan "layanan pengguna".

Artefak File (opens in a new tab) di enclave Anda mencakup semua data yang dihasilkan dan digunakan untuk mem-bootstrap klien EL dan CL. Data tersebut dibuat menggunakan layanan prelaunch-data-generator yang dibangun dari citra Docker (opens in a new tab) ini

Layanan pengguna menampilkan semua layanan dalam kontainer yang beroperasi di enclave Anda. Anda akan melihat bahwa satu node, yang menampilkan klien EL dan klien CL, telah dibuat.

Menghubungkan lingkungan pengembangan dapp Anda ke testnet Ethereum lokal

Menyiapkan lingkungan pengembangan dapp

Sekarang setelah Anda memiliki testnet lokal yang berjalan, Anda dapat menghubungkan lingkungan pengembangan dapp Anda untuk menggunakan testnet lokal Anda. Kerangka kerja Hardhat akan digunakan dalam panduan ini untuk menyebarkan dapp blackjack ke testnet lokal Anda.

Untuk menyiapkan lingkungan pengembangan dapp Anda, kloning repositori yang berisi contoh dapp kami dan instal dependensinya, jalankan:

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

Folder smart-contract-example (opens in a new tab) yang digunakan di sini berisi penyiapan umum untuk pengembang dapp yang menggunakan kerangka kerja Hardhat (opens in a new tab):

Mengonfigurasi Hardhat untuk menggunakan testnet lokal

Dengan lingkungan pengembangan dapp Anda yang telah disiapkan, Anda sekarang akan menghubungkan Hardhat untuk menggunakan testnet Ethereum lokal yang dihasilkan menggunakan Kurtosis. Untuk mencapai hal ini, ganti <$YOUR_PORT> dalam struktur localnet di file konfigurasi hardhat.config.ts Anda dengan port dari keluaran rpc uri dari layanan el-client-<num> mana pun. Dalam contoh kasus ini, portnya adalah 64248. Port Anda akan berbeda.

Contoh di hardhat.config.ts:

Setelah Anda menyimpan file Anda, lingkungan pengembangan dapp Hardhat Anda sekarang terhubung ke testnet Ethereum lokal Anda! Anda dapat memverifikasi bahwa testnet Anda berfungsi dengan menjalankan:

npx hardhat balances --network localnet

Keluarannya akan terlihat seperti ini:

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

Ini mengonfirmasi bahwa Hardhat menggunakan testnet lokal Anda dan mendeteksi akun yang didanai sebelumnya yang dibuat oleh eth-network-package.

Menyebarkan dan menguji dapp Anda secara lokal

Dengan lingkungan pengembangan dapp yang sepenuhnya terhubung ke testnet Ethereum lokal, Anda sekarang dapat menjalankan alur kerja pengembangan dan pengujian terhadap dapp Anda menggunakan testnet lokal.

Untuk mengompilasi dan menyebarkan kontrak pintar ChipToken.sol untuk pembuatan prototipe dan pengembangan lokal, jalankan:

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

Keluarannya akan terlihat seperti:

ChipToken deployed to: 0xAb2A01BC351770D09611Ac80f1DE076D56E0487d

Sekarang coba jalankan pengujian simple.js terhadap dapp lokal Anda untuk mengonfirmasi bahwa setiap pemain di dapp Blackjack kami memiliki 1000 yang dicetak untuk mereka:

Keluarannya akan terlihat seperti ini:

npx hardhat test --network localnet

Keluarannya akan terlihat seperti ini:

ChipToken
    mint
      ✔ should mint 1000 chips for PLAYER ONE

  1 passing (654ms)

Tinjauan

Pada titik ini, Anda sekarang telah menyiapkan lingkungan pengembangan dapp, menghubungkannya ke jaringan Ethereum lokal yang dibuat oleh Kurtosis, dan telah mengompilasi, menyebarkan, serta menjalankan pengujian sederhana terhadap dapp Anda.

Sekarang mari kita jelajahi bagaimana Anda dapat mengonfigurasi jaringan yang mendasarinya untuk menguji dapp kita di bawah berbagai konfigurasi jaringan.

Mengonfigurasi testnet Ethereum lokal

Mengubah konfigurasi klien dan jumlah node

Testnet Ethereum lokal Anda dapat dikonfigurasi untuk menggunakan pasangan klien EL dan CL yang berbeda, serta jumlah node yang bervariasi, bergantung pada skenario dan konfigurasi jaringan tertentu yang ingin Anda kembangkan atau uji. Ini berarti bahwa, setelah disiapkan, Anda dapat menjalankan testnet lokal yang disesuaikan dan menggunakannya untuk menjalankan alur kerja yang sama (penyebaran, pengujian, dll.) di bawah berbagai konfigurasi jaringan untuk memastikan semuanya berfungsi seperti yang diharapkan. Untuk mempelajari lebih lanjut tentang parameter lain yang dapat Anda modifikasi, kunjungi tautan ini.

Cobalah! Anda dapat meneruskan berbagai opsi konfigurasi ke eth-network-package melalui file JSON. File JSON parameter jaringan ini menyediakan konfigurasi spesifik yang akan digunakan Kurtosis untuk menyiapkan jaringan Ethereum lokal.

Ambil file konfigurasi bawaan dan edit untuk menjalankan dua node dengan pasangan EL/CL yang berbeda:

  • Node 1 dengan geth/lighthouse
  • Node 2 dengan geth/lodestar
  • Node 3 dengan geth/teku

Konfigurasi ini membuat jaringan heterogen dari implementasi node Ethereum untuk menguji dapp Anda. File konfigurasi Anda sekarang akan terlihat seperti:

Setiap struktur participants memetakan ke sebuah node di jaringan, jadi 3 struktur participants akan memberi tahu Kurtosis untuk menjalankan 3 node di jaringan Anda. Setiap struktur participants akan memungkinkan Anda untuk menentukan pasangan EL dan CL yang digunakan untuk node spesifik tersebut.

Struktur network_params mengonfigurasi pengaturan jaringan yang digunakan untuk membuat file genesis untuk setiap node serta pengaturan lain seperti detik per slot dari jaringan.

Simpan file parameter yang telah Anda edit di direktori mana pun yang Anda inginkan (dalam contoh di bawah, file tersebut disimpan ke desktop) dan kemudian gunakan untuk menjalankan paket Kurtosis Anda dengan menjalankan:

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

Catatan: perintah kurtosis clean -a digunakan di sini untuk menginstruksikan Kurtosis agar menghancurkan testnet lama dan isinya sebelum memulai yang baru.

Sekali lagi, Kurtosis akan bekerja sebentar dan mencetak langkah-langkah individual yang sedang berlangsung. Pada akhirnya, keluarannya akan terlihat seperti:

Selamat! Anda telah berhasil mengonfigurasi testnet lokal Anda untuk memiliki 3 node alih-alih 1. Untuk menjalankan alur kerja yang sama seperti yang Anda lakukan sebelumnya terhadap dapp Anda (menyebarkan & menguji), lakukan operasi yang sama seperti yang kita lakukan sebelumnya dengan mengganti <$YOUR_PORT> dalam struktur localnet di file konfigurasi hardhat.config.ts Anda dengan port dari keluaran rpc uri dari layanan el-client-<num> mana pun di testnet lokal 3-node Anda yang baru.

Kesimpulan

Dan itu saja! Untuk merangkum panduan singkat ini, Anda:

  • Membuat testnet Ethereum lokal melalui Docker menggunakan Kurtosis
  • Menghubungkan lingkungan pengembangan dapp lokal Anda ke jaringan Ethereum lokal
  • Menyebarkan dapp dan menjalankan pengujian sederhana terhadapnya di jaringan Ethereum lokal
  • Mengonfigurasi jaringan Ethereum yang mendasarinya untuk memiliki 3 node

Kami ingin mendengar dari Anda tentang apa yang berjalan baik bagi Anda, apa yang dapat ditingkatkan, atau untuk menjawab pertanyaan Anda. Jangan ragu untuk menghubungi kami melalui GitHub (opens in a new tab) atau email kami (opens email client)!

Contoh dan panduan lainnya

Kami mendorong Anda untuk memeriksa mulai cepat (opens in a new tab) kami (di mana Anda akan membangun basis data Postgres dan API di atasnya) dan contoh kami yang lain di repositori awesome-kurtosis (opens in a new tab) kami di mana Anda akan menemukan beberapa contoh yang bagus, termasuk paket untuk:

Pembaruan terakhir halaman: 3 Maret 2026