Hogyan szinkronizálhatok egy Ethereum csomópontot anélkül, hogy elkövetném a hibákat

Amikor először kezdtem fejleszteni az Ethereum platformon, egy csomópont szinkronizálása volt az első néhány dolog, amit tettem. Mivel senki nem fogta meg a kezem, és nincs hová konszolidálva az összes gyakori hibát, amivel találkoztam, hetekig vesztegettem csak egy csomópont szinkronizálását. Olyan fejfájás volt, hogy majdnem feladtam.

A terminológia ismerete csak megnehezítette.

Ezért ebben a cikkben összesíteni szeretném az összes előforduló hibát, és megmagyarázom az egyes lépések hátterét a csomópont szinkronizálásakor. Remélhetőleg nem lesz ilyen csúnya korai tapasztalata, mint nekem.

Gyors bevezető

Az Ethereumban a fejlesztők egy alkalmazás darabjait hozzák létre, amelyek a hálózaton futnak. Ezeket nevezzük okos szerződéseknek . Habár manuálisan telepítheti őket Ethereum csomópont szinkronizálása nélkül, hosszú távon a fejlesztési folyamat kényelmesebb szinkronizálása (különösen akkor, ha olyan fejlesztési keretrendszereket akarunk használni, mint a Szarvasgomba).

Az Ethereum csomópont szinkronizálásához a következő szoftverre lesz szükségünk:

  • Geth - kliens egy Ethereum csomóponthoz.
  • Ethereum Wallet - Egy Ethereum csomópont felhasználói felülete.

Kezdjük el.

Telepítse a Geth alkalmazást

A Geth letöltéséhez lépjen ide Windows felhasználók számára. Ezután kattintson a „Geth for Windows” gombra.

MacOS felhasználók számára azt javaslom, hogy töltse le a homebrew használatával. A következő parancsokkal teheti meg:

brew tap ethereum/ethereumbrew install ethereum

További részletekért olvassa el Geth utasításait.

A geth versionterminál (MacOS) vagy a PowerShell (Windows) beírásával ellenőrizze, hogy a Geth megfelelően van-e telepítve .

Telepítse az Ethereum Wallet alkalmazást

A hálózattal kölcsönhatásban lévő GUI-t „pénztárcának” hívjuk. Gyors Google kereséssel számos különféle pénztárcát találhat az Ethereum számára (például Parity, Jaxx és MyEtherWallet). Én személy szerint szeretem az Ethereum Wallet használatát. Felhasználóbarát felülettel rendelkezik, és kissé elfogult is vagyok, mert maga az Ethereum fejlesztette ki.

A telepítőt itt találja.

Megjegyzés: Inkább az Ethereum Wallet, mint a Mist . A Mist alapvetően egy böngésző, amely decentralizált alkalmazásokat (dApps) és weboldalakat jelenít meg.

Az intelligens szerződés kialakításához csak az Ethereum pénztárcára lesz szükségünk.

Mainnet vs Testnet

Az Ethereumban két fő hálózat létezik: a mainnet és a testnet.

A mainnet valódi éter tranzakciójára használják. Az éter értéke valódi fiat devizához van kötve kriptovaluta tőzsdéken keresztül.

Fejlesztőként nem szeretnénk valódi pénzzel futtatni az alkalmazásteszteket. Erre szolgál a tesztnet.

Felhívjuk a testnet Ropsten .

Futtassa a Geth és az Ethereum Wallet programot

Intelligens szerződés fejlesztésekor először szinkronizálnia kell a tesztnetet. Csak akkor kell szinkronizálnunk a mainnet, ha készen állunk a telepítésre.

Körülbelül 30 GB tárhelyre lesz szüksége a teszthálózat szinkronizálásához. Mivel több tranzakció van a mainnet-ben, a mainnet szinkronizálásához körülbelül 100 GB- ra lesz szükség .

Megjegyzés: egyesek szerint SSD-tárolóra van szükség a gyors íráshoz, hogy a szinkron elérhesse a legújabb blokkot. Személy szerint azt tapasztalom, hogy a HDD-tárolás rendben van. Ha azonban választásom lenne, mindenképpen SSD-tárat használnék.

Windows felhasználók számára

A könnyű hozzáférés érdekében azt javaslom, hogy hozzon létre egy mappát a blokklánc tárolásához. Például: „C: \ EthereumTestnet”.

