Yerel, çok istemcili bir test ağında bir merkeziyetsiz uygulama nasıl geliştirilir ve test edilir
Giriş
Bu kılavuz, yapılandırılabilir bir yerel Ethereum test ağını somutlaştırma, ona bir akıllı sözleşme dağıtma ve merkeziyetsiz uygulamanıza karşı testler yürütmek için test ağını kullanma sürecinde size yol gösterir. Bu kılavuz, canlı bir test ağına veya ana ağa dağıtım yapmadan önce merkeziyetsiz uygulamalarını farklı ağ yapılandırmalarına karşı yerel olarak geliştirmek ve test etmek isteyen merkeziyetsiz uygulama geliştiricileri için tasarlanmıştır.
Bu kılavuzda şunları yapacaksınız:
- Kurtosis (opens in a new tab) kullanarak
eth-network-package(opens in a new tab) ile yerel bir Ethereum test ağı oluşturun, - Bir merkeziyetsiz uygulamayı derlemek, dağıtmak ve test etmek için Hardhat merkeziyetsiz uygulama geliştirme ortamınızı yerel test ağına bağlayın ve
- Çeşitli ağ yapılandırmalarına karşı geliştirme ve test iş akışlarını etkinleştirmek için düğüm sayısı ve belirli YK/MK istemci eşleşmeleri gibi parametreler de dahil olmak üzere yerel test ağını yapılandırın.
Kurtosis nedir?
Kurtosis (opens in a new tab), çok kapsayıcılı test ortamlarını yapılandırmak için tasarlanmış birleştirilebilir bir yapı sistemidir. Geliştiricilerin, blokzincir test ağları gibi dinamik kurulum mantığı gerektiren yeniden üretilebilir ortamlar oluşturmasını özellikle sağlar.
Bu kılavuzda, Kurtosis eth-network-package, geth (opens in a new tab) Yürütme Katmanı (YK) istemcisinin yanı sıra teku (opens in a new tab), lighthouse (opens in a new tab) ve lodestar (opens in a new tab) Mutabakat Katmanı (MK) istemcileri desteğiyle yerel bir Ethereum test ağı oluşturur. Bu paket, Hardhat Network, Ganache ve Anvil gibi çerçevelerdeki ağlara yapılandırılabilir ve birleştirilebilir bir alternatif olarak hizmet eder. Kurtosis, geliştiricilere kullandıkları test ağları üzerinde daha fazla kontrol ve esneklik sunar; bu da Ethereum Vakfı'nın Birleşim'i test etmek için Kurtosis'i kullanmasının (opens in a new tab) ve ağ yükseltmelerini test etmek için kullanmaya devam etmesinin önemli bir nedenidir.
Kurtosis'i kurma
Devam etmeden önce, şunlara sahip olduğunuzdan emin olun:
- Yerel makinenizde Docker motorunu kurun ve başlatın (opens in a new tab)
- Kurtosis CLI'yi yükleyin (opens in a new tab) (veya CLI zaten yüklüyse en son sürüme yükseltin)
- Node.js (opens in a new tab), yarn (opens in a new tab) ve npx (opens in a new tab) (merkeziyetsiz uygulama ortamınız için) yükleyin
Yerel bir Ethereum test ağı oluşturma
Yerel bir Ethereum test ağı başlatmak için şunu çalıştırın:
1kurtosis --enclave local-eth-testnet run github.com/kurtosis-tech/eth-network-packageNot: Bu komut, --enclave bayrağını kullanarak ağınızı "local-eth-testnet" olarak adlandırır.
Kurtosis, talimatları yorumlamak, doğrulamak ve ardından yürütmek için çalışırken perde arkasında attığı adımları yazdıracaktır. Sonunda, aşağıdakine benzer bir çıktı görmelisiniz:
1INFO[2023-04-04T18:09:44-04:00] ======================================================2INFO[2023-04-04T18:09:44-04:00] || Enclave oluşturuldu: 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 EDT89========================================= Dosya Yapıtları =========================================10UUID Name11d4085a064230 cl-genesis-data121c62cb792e4c el-genesis-data13bd60489b73a7 genesis-generation-config-cl14b2e593fe5228 genesis-generation-config-el15d552a54acf78 geth-prefunded-keys165f7e661eb838 prysm-password17054e7338bb59 validator-keystore-01819========================================== Kullanıcı Hizmetleri ==========================================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> STOPPED35Tümünü gösterTebrikler! Docker üzerinde bir MK (lighthouse) ve YK istemcisi (geth) ile yerel bir Ethereum test ağı oluşturmak için Kurtosis'i kullandınız.
Gözden Geçirme
Bu bölümde, bir Kurtosis Enclave (opens in a new tab) içinde yerel bir Ethereum test ağı başlatmak için Kurtosis'i GitHub'da uzaktan barındırılan eth-network-package (opens in a new tab) kullanmaya yönlendiren bir komut yürüttünüz. Enclave'inizin içinde hem "dosya yapıtları" hem de "kullanıcı hizmetleri" bulacaksınız.
Enclave'inizdeki Dosya Yapıtları (opens in a new tab), YK ve MK istemcilerini önyüklemek için oluşturulan ve kullanılan tüm verileri içerir. Veriler, bu Docker görüntüsünden (opens in a new tab) oluşturulan prelaunch-data-generator hizmeti kullanılarak oluşturuldu.
Kullanıcı hizmetleri, enclave'inizde çalışan tüm kapsayıcılı hizmetleri görüntüler. Hem bir YK istemcisi hem de bir MK istemcisi içeren tek bir düğümün oluşturulduğunu fark edeceksiniz.
Merkeziyetsiz uygulama geliştirme ortamınızı yerel Ethereum test ağına bağlama
Merkeziyetsiz uygulama geliştirme ortamını kurma
Artık çalışan bir yerel test ağınız olduğuna göre, yerel test ağınızı kullanmak için merkeziyetsiz uygulama geliştirme ortamınızı bağlayabilirsiniz. Bu kılavuzda, yerel test ağınıza bir blackjack merkeziyetsiz uygulaması dağıtmak için Hardhat çerçevesi kullanılacaktır.
Merkeziyetsiz uygulama geliştirme ortamınızı kurmak için, örnek merkeziyetsiz uygulamamızı içeren depoyu klonlayın ve bağımlılıklarını yükleyin, şunu çalıştırın:
1git clone https://github.com/kurtosis-tech/awesome-kurtosis.git && cd awesome-kurtosis/smart-contract-example && yarnBurada kullanılan smart-contract-example (opens in a new tab) klasörü, Hardhat (opens in a new tab) çerçevesini kullanan bir merkeziyetsiz uygulama geliştiricisi için tipik kurulumu içerir:
contracts/(opens in a new tab) bir Blackjack merkeziyetsiz uygulaması için birkaç basit akıllı sözleşme içerirscripts/(opens in a new tab) yerel Ethereum ağınıza bir jeton sözleşmesi dağıtmak için bir betik içerirtest/(opens in a new tab) Blackjack merkeziyetsiz uygulamamızdaki her oyuncu için 1000 jetonun basıldığını doğrulamak amacıyla jeton sözleşmeniz için basit bir .js testi içerirhardhat.config.ts(opens in a new tab) Hardhat kurulumunuzu yapılandırır
Hardhat'i yerel test ağını kullanacak şekilde yapılandırma
Merkeziyetsiz uygulama geliştirme ortamınız kurulduktan sonra, Kurtosis kullanılarak oluşturulan yerel Ethereum test ağını kullanmak için Hardhat'i bağlayacaksınız. Bunu başarmak için, hardhat.config.ts yapılandırma dosyanızdaki localnet yapısındaki <$YOUR_PORT> öğesini herhangi bir el-client-<num> hizmetinden gelen rpc uri çıktısının bağlantı noktasıyla değiştirin. Bu örnek durumda, bağlantı noktası 64248 olacaktır. Sizin bağlantı noktanız farklı olacaktır.
hardhat.config.ts içinde örnek:
1localnet: {2url: 'http://127.0.0.1:<$YOUR_PORT>',// TODO: $YOUR_PORT'U ETH AĞI KURTOSIS PAKETİNİN ÜRETTİĞİ BİR DÜĞÜM URI'SİNİN BAĞLANTI NOKTASIYLA DEĞİŞTİRİN34// Bunlar, eth-network-package tarafından oluşturulan önceden finanse edilmiş test hesaplarıyla ilişkili özel anahtarlardır5// <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},Tümünü gösterDosyanızı kaydettiğinizde, Hardhat merkeziyetsiz uygulama geliştirme ortamınız artık yerel Ethereum test ağınıza bağlanmış olur! Test ağınızın çalıştığını şu komutu çalıştırarak doğrulayabilirsiniz:
1npx hardhat balances --network localnetÇıktı şuna benzer görünmelidir:
10x878705ba3f8Bc32FCf7F4CAa1A35E72AF65CF766 has balance 1000000000000000000000000020x4E9A3d9D1cd2A2b2371b8b3F489aE72259886f1A has balance 1000000000000000000000000030xdF8466f277964Bb7a0FFD819403302C34DCD530A has balance 1000000000000000000000000040x5c613e39Fc0Ad91AfDA24587e6f52192d75FBA50 has balance 1000000000000000000000000050x375ae6107f8cC4cF34842B71C6F746a362Ad8EAc has balance 1000000000000000000000000060x1F6298457C5d76270325B724Da5d1953923a6B88 has balance 10000000000000000000000000Bu, Hardhat'in yerel test ağınızı kullandığını ve eth-network-package tarafından oluşturulan önceden finanse edilmiş hesapları algıladığını doğrular.
Merkeziyetsiz uygulamanızı yerel olarak dağıtın ve test edin
Merkeziyetsiz uygulama geliştirme ortamı yerel Ethereum test ağına tamamen bağlandığında, artık yerel test ağını kullanarak merkeziyetsiz uygulamanıza karşı geliştirme ve test iş akışlarını çalıştırabilirsiniz.
Yerel prototipleme ve geliştirme için ChipToken.sol akıllı sözleşmesini derlemek ve dağıtmak için şunu çalıştırın:
1npx hardhat compile2npx hardhat run scripts/deploy.ts --network localnetÇıktı şuna benzer görünmelidir:
1ChipToken şuraya dağıtıldı: 0xAb2A01BC351770D09611Ac80f1DE076D56E0487dŞimdi, Blackjack merkeziyetsiz uygulamamızdaki her oyuncu için 1000 jeton basıldığını doğrulamak için yerel merkeziyetsiz uygulamanıza karşı simple.js testini çalıştırmayı deneyin:
Çıktı şuna benzer görünmelidir:
1npx hardhat test --network localnetÇıktı şuna benzer görünmelidir:
1ChipToken2 mint3 ✔ PLAYER ONE için 1000 fiş basmalı45 1 başarılı (654ms)Gözden Geçirme
Bu noktada, bir merkeziyetsiz uygulama geliştirme ortamı kurdunuz, onu Kurtosis tarafından oluşturulan yerel bir Ethereum ağına bağladınız ve merkeziyetsiz uygulamanıza karşı basit bir test derlediniz, dağıttınız ve çalıştırdınız.
Şimdi de, merkeziyetsiz uygulamalarımızı değişken ağ yapılandırmaları altında test etmek için temel ağı nasıl yapılandırabileceğinizi keşfedelim.
Yerel Ethereum test ağını yapılandırma
İstemci yapılandırmalarını ve düğüm sayısını değiştirme
Yerel Ethereum test ağınız, geliştirmek veya test etmek istediğiniz senaryoya ve belirli ağ yapılandırmasına bağlı olarak, farklı YK ve MK istemci çiftlerinin yanı sıra değişen sayıda düğüm kullanacak şekilde yapılandırılabilir. Bu, kurulduktan sonra özelleştirilmiş bir yerel test ağı oluşturabileceğiniz ve aynı iş akışlarını (dağıtım, testler vb.) çalıştırmak için kullanabileceğiniz anlamına gelir. her şeyin beklendiği gibi çalıştığından emin olmak için çeşitli ağ yapılandırmaları altında. Değiştirebileceğiniz diğer parametreler hakkında daha fazla bilgi edinmek için bu bağlantıyı ziyaret edin.
Deneyin! Bir JSON dosyası aracılığıyla eth-network-package'a çeşitli yapılandırma seçenekleri iletebilirsiniz. Bu ağ parametreleri JSON dosyası, Kurtosis'in yerel Ethereum ağını kurmak için kullanacağı belirli yapılandırmaları sağlar.
Varsayılan yapılandırma dosyasını alın ve farklı YK/MK çiftlerine sahip üç düğüm başlatmak için düzenleyin:
- Düğüm 1,
geth/lighthouseile - Düğüm 2,
geth/lodestarile - Düğüm 3,
geth/tekuile
Bu yapılandırma, merkeziyetsiz uygulamanızı test etmek için heterojen bir Ethereum düğüm uygulamaları ağı oluşturur. Yapılandırma dosyanız şimdi şöyle görünmelidir:
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}Tümünü gösterHer participants yapısı ağdaki bir düğüme karşılık gelir, bu nedenle 3 participants yapısı Kurtosis'e ağınızda 3 düğüm başlatmasını söyleyecektir. Her participants yapısı, o belirli düğüm için kullanılan YK ve MK çiftini belirtmenize olanak tanır.
network_params yapısı, her düğüm için başlangıç dosyalarını oluşturmak için kullanılan ağ ayarlarını ve ağın yuva başına saniyesi gibi diğer ayarları yapılandırır.
Düzenlenen parametreler dosyanızı istediğiniz herhangi bir dizine kaydedin (aşağıdaki örnekte masaüstüne kaydedilmiştir) ve ardından Kurtosis paketinizi çalıştırmak için şunu çalıştırın:
1kurtosis clean -a && kurtosis run --enclave local-eth-testnet github.com/kurtosis-tech/eth-network-package "$(cat ~/eth-network-params.json)"Not: kurtosis clean -a komutu, Kurtosis'e yeni bir tane başlatmadan önce eski test ağını ve içeriğini yok etmesi talimatını vermek için burada kullanılır.
Yine Kurtosis bir süre çalışacak ve gerçekleşen adımları tek tek yazdıracaktır. Sonunda, çıktı şuna benzer görünmelidir:
1Starlark kodu başarıyla çalıştırıldı. Çıktı döndürülmedi.2INFO[2023-04-07T11:43:16-04:00] ==========================================================3INFO[2023-04-07T11:43:16-04:00] || Enclave oluşturuldu: 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 EDT910========================================= Dosya Yapıtları =========================================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-22122========================================== Kullanıcı Hizmetleri ==========================================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> STOPPEDTümünü gösterTebrikler! Yerel test ağınızı 1 yerine 3 düğüme sahip olacak şekilde başarıyla yapılandırdınız. Merkeziyetsiz uygulamanıza karşı daha önce yaptığınız iş akışlarını (dağıtma ve test etme) çalıştırmak için, hardhat.config.ts yapılandırma dosyanızdaki localnet yapısındaki <$YOUR_PORT> öğesini yeni, 3 düğümlü yerel test ağınızdaki herhangi bir el-client-<num> hizmetinden gelen rpc uri çıktısının bağlantı noktasıyla değiştirerek daha önce yaptığımız işlemlerin aynısını gerçekleştirin.
Sonuç
İşte bu kadar! Bu kısa kılavuzu özetlemek gerekirse, şunları yaptınız:
- Kurtosis kullanarak Docker üzerinde yerel bir Ethereum test ağı oluşturdunuz
- Yerel merkeziyetsiz uygulama geliştirme ortamınızı yerel Ethereum ağına bağladınız
- Yerel Ethereum ağında bir merkeziyetsiz uygulama dağıttınız ve ona karşı basit bir test çalıştırdınız
- Temel Ethereum ağını 3 düğüme sahip olacak şekilde yapılandırdınız
Sizin için neyin iyi gittiğini, neyin iyileştirilebileceğini veya sorularınızı yanıtlamak için sizden haber bekliyoruz. GitHub (opens in a new tab) üzerinden ulaşmaktan veya bize e-posta göndermekten (opens email client) çekinmeyin!
Diğer örnekler ve kılavuzlar
Postgres veritabanı ve üzerine bir API oluşturacağınız hızlı başlangıcımıza (opens in a new tab) ve harika örnekler bulacağınız awesome-kurtosis depomuzdaki (opens in a new tab) diğer örneklerimize göz atmanızı öneririz, bunlar arasında şunlar için paketler bulunur:
- İşlemleri simüle etmek için bir işlem spam göndericisi, bir çatal izleyicisi ve bağlı bir Grafana ve Prometheus örneği gibi ek hizmetlerle bağlı olan aynı yerel Ethereum test ağını başlatma (opens in a new tab)
- Aynı yerel Ethereum ağına karşı bir alt ağ testi (opens in a new tab) gerçekleştirme
Sayfanın son güncellenmesi: 23 Eylül 2025