Jinsi ya kuendeleza na kujaribu dApp kwenye testnet ya ndani, yenye wateja wengi
Utangulizi
Mwongozo huu unakuelekeza katika mchakato wa kuanzisha testnet ya Ethereum ya ndani inayoweza kusanidiwa, kupeleka mkataba-erevu kwayo, na kutumia testnet kufanya majaribio dhidi ya dApp yako. Mwongozo huu umeundwa kwa ajili ya wasanidi programu wa dApp wanaotaka kuendeleza na kujaribu dApps zao ndani dhidi ya usanidi tofauti wa mtandao kabla ya kupeleka kwenye testnet hai au Mtandao Mkuu.
Katika mwongozo huu, utaweza:
- Anzisha testnet ya Ethereum ya ndani na
eth-network-package(opens in a new tab) ukitumia Kurtosis (opens in a new tab), - Unganisha mazingira yako ya uendelezaji wa dApp ya Hardhat kwenye testnet ya ndani ili kuandaa, kupeleka, na kujaribu dApp, na
- Sanidi testnet ya ndani, ikijumuisha vigezo kama idadi ya nodi na jozi maalum za mteja wa EL/CL, ili kuwezesha mtiririko wa kazi wa uendelezaji na upimaji dhidi ya usanidi mbalimbali wa mtandao.
Kurtosis ni nini?
Kurtosis (opens in a new tab) ni mfumo wa ujenzi unaoweza kuunganishwa ulioundwa kwa ajili ya kusanidi mazingira ya majaribio ya makontena mengi. Inawawezesha wasanidi programu kuunda mazingira yanayoweza kurudiwa ambayo yanahitaji mantiki ya usanidi inayobadilika, kama vile testnets za mnyororo wa bloku.
Katika mwongozo huu, kifurushi cha eth-network cha Kurtosis kinawasha testnet ya ndani ya Ethereum inayotumia mteja wa Safu ya Utekelezaji (EL) wa geth (opens in a new tab), pamoja na wateja wa Safu ya Makubaliano (CL) wa teku (opens in a new tab), lighthouse (opens in a new tab), na lodestar (opens in a new tab). Kifurushi hiki kinatumika kama mbadala unaoweza kusanidiwa na kuunganishwa kwa mitandao katika mifumo kama vile Mtandao wa Hardhat, Ganache, na Anvil. Kurtosis huwapa wasanidi programu udhibiti na wepesi zaidi juu ya testnets wanazotumia, ambayo ni sababu kubwa kwa nini Msingi wa Ethereum ulitumia Kurtosis kupima Muungano (opens in a new tab) na unaendelea kuitumia kwa kupima masasisho ya mtandao.
Kusanidi Kurtosis
Kabla ya kuendelea, hakikisha una:
- Umesakinisha na kuanzisha injini ya Docker (opens in a new tab) kwenye mashine yako ya ndani
- Umesakinisha Kurtosis CLI (opens in a new tab) (au umeisasisha hadi toleo jipya zaidi, ikiwa tayari una CLI iliyosakinishwa)
- Umesakinisha Node.js (opens in a new tab), yarn (opens in a new tab), na npx (opens in a new tab) (kwa mazingira yako ya dApp)
Kuanzisha testnet ya Ethereum ya ndani
Ili kuwasha testnet ya Ethereum ya ndani, endesha:
1kurtosis --enclave local-eth-testnet run github.com/kurtosis-tech/eth-network-packageKumbuka: Amri hii inaupa mtandao wako jina: "local-eth-testnet" kwa kutumia kiashiria cha --enclave.
Kurtosis itachapisha hatua inazochukua chinichini inapofanya kazi ya kufasiri, kuhakiki, na kisha kutekeleza maagizo. Mwishowe, unapaswa kuona matokeo yanayofanana na yafuatayo:
1INFO[2023-04-04T18:09:44-04:00] ======================================================2INFO[2023-04-04T18:09:44-04:00] || Created enclave: local-eth-testnet ||3INFO[2023-04-04T18:09:44-04:00] ======================================================4Name: local-eth-testnet5UUID: 39372d756ae86Status: RUNNING7Creation Time: Tue, 04 Apr 2023 18:09:03 EDT8
9========================================= Files Artifacts =========================================10UUID Name11d4085a064230 cl-genesis-data121c62cb792e4c el-genesis-data13bd60489b73a7 genesis-generation-config-cl14b2e593fe5228 genesis-generation-config-el15d552a54acf78 geth-prefunded-keys165f7e661eb838 prysm-password17054e7338bb59 validator-keystore-018
19========================================== User Services ==========================================20UUID Name Ports Status21e20f129ee0c5 cl-client-0-beacon http: 4000/tcp -> <http://127.0.0.1:54261> RUNNING22 metrics: 5054/tcp -> <http://127.0.0.1:54262>23 tcp-discovery: 9000/tcp -> 127.0.0.1:5426324 udp-discovery: 9000/udp -> 127.0.0.1:6047025a8b6c926cdb4 cl-client-0-validator http: 5042/tcp -> 127.0.0.1:54267 RUNNING26 metrics: 5064/tcp -> <http://127.0.0.1:54268>27d7b802f623e8 el-client-0 engine-rpc: 8551/tcp -> 127.0.0.1:54253 RUNNING28 rpc: 8545/tcp -> 127.0.0.1:5425129 tcp-discovery: 30303/tcp -> 127.0.0.1:5425430 udp-discovery: 30303/udp -> 127.0.0.1:5383431 ws: 8546/tcp -> 127.0.0.1:5425232514a829c0a84 prelaunch-data-generator-1680646157905431468 <none> STOPPED3362bd62d0aa7a prelaunch-data-generator-1680646157915424301 <none> STOPPED3405e9619e0e90 prelaunch-data-generator-1680646157922872635 <none> STOPPED35
Hongera! Ulitumia Kurtosis kuanzisha testnet ya Ethereum ya ndani, na mteja wa CL (lighthouse) na EL (geth), juu ya Docker.
Mapitio
Katika sehemu hii, ulitekeleza amri iliyoelekeza Kurtosis kutumia eth-network-package iliyohifadhiwa mbali kwenye GitHub (opens in a new tab) kuwasha testnet ya Ethereum ya ndani ndani ya Enclave (opens in a new tab) ya Kurtosis. Ndani ya enclave yako, utapata "file artifacts" na "user services".
Vifaa vya Faili (opens in a new tab) katika enclave yako vinajumuisha data zote zilizozalishwa na kutumika kuanzisha wateja wa EL na CL. Data iliundwa kwa kutumia huduma ya prelaunch-data-generator iliyojengwa kutoka kwa picha hii ya Docker (opens in a new tab)
Huduma za mtumiaji huonyesha huduma zote zilizowekwa kwenye kontena zinazofanya kazi katika enclave yako. Utaona kwamba nodi moja, yenye mteja wa EL na mteja wa CL, imeundwa.
Unganisha mazingira yako ya uendelezaji wa dApp kwenye testnet ya Ethereum ya ndani
Sanidi mazingira ya uendelezaji wa dApp
Sasa kwa kuwa una testnet ya ndani inayofanya kazi, unaweza kuunganisha mazingira yako ya uendelezaji wa dApp ili kutumia testnet yako ya ndani. Mfumo wa Hardhat utatumika katika mwongozo huu kupeleka dApp ya blackjack kwenye testnet yako ya ndani.
Ili kusanidi mazingira yako ya uendelezaji wa dApp, nakili hazina iliyo na sampuli yetu ya dApp na usakinishe vitegemezi vyake, endesha:
1git clone https://github.com/kurtosis-tech/awesome-kurtosis.git && cd awesome-kurtosis/smart-contract-example && yarnFolda ya smart-contract-example (opens in a new tab) inayotumiwa hapa ina usanidi wa kawaida kwa msanidi programu wa dApp anayetumia mfumo wa Hardhat (opens in a new tab):
contracts/(opens in a new tab) ina mikataba-erevu michache rahisi kwa ajili ya dApp ya Blackjackscripts/(opens in a new tab) ina hati ya kupeleka mkataba wa tokeni kwenye mtandao wako wa ndani wa Ethereumtest/(opens in a new tab) ina jaribio rahisi la .js kwa mkataba wako wa tokeni ili kuthibitisha kila mchezaji katika dApp yetu ya Blackjack ametengenezewa 1000hardhat.config.ts(opens in a new tab) inasanidi usanidi wako wa Hardhat
Sanidi Hardhat ili itumie testnet ya ndani
Pamoja na mazingira yako ya uendelezaji wa dApp yakiwa yamesanidiwa, sasa utaunganisha Hardhat ili itumie testnet ya Ethereum ya ndani iliyoundwa kwa kutumia Kurtosis. Ili kufanikisha hili, badilisha <$YOUR_PORT> katika muundo wa localnet katika faili yako ya usanidi ya hardhat.config.ts na bandari ya matokeo ya rpc uri kutoka huduma yoyote ya el-client-<num>. Katika kisa hiki cha sampuli, bandari itakuwa 64248. Bandari yako itakuwa tofauti.
Mfano katika hardhat.config.ts:
1localnet: {2url: 'http://127.0.0.1:<$YOUR_PORT>',// TODO: BADILISHA $YOUR_PORT NA BANDARI YA URI YA NODI ILIYOTOLEWA NA KIFURUSHI CHA MTANDAO WA ETH CHA KURTOSIS3
4// Hizi ni funguo za faragha zinazohusiana na akaunti za majaribio zilizofadhiliwa awali zilizoundwa na kifurushi cha eth-network5// <https://github.com/kurtosis-tech/eth-network-package/blob/main/src/prelaunch_data_generator/genesis_constants/genesis_constants.star>6accounts: [7 "ef5177cd0b6b21c87db5a0bf35d4084a8a57a9d6a064f86d51ac85f2b873a4e2",8 "48fcc39ae27a0e8bf0274021ae6ebd8fe4a0e12623d61464c498900b28feb567",9 "7988b3a148716ff800414935b305436493e1f25237a2a03e5eebc343735e2f31",10 "b3c409b6b0b3aa5e65ab2dc1930534608239a478106acf6f3d9178e9f9b00b35",11 "df9bb6de5d3dc59595bcaa676397d837ff49441d211878c024eabda2cd067c9f",12 "7da08f856b5956d40a72968f93396f6acff17193f013e8053f6fbb6c08c194d6",13 ],14},Mara tu unapohifadhi faili yako, mazingira yako ya uendelezaji wa dApp ya Hardhat sasa yameunganishwa na testnet yako ya Ethereum ya ndani! Unaweza kuthibitisha kwamba testnet yako inafanya kazi kwa kuendesha:
1npx hardhat balances --network localnetMatokeo yanapaswa kuonekana kama hivi:
10x878705ba3f8Bc32FCf7F4CAa1A35E72AF65CF766 has balance 1000000000000000000000000020x4E9A3d9D1cd2A2b2371b8b3F489aE72259886f1A has balance 1000000000000000000000000030xdF8466f277964Bb7a0FFD819403302C34DCD530A has balance 1000000000000000000000000040x5c613e39Fc0Ad91AfDA24587e6f52192d75FBA50 has balance 1000000000000000000000000050x375ae6107f8cC4cF34842B71C6F746a362Ad8EAc has balance 1000000000000000000000000060x1F6298457C5d76270325B724Da5d1953923a6B88 has balance 10000000000000000000000000Hii inathibitisha kuwa Hardhat inatumia testnet yako ya ndani na inagundua akaunti zilizofadhiliwa awali zilizoundwa na eth-network-package.
Peleka na ujaribu dApp yako ndani
Wakati mazingira ya uendelezaji wa dApp yameunganishwa kikamilifu kwenye testnet ya Ethereum ya ndani, sasa unaweza kuendesha mtiririko wa kazi wa uendelezaji na upimaji dhidi ya dApp yako ukitumia testnet ya ndani.
Ili kuandaa na kupeleka mkataba-erevu wa ChipToken.sol kwa ajili ya uundaji wa mfano wa ndani na uendelezaji, endesha:
1npx hardhat compile2npx hardhat run scripts/deploy.ts --network localnetMatokeo yanapaswa kuonekana kama:
1ChipToken imepelekwa kwa: 0xAb2A01BC351770D09611Ac80f1DE076D56E0487dSasa jaribu kuendesha jaribio la simple.js dhidi ya dApp yako ya ndani ili kuthibitisha kila mchezaji katika dApp yetu ya Blackjack ametengenezewa 1000:
Matokeo yanapaswa kuonekana kama hivi:
1npx hardhat test --network localnetMatokeo yanapaswa kuonekana kama hivi:
1ChipToken2 tengeneza3 ✔ inapaswa kutengeneza chipu 1000 kwa MCHEZAJI MMOJA4
5 1 imepita (654ms)Mapitio
Kufikia hapa, sasa umesanidi mazingira ya uendelezaji wa dApp, umeiunganisha kwenye mtandao wa Ethereum wa ndani ulioundwa na Kurtosis, na umeandaa, umepeleka, na umeendesha jaribio rahisi dhidi ya dApp yako.
Sasa hebu tuchunguze jinsi unavyoweza kusanidi mtandao wa msingi kwa ajili ya kupima dApps zetu chini ya usanidi mbalimbali wa mtandao.
Kusanidi testnet ya Ethereum ya ndani
Kubadilisha usanidi wa mteja na idadi ya nodi
Testnet yako ya Ethereum ya ndani inaweza kusanidiwa kutumia jozi tofauti za wateja wa EL na CL, pamoja na idadi tofauti ya nodi, kulingana na hali na usanidi maalum wa mtandao unaotaka kuendeleza au kupima. Hii inamaanisha kuwa, mara tu itakaposanidiwa, unaweza kuwasha testnet ya ndani iliyobinafsishwa na kuitumia kuendesha mtiririko sawa wa kazi (upelekaji, majaribio, n.k.) chini ya usanidi mbalimbali wa mtandao ili kuhakikisha kila kitu kinafanya kazi kama inavyotarajiwa. Ili kujifunza zaidi kuhusu vigezo vingine unavyoweza kurekebisha, tembelea kiungo hiki.
Jaribu! Unaweza kupitisha chaguo mbalimbali za usanidi kwa eth-network-package kupitia faili ya JSON. Faili hii ya JSON ya vigezo vya mtandao hutoa usanidi maalum ambao Kurtosis utatumia kusanidi mtandao wa ndani wa Ethereum.
Chukua faili chaguo-msingi ya usanidi na uihariri ili kuwasha nodi mbili zenye jozi tofauti za EL/CL:
- Nodi ya 1 na
geth/lighthouse - Nodi ya 2 na
geth/lodestar - Nodi ya 3 na
geth/teku
Usanidi huu unaunda mtandao wenye utekelezaji mchanganyiko wa nodi za Ethereum kwa ajili ya kupima dApp yako. Faili yako ya usanidi sasa inapaswa kuonekana hivi:
1{2 "participants":3 [4 {5 "el_client_type": "geth",6 "el_client_image": "",7 "el_client_log_level": "",8 "cl_client_type": "lighthouse",9 "cl_client_image": "",10 "cl_client_log_level": "",11 "beacon_extra_params": [],12 "el_extra_params": [],13 "validator_extra_params": [],14 "builder_network_params": null,15 },16 {17 "el_client_type": "geth",18 "el_client_image": "",19 "el_client_log_level": "",20 "cl_client_type": "lodestar",21 "cl_client_image": "",22 "cl_client_log_level": "",23 "beacon_extra_params": [],24 "el_extra_params": [],25 "validator_extra_params": [],26 "builder_network_params": null,27 },28 {29 "el_client_type": "geth",30 "el_client_image": "",31 "el_client_log_level": "",32 "cl_client_type": "teku",33 "cl_client_image": "",34 "cl_client_log_level": "",35 "beacon_extra_params": [],36 "el_extra_params": [],37 "validator_extra_params": [],38 "builder_network_params": null,39 },40 ],41 "network_params":42 {43 "preregistered_validator_keys_mnemonic": "giant issue aisle success illegal bike spike question tent bar rely arctic volcano long crawl hungry vocal artwork sniff fantasy very lucky have athlete",44 "num_validator_keys_per_node": 64,45 "network_id": "3151908",46 "deposit_contract_address": "0x4242424242424242424242424242424242424242",47 "seconds_per_slot": 12,48 "genesis_delay": 120,49 "capella_fork_epoch": 5,50 },51}Kila muundo wa participants unahusiana na nodi moja katika mtandao, kwa hivyo miundo 3 ya participants itaiambia Kurtosis iwashe nodi 3 kwenye mtandao wako. Kila muundo wa participants utakuruhusu kubainisha jozi ya EL na CL inayotumika kwa nodi hiyo maalum.
Muundo wa network_params unasanidi mipangilio ya mtandao inayotumika kuunda faili za genesis kwa kila nodi pamoja na mipangilio mingine kama sekunde kwa kila slot ya mtandao.
Hifadhi faili yako ya vigezo iliyohaririwa katika saraka yoyote unayotaka (katika mfano hapa chini, imehifadhiwa kwenye eneo-kazi) na kisha itumie kuendesha kifurushi chako cha Kurtosis kwa kuendesha:
1kurtosis clean -a && kurtosis run --enclave local-eth-testnet github.com/kurtosis-tech/eth-network-package \"$(cat ~/eth-network-params.json)\"Kumbuka: amri ya kurtosis clean -a inatumika hapa kuielekeza Kurtosis kuharibu testnet ya zamani na yaliyomo kabla ya kuanzisha mpya.
Tena, Kurtosis itafanya kazi kwa muda mfupi na kuchapisha hatua za kibinafsi zinazofanyika. Hatimaye, matokeo yanapaswa kuonekana kama:
1Starlark code successfully run. No output was returned.2INFO[2023-04-07T11:43:16-04:00] ==========================================================3INFO[2023-04-07T11:43:16-04:00] || Created enclave: local-eth-testnet ||4INFO[2023-04-07T11:43:16-04:00] ==========================================================5Name: local-eth-testnet6UUID: bef8c192008e7Status: RUNNING8Creation Time: Fri, 07 Apr 2023 11:41:58 EDT9
10========================================= Files Artifacts =========================================11UUID Name12cc495a8e364a cl-genesis-data137033fcdb5471 el-genesis-data14a3aef43fc738 genesis-generation-config-cl158e968005fc9d genesis-generation-config-el163182cca9d3cd geth-prefunded-keys178421166e234f prysm-password18d9e6e8d44d99 validator-keystore-01923f5ba517394 validator-keystore-1204d28dea40b5c validator-keystore-221
22========================================== User Services ==========================================23UUID Name Ports Status24485e6fde55ae cl-client-0-beacon http: 4000/tcp -> http://127.0.0.1:65010 RUNNING25 metrics: 5054/tcp -> http://127.0.0.1:6501126 tcp-discovery: 9000/tcp -> 127.0.0.1:6501227 udp-discovery: 9000/udp -> 127.0.0.1:544552873739bd158b2 cl-client-0-validator http: 5042/tcp -> 127.0.0.1:65016 RUNNING29 metrics: 5064/tcp -> http://127.0.0.1:65017301b0a233cd011 cl-client-1-beacon http: 4000/tcp -> 127.0.0.1:65021 RUNNING31 metrics: 8008/tcp -> 127.0.0.1:6502332 tcp-discovery: 9000/tcp -> 127.0.0.1:6502433 udp-discovery: 9000/udp -> 127.0.0.1:5603134 validator-metrics: 5064/tcp -> 127.0.0.1:6502235949b8220cd53 cl-client-1-validator http: 4000/tcp -> 127.0.0.1:65028 RUNNING36 metrics: 8008/tcp -> 127.0.0.1:6503037 tcp-discovery: 9000/tcp -> 127.0.0.1:6503138 udp-discovery: 9000/udp -> 127.0.0.1:6078439 validator-metrics: 5064/tcp -> 127.0.0.1:6502940c34417bea5fa cl-client-2 http: 4000/tcp -> 127.0.0.1:65037 RUNNING41 metrics: 8008/tcp -> 127.0.0.1:6503542 tcp-discovery: 9000/tcp -> 127.0.0.1:6503643 udp-discovery: 9000/udp -> 127.0.0.1:6358144e19738e6329d el-client-0 engine-rpc: 8551/tcp -> 127.0.0.1:64986 RUNNING45 rpc: 8545/tcp -> 127.0.0.1:6498846 tcp-discovery: 30303/tcp -> 127.0.0.1:6498747 udp-discovery: 30303/udp -> 127.0.0.1:5570648 ws: 8546/tcp -> 127.0.0.1:6498949e904687449d9 el-client-1 engine-rpc: 8551/tcp -> 127.0.0.1:64993 RUNNING50 rpc: 8545/tcp -> 127.0.0.1:6499551 tcp-discovery: 30303/tcp -> 127.0.0.1:6499452 udp-discovery: 30303/udp -> 127.0.0.1:5809653 ws: 8546/tcp -> 127.0.0.1:6499654ad6f401126fa el-client-2 engine-rpc: 8551/tcp -> 127.0.0.1:65003 RUNNING55 rpc: 8545/tcp -> 127.0.0.1:6500156 tcp-discovery: 30303/tcp -> 127.0.0.1:6500057 udp-discovery: 30303/udp -> 127.0.0.1:5726958 ws: 8546/tcp -> 127.0.0.1:650025912d04a9dbb69 prelaunch-data-generator-1680882122181135513 <none> STOPPED605b45f9c0504b prelaunch-data-generator-1680882122192182847 <none> STOPPED613d4aaa75e218 prelaunch-data-generator-1680882122201668972 <none> STOPPEDHongera! Umefanikiwa kusanidi testnet yako ya ndani iwe na nodi 3 badala ya 1. Ili kuendesha mtiririko sawa wa kazi uliofanya hapo awali dhidi ya dApp yako (kupeleka na kupima), fanya shughuli zilezile tulizofanya hapo awali kwa kubadilisha <$YOUR_PORT> katika muundo wa localnet katika faili yako ya usanidi ya hardhat.config.ts na bandari ya matokeo ya rpc uri kutoka huduma yoyote ya el-client-<num> katika testnet yako mpya ya ndani yenye nodi 3.
Hitimisho
Na ndivyo hivyo! Ili kufupisha mwongozo huu mfupi, wewe:
- Uliunda testnet ya Ethereum ya ndani juu ya Docker ukitumia Kurtosis
- Uliunganisha mazingira yako ya uendelezaji wa dApp ya ndani kwenye mtandao wa Ethereum wa ndani
- Ulipeleka dApp na kuendesha jaribio rahisi dhidi yake kwenye mtandao wa Ethereum wa ndani
- Ulisanidi mtandao wa msingi wa Ethereum uwe na nodi 3
Tungependa kusikia kutoka kwako juu ya kile kilichokwenda vizuri kwako, kile kinachoweza kuboreshwa, au kujibu maswali yako yoyote. Usisite kuwasiliana kupitia GitHub (opens in a new tab) au tutumie barua pepe (opens email client)!
Mifano na miongozo mingine
Tunakuhimiza uangalie mwongozo wetu wa haraka (opens in a new tab) (ambapo utajenga hifadhidata ya Postgres na API juu yake) na mifano yetu mingine katika hazina yetu ya awesome-kurtosis (opens in a new tab) ambapo utapata mifano mizuri, ikijumuisha vifurushi vya:
- Kuwasha testnet ileile ya ndani ya Ethereum (opens in a new tab), lakini na huduma za ziada zilizounganishwa kama vile mtumaji taka wa miamala (kuiga miamala), kifuatiliaji cha uma, na nakala iliyounganishwa ya Grafana na Prometheus
- Kufanya jaribio la mtandao-ndogo (opens in a new tab) dhidi ya mtandao uleule wa ndani wa Ethereum
Ukurasa ulihaririwa mwisho: 3 Machi 2026