A mappa létrehozása után futtassa a következő parancsot:

geth — testnet — data-dir=”C:\EthereumTestnet” — rpc — rpcapi eth,web3,net,personal

Edit: Úgy tűnik, néhány érv megváltozott. Ha ilyen „flag biztosított, de nincs meghatározva: -data-dir” hibát észlelt, próbálja meg megváltoztatni az argumentum nevét - datadir helyett data-dir értékre.

Az argumentum --testnetmegadja, hogy szinkronizálni szeretnénk a Ropsten hálózattal. Így a mainnet szinkronizálásához csak ki kell vennie az argumentumot --testnetés meg kell változtatnia az adatkönyvtárat. Például:

geth — data-dir=”C:\EthereumMainnet” — rpc — rpcapi eth,web3,net,personal

Az --rpcargumentum engedélyezi a HTTP-RPC szervert. Ez lehetővé teszi számunkra, hogy bizonyos szolgáltatásokat igénybe vegyünk, például a --rpcapi eth,web3,net,personal.

A parancs beírása után valami ilyesmit kell látnia:

Annak érdekében, hogy ne sérüljön meg a blokklánc, különösen sok órás szinkronizálás után, NEM szabad hirtelen bezárnia a parancssort. Mindig állítsa le a szinkronizálást a Ctrl + C billentyűkombinációval, és várja meg, amíg Geth leállítja az Ön programját.

Nehéz azonban megjegyezni az összes szükséges parancs- és rpc-szolgáltatást. Ezért javaslom, hogy hozzon létre egy parancsikont vagy egy kötegelt fájlt a segítségére.

Egyszerűen hozzon létre egy fájlt bármilyen szövegszerkesztővel, és mentse el .bat fájlként. Például a RunGethTestnet.bat (a név nem fontos). Másolja és illessze be a parancsot a fájlba, és mentse el. Ha legközelebb a Geth for Ropsten programot kell futtatnia, kattintson duplán a fájlra.

A Geth futtatása után le kell futtatnunk az Ethereum pénztárcát. Mivel azt akarjuk, hogy az interfész megtalálja a fájlok pontos helyét, ahol a Geth segítségével szinkronizáltuk fájljainkat, a konzolról hajtjuk végre.

A Geth-hez hasonlóan egy kötegfájlt is elmentettem hozzá, egy példaként, például az alábbi paranccsal:

Ne feledje, hogy a parancs kissé eltérhet az enyémtől, mivel az alkalmazását egy másik könyvtárban tárolhatja.

Alternatív megoldásként hozzáadhatja az alkalmazást az útvonalához.

Az érvelés --node-datadir="C:\EthereumTestnet"azt állítja, hogy hol tároltam a chaindataimat, ami pontosan ugyanaz, mint amit Geth esetében megadtam.

Mac felhasználók számára

Ez kissé egyszerűbb a MacOS esetében, mert a chaindata automatikusan letöltésre kerül a könyvtárba, és nem rejti el előttünk. Tehát nem kell megadnunk az adatkönyvtárat.

Ennek ellenére azt javaslom, hogy hozzon létre egy szkriptfájlt, hogy megkönnyítse a Geth és az Ethereum Wallet futtatását.

Megjegyzés: Geth-nek futnia kell az Ethereum Wallet előtt .

Az Ethereum Wallet önmagában történő futtatása automatikusan elindítja a szinkronizálási folyamatot, mivel automatikusan egy Geth klienst futtat a háttérben. Ez felhasználóbarát, de nem teszi lehetővé a használni kívánt RPC szolgáltatásokat. Ezért szeretnénk biztosítani, hogy az RPC engedélyezve legyen mind a Geth, mind az Ethereum Wallet végrehajtásában.

Néhány megjegyzés

  1. A szinkronizálás nagyon hosszú, és akár 2-3 napot is igénybe vehet. Kérjük, legyen türelemmel, és fontolja meg, hogy a számítógépet éjszakára bekapcsolva hagyja.
  2. A szinkronizálási sebesség az internet sebességétől, a társaik számától és a tároló meghajtó írási sebességétől függ.
  3. Mivel az adatokat blokkokban tárolják és összekapcsolják, az egy blokkban lévő korrupció megsértheti az egész chaindatát. Ez potenciálisan pazarolja az erőfeszítéseit a csomópont szinkronizálására váró napokban. Ezért nagyon fontos, hogy megfelelően leállítsd a Geth-edet. Bizonyos esetekben érdemes visszagörgetni. De itt jobb a megelőzés, mint a gyógyítás.
  4. Az Ethereum pénztárca előrehaladási sávja NEM pontos. Ha erre támaszkodik, sok szorongást és csalódást fog okozni.
  5. Geth a 30303 porton fut külső hallgatásra.
  6. A belső kommunikációhoz használt alapértelmezett port, például a pénztárca és a Geth között, 8545.

