Cara mengembangkan dan menguji dapp di testnet lokal multi-klien
Pengantar
Panduan ini memandu Anda melalui proses menginisiasi testnet Ethereum lokal yang dapat dikonfigurasi, menerapkan kontrak pintar ke dalamnya, dan menggunakan testnet tersebut untuk menjalankan pengujian terhadap dapp Anda. Panduan ini dirancang untuk pengembang dapp yang ingin mengembangkan dan menguji dapp mereka secara lokal terhadap berbagai konfigurasi jaringan sebelum menerapkannya 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, menerapkan, 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 dikomposisikan yang dirancang untuk mengonfigurasi lingkungan pengujian multi-kontainer. Ini secara khusus memungkinkan pengembang untuk membuat lingkungan yang dapat direproduksi yang memerlukan logika penyiapan dinamis, seperti testnet blockchain.
Dalam panduan ini, eth-network-package Kurtosis memutar 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 dikomposisikan 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 Ethereum Foundation 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:
- Menginstal dan memulai mesin Docker (opens in a new tab) di mesin lokal Anda
- Menginstal Kurtosis CLI (opens in a new tab) (atau memutakhirkannya ke rilis terbaru, jika Anda sudah menginstal CLI)
- Menginstal Node.js (opens in a new tab), yarn (opens in a new tab), dan npx (opens in a new tab) (untuk lingkungan dapp Anda)
Menginisiasi testnet Ethereum lokal
Untuk memutar testnet Ethereum lokal, jalankan:
kurtosis run github.com/kurtosis-tech/eth-network-package --enclave local-eth-testnetCatatan: Perintah ini menamai jaringan Anda: "local-eth-testnet” menggunakan bendera --enclave.
Kurtosis akan mencetak langkah-langkah yang diambilnya di balik layar saat ia bekerja untuk menafsirkan, memvalidasi, dan kemudian mengeksekusi instruksi. Pada akhirnya, Anda akan melihat keluaran yang menyerupai berikut ini:
INFO[2023-03-16T11:42:28-04:00] =========================================================INFO[2023-03-16T11:42:28-04:00] || Created enclave: local-eth-testnet ||INFO[2023-03-16T11:42:28-04:00] =========================================================Name: local-eth-testnetUUID: 12345678901234567890123456789012Status: RUNNINGCreation Time: Thu, 16 Mar 2023 11:41:18 EDT========================================= Files Artifacts =========================================UUID Name12345678901234567890123456789012 1-prelaunch-data-dir12345678901234567890123456789012 2-geth-genesis-dir12345678901234567890123456789012 3-genesis-generation-config-dir12345678901234567890123456789012 4-prysm-password-dir========================================== User Services ==========================================UUID Name Ports Status12345678901234567890123456789012 cl-1-lighthouse-geth http: 4000/tcp -> http://127.0.0.1:64251 RUNNING metrics: 5054/tcp -> http://127.0.0.1:64252 tcp-discovery: 9000/tcp -> 127.0.0.1:64253 udp-discovery: 9000/udp -> 127.0.0.1:6425412345678901234567890123456789012 el-1-geth-lighthouse engine-rpc: 8551/tcp -> 127.0.0.1:64247 RUNNING rpc: 8545/tcp -> 127.0.0.1:64248 tcp-discovery: 30303/tcp -> 127.0.0.1:64249 udp-discovery: 30303/udp -> 127.0.0.1:64250 ws: 8546/tcp -> 127.0.0.1:6425512345678901234567890123456789012 prelaunch-data-generator <none> RUNNING12345678901234567890123456789012 validator-key-generation-cl-node <none> RUNNINGTampilkan semuaSelamat! 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 di-host secara jarak jauh di GitHub (opens in a new tab) untuk memutar 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.
Hubungkan lingkungan pengembangan dapp Anda ke testnet Ethereum lokal
Siapkan 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 menerapkan 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.gitcd awesome-kurtosis/smart-contract-exampleyarn installFolder 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):
contracts/(opens in a new tab) berisi beberapa kontrak pintar sederhana untuk dapp Blackjackscripts/(opens in a new tab) berisi skrip untuk menerapkan kontrak token ke jaringan Ethereum lokal Andatest/(opens in a new tab) berisi pengujian .js sederhana untuk kontrak token Anda guna mengonfirmasi bahwa setiap pemain di dapp Blackjack kami memiliki 1000 yang di-mint untuk merekahardhat.config.ts(opens in a new tab) mengonfigurasi penyiapan Hardhat Anda
Konfigurasikan 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 ini, ganti <$YOUR_PORT> di struct localnet dalam 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:
1import { HardhatUserConfig } from "hardhat/config";2import "@nomicfoundation/hardhat-toolbox";34const config: HardhatUserConfig = {5 solidity: "0.8.18",6 networks: {7 localnet: {8 url: "http://127.0.0.1:<$YOUR_PORT>",9 },10 },11};1213export default config;Tampilkan semuaSetelah 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 run scripts/get-balance.ts --network localnetKeluarannya akan terlihat seperti ini:
Balance of 0x821b55d8abe79bc98f05eb675fdc50dfe796b7ab: 10000000000000000000000Ini mengonfirmasi bahwa Hardhat menggunakan testnet lokal Anda dan mendeteksi akun yang didanai sebelumnya yang dibuat oleh eth-network-package.
Terapkan dan uji 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 menerapkan kontrak pintar ChipToken.sol untuk pembuatan prototipe dan pengembangan lokal, jalankan:
npx hardhat run scripts/deploy.ts --network localnetKeluarannya akan terlihat seperti:
Compiled 3 Solidity files successfullyChipToken deployed to: 0x5FbDB2315678afecb367f032d93F642f64180aa3Sekarang coba jalankan pengujian simple.js terhadap dapp lokal Anda untuk mengonfirmasi bahwa setiap pemain di dapp Blackjack kami memiliki 1000 yang di-mint untuk mereka:
Keluarannya akan terlihat seperti ini:
npx hardhat test --network localnetKeluarannya akan terlihat seperti ini:
ChipToken ✔ Should mint 1000 tokens for each player (101ms) 1 passing (103ms)Tinjauan
Pada titik ini, Anda sekarang telah menyiapkan lingkungan pengembangan dapp, menghubungkannya ke jaringan Ethereum lokal yang dibuat oleh Kurtosis, dan telah mengompilasi, menerapkan, dan 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, tergantung pada skenario dan konfigurasi jaringan tertentu yang ingin Anda kembangkan atau uji. Ini berarti bahwa, setelah disiapkan, Anda dapat memutar testnet lokal yang disesuaikan dan menggunakannya untuk menjalankan alur kerja yang sama (penerapan, 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 default dan edit untuk memutar 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 menciptakan jaringan heterogen dari implementasi node Ethereum untuk menguji dapp Anda. File konfigurasi Anda sekarang akan terlihat seperti:
1{2 "participants": [3 {4 "el_client_type": "geth",5 "el_client_image": "",6 "el_client_log_level": "",7 "cl_client_type": "lighthouse",8 "cl_client_image": "",9 "cl_client_log_level": "",10 "beacon_extra_params": [],11 "el_extra_params": [],12 "validator_extra_params": [],13 "builder_network_params": null14 },15 {16 "el_client_type": "geth",17 "el_client_image": "",18 "el_client_log_level": "",19 "cl_client_type": "lodestar",20 "cl_client_image": "",21 "cl_client_log_level": "",22 "beacon_extra_params": [],23 "el_extra_params": [],24 "validator_extra_params": [],25 "builder_network_params": null26 },27 {28 "el_client_type": "geth",29 "el_client_image": "",30 "el_client_log_level": "",31 "cl_client_type": "teku",32 "cl_client_image": "",33 "cl_client_log_level": "",34 "beacon_extra_params": [],35 "el_extra_params": [],36 "validator_extra_params": [],37 "builder_network_params": null38 }39 ],40 "network_params": {41 "preregistered_validator_keys_mnemonic": "giant issue aisle success illegal bike spike question tent bar rely arctic volcano radar curl auth network grid random filter aries anchor volume shape",42 "num_validator_keys_per_node": 64,43 "network_id": "3151908",44 "deposit_contract_address": "0x4242424242424242424242424242424242424242",45 "seconds_per_slot": 12,46 "slots_per_epoch": 32,47 "genesis_delay": 120,48 "capella_fork_epoch": 2,49 "deneb_fork_epoch": 50050 },51 "wait_for_finalization": false,52 "global_client_log_level": "info"53}Tampilkan semuaSetiap struct participants memetakan ke sebuah node di jaringan, jadi 3 struct participants akan memberi tahu Kurtosis untuk memutar 3 node di jaringan Anda. Setiap struct participants akan memungkinkan Anda untuk menentukan pasangan EL dan CL yang digunakan untuk node tertentu tersebut.
Struct 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, ini disimpan ke desktop) dan kemudian gunakan untuk menjalankan paket Kurtosis Anda dengan menjalankan:
kurtosis clean -a && kurtosis run github.com/kurtosis-tech/eth-network-package --args-file ~/Desktop/network_params.jsonCatatan: 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:
INFO[2023-03-16T12:00:00-04:00] =========================================================INFO[2023-03-16T12:00:00-04:00] || Created enclave: local-eth-testnet ||INFO[2023-03-16T12:00:00-04:00] =========================================================Name: local-eth-testnetUUID: 12345678901234567890123456789012Status: RUNNINGCreation Time: Thu, 16 Mar 2023 11:55:00 EDT========================================= Files Artifacts =========================================UUID Name12345678901234567890123456789012 1-prelaunch-data-dir12345678901234567890123456789012 2-geth-genesis-dir12345678901234567890123456789012 3-genesis-generation-config-dir12345678901234567890123456789012 4-prysm-password-dir========================================== User Services ==========================================UUID Name Ports Status12345678901234567890123456789012 cl-1-lighthouse-geth http: 4000/tcp -> http://127.0.0.1:64251 RUNNING metrics: 5054/tcp -> http://127.0.0.1:64252 tcp-discovery: 9000/tcp -> 127.0.0.1:64253 udp-discovery: 9000/udp -> 127.0.0.1:6425412345678901234567890123456789012 cl-2-lodestar-geth http: 4000/tcp -> http://127.0.0.1:64256 RUNNING metrics: 5054/tcp -> http://127.0.0.1:64257 tcp-discovery: 9000/tcp -> 127.0.0.1:64258 udp-discovery: 9000/udp -> 127.0.0.1:6425912345678901234567890123456789012 cl-3-teku-geth http: 4000/tcp -> http://127.0.0.1:64260 RUNNING metrics: 5054/tcp -> http://127.0.0.1:64261 tcp-discovery: 9000/tcp -> 127.0.0.1:64262 udp-discovery: 9000/udp -> 127.0.0.1:6426312345678901234567890123456789012 el-1-geth-lighthouse engine-rpc: 8551/tcp -> 127.0.0.1:64247 RUNNING rpc: 8545/tcp -> 127.0.0.1:64248 tcp-discovery: 30303/tcp -> 127.0.0.1:64249 udp-discovery: 30303/udp -> 127.0.0.1:64250 ws: 8546/tcp -> 127.0.0.1:6425512345678901234567890123456789012 el-2-geth-lodestar engine-rpc: 8551/tcp -> 127.0.0.1:64264 RUNNING rpc: 8545/tcp -> 127.0.0.1:64265 tcp-discovery: 30303/tcp -> 127.0.0.1:64266 udp-discovery: 30303/udp -> 127.0.0.1:64267 ws: 8546/tcp -> 127.0.0.1:6426812345678901234567890123456789012 el-3-geth-teku engine-rpc: 8551/tcp -> 127.0.0.1:64269 RUNNING rpc: 8545/tcp -> 127.0.0.1:64270 tcp-discovery: 30303/tcp -> 127.0.0.1:64271 udp-discovery: 30303/udp -> 127.0.0.1:64272 ws: 8546/tcp -> 127.0.0.1:6427312345678901234567890123456789012 prelaunch-data-generator <none> RUNNING12345678901234567890123456789012 validator-key-generation-cl-node <none> RUNNINGTampilkan semuaSelamat! 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 (terapkan & uji), lakukan operasi yang sama seperti yang kita lakukan sebelumnya dengan mengganti <$YOUR_PORT> di struct localnet dalam 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
- Menerapkan 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 untuk Anda, apa yang dapat ditingkatkan, atau untuk menjawab pertanyaan Anda. Jangan ragu untuk menghubungi melalui GitHub (opens in a new tab) atau email kami (opens email client)!
Contoh dan panduan lainnya
Kami mendorong Anda untuk memeriksa panduan memulai cepat (opens in a new tab) kami (di mana Anda akan membangun basis data Postgres dan API di atasnya) dan contoh kami lainnya di repositori awesome-kurtosis (opens in a new tab) kami di mana Anda akan menemukan beberapa contoh hebat, termasuk paket untuk:
- Memutar testnet Ethereum lokal yang sama (opens in a new tab), tetapi dengan layanan tambahan yang terhubung seperti spammer transaksi (untuk menyimulasikan transaksi), monitor fork, dan instans Grafana dan Prometheus yang terhubung
- Melakukan pengujian sub-jaringan (opens in a new tab) terhadap jaringan Ethereum lokal yang sama
Pembaruan terakhir halaman: 23 September 2025