Győződjön meg arról, hogy a Geth kliens portja meg van nyitva

Nagyon fontos megbizonyosodni arról, hogy a Geth klienssel való kapcsolat nincs korlátozva. Az egyik hatalmas fejfájás az volt, hogy a tűzfalam korlátozta a Geth kliensen keresztül elérhető kapcsolataim számát.

Megfigyelheti ezt a problémát, ha megnézi a társak számát . Ha ez állandóan alacsony, körülbelül 1-3 társnál (legalább fél órán keresztül), jó eséllyel korlátozott a kapcsolata. Az egészséges tartomány meghaladja az 5 társat.

MacOS felhasználók

A Geth futtatásakor értesítést kell küldeni a kapcsolat engedélyezéséről. Nos, természetesen kattintson az „Engedélyezés” gombra.

Az ellenőrzéshez lépjen a Rendszerbeállítások> Rendszer és adatvédelem pontra.

A Tűzfal fül alatt kattintson a Tűzfal beállításai elemre .

Windows felhasználók

A port megnyitásához lépjen a Vezérlőpult> Rendszer és biztonság> Windows Defender tűzfal elemre.

Kattintson a Speciális beállítások elemre . Az oldalsó panelen kattintson a Bejövő szabályok elemre .

A bejövő portok, amelyeket meg akar nyitni, a TCP és az UDP 30303. Ezért létrehoztam egy szabályt a TCP 30303-hoz, egy másikat az UDP 30303-hoz.

Lehet, hogy meg kell nyitnia a TCP 30303 kimenő portjait is.

Ne feledje, hogy bármely harmadik féltől származó tűzfal / antivírus korlátozhatja a kapcsolatait is, ezért mindenképpen állítsa be ennek megfelelően.

Csatlakozzon Gethhez

Ha további információt szeretne kapni a csomópontjáról, akkor csatolhatja a Geth klienst, és parancsokat hajthat végre vele az RPC szolgáltatások használatával.

Ez egy egyszerű módszer a szinkronizálási állapot ellenőrzésére: csatolja az ügyfélhez a következő parancs megadásával egy külön terminálon / konzolon.

geth attach //127.0.0.1:8545

Ismét érdemes a kényelme érdekében egy kötegelt / szkript fájlban tárolni.

A parancs futtatása után látnia kell valami ilyesmit.

Írja be, web3.ethés sok információt kell látnia. A szinkronizálással kapcsolatos információk lekéréséhez írja be web3.eth.syncinghelyette.

Mint láthatja, az Ethereum Wallet tetején található előrehaladási sáv csupán összehasonlítás a legmagasabb és az aktuálisBlokk között . Mivel a highestBlock ismert a számítógéphez lehet, hogy nem a tényleges legmagasabb blokk, az állapotjelző sáv lehet, hogy nem tükrözi a valós előrelépés.

Valójában a legmagasabbBlock és ismertStates továbbra is növekszik, miközben szinkronizálja a csomópontokat.

Néhány utolsó pont

Mivel a technológia gyorsan változik, mindig használja az ügyfél és a pénztárca stabil változatát, hogy ne okozzon több fejfájást.

Ezenkívül vegye figyelembe, hogy a szembesülő kérdésekre mindig van megoldás. Ha szinkronizálási problémával szembesül, megpróbálhat megoldásokat keresni, mivel valószínűleg nem először találkozik ezzel a problémával.

És mindig emlékeztesse magát arra, hogy az intelligens szerződés kialakításához nem kell szinkronizálnia egy csomópontot. Ez csak elősegíti a környezet és a fejlesztési folyamat megértését. Tehát ne verje át magát rajta, ha a fejlesztési folyamat ilyen korai szakaszában problémákba ütközik.

Több ilyen cikkért kövessen engem, vagy látogasson el a webhelyemre - A fejlesztő perspektívája.