Hvordan synkronisere en Ethereum-node uten å gjøre feilene jeg gjorde

Da jeg først begynte å utvikle meg på Ethereum-plattformen, var det å synkronisere en node en av de første tingene jeg gjorde. Uten å holde hånden min og ingen steder å konsolidere alle de vanlige feilene jeg opplevde, kastet jeg bort uker med å synkronisere en node. Det var slik hodepine at jeg nesten ga opp.

Å ikke kjenne terminologien gjorde det bare vanskeligere.

Og så, i denne artikkelen, vil jeg konsolidere alle de vanlige feilene du kan møte og forklare årsakene bak hvert trinn når du synkroniserer en node. Forhåpentligvis får du ikke en så ekkel tidlig opplevelse som jeg gjorde.

En rask intro

I Ethereum lager utviklere deler av et program som kjører på nettverket. Disse kalles smarte kontrakter . Selv om du kan distribuere dem manuelt uten å synkronisere til en Ethereum-node, er det i det lange løp mer praktisk for utviklingsprosessen å synkronisere (spesielt når vi vil bruke utviklingsrammer som Truffle).

For å synkronisere en Ethereum-node, trenger vi følgende programvare:

  • Geth - klient for en Ethereum-node.
  • Ethereum Wallet - Brukergrensesnitt for en Ethereum-node.

La oss komme i gang.

Installer Geth

For å laste ned Geth, gå hit for Windows-brukere. Klikk deretter på "Geth for Windows" -knappen.

For MacOS-brukere anbefaler jeg at du laster ned med hjemmebrygging. Du kan gjøre det med følgende kommandoer:

brew tap ethereum/ethereumbrew install ethereum

Se Geths instruksjoner for mer informasjon.

Sjekk at Geth er riktig installert ved å skrive geth versioninn terminalen (MacOS) eller PowerShell (Windows).

Installer Ethereum Wallet

Vi kaller GUI som samhandler med nettverket "lommeboken". Du kan finne mange forskjellige lommebøker for Ethereum med et raskt Google-søk (som Parity, Jaxx og MyEtherWallet). Jeg liker personlig å bruke Ethereum Wallet. Den har et brukervennlig grensesnitt, og jeg er også litt partisk fordi den er utviklet av Ethereum selv.

Du finner installatøren her.

Merk: Jeg foretrekker Ethereum lommebok til Mist . Mist er i utgangspunktet en nettleser som gjengir desentraliserte applikasjoner (dApps) og nettsteder.

For å utvikle en smart kontrakt trenger vi bare Ethereum Wallet.

Mainnet vs Testnet

I Ethereum er det to hovednettverk: mainnet og testnet.

Mainnet brukes til å gjennomføre ekte Ether. Etherens verdi er knyttet til ekte fiat-valuta via kryptovaluta-utveksling.

Som utviklere ønsker vi ikke å kjøre applikasjonstester med ekte penger. Det er det testnettet er for.

Vi kaller testnettet Ropsten .

Kjør Geth and Ethereum Wallet

Når du utvikler en smart kontrakt, bør du først synkronisere testnettet. Vi trenger bare å synkronisere mainnet når vi er klare til å distribuere.

Du trenger omtrent 30 GB lagringsplass for å synkronisere et testnett. Ettersom det er flere transaksjoner i mainnet, trenger du omtrent 100 GB for å synkronisere et mainnet.

Merk: noen sier at du trenger en SSD-lagring for rask skriving, slik at synkroniseringen kan innhente den siste blokken. Personlig synes jeg at HDD-lagring er i orden. Imidlertid, hvis jeg får valget, vil jeg definitivt bruke SSD-lagring.

For Windows-brukere

For enkel tilgang, anbefaler jeg at du oppretter en mappe for å lagre blockchain. For eksempel “C: \ EthereumTestnet”.

Når du har opprettet mappen, kan du prøve å kjøre følgende kommando:

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

Rediger: Det virker som om noen argumenter har endret seg. Hvis du fikk en slik feil “flagg gitt, men ikke definert: -data-dir”, kan du prøve å endre argumentnavnet til - datadir i stedet til data-dir.

Argumentet --testnetspesifiserer at vi vil synkronisere med Ropsten-nettverket. Således, for å synkronisere mainnet, trenger du bare å ta ut argumentet --testnetog endre datakatalogen. For eksempel:

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

Det --rpcargumentet gjør at HTTP-RPC-serveren. Dette gjør at vi kan bruke visse tjenester, for eksempel det som er oppgitt i --rpcapi eth,web3,net,personal.

Etter at du har angitt kommandoen, bør du se noe slikt:

For ikke å ødelegge blockchain, spesielt etter mange timers synkronisering, bør du IKKE lukke ledeteksten brått. Stopp alltid synkroniseringen ved å trykke Ctrl + C og vent til Geth stenger programmet for deg.

Det er imidlertid vanskelig å huske alle kommando- og rpc-tjenestene du trenger. Derfor foreslår jeg at du oppretter en snarvei eller en batchfil for å hjelpe deg.

Bare lag en fil ved hjelp av hvilken som helst tekstredigerer du har, og lagre den som .bat- fil. For eksempel RunGethTestnet.bat (navnet er ikke viktig). Kopier og lim inn kommandoen i filen og lagre den. Neste gang du trenger å kjøre Geth for Ropsten, er det bare å dobbeltklikke på filen.

Etter å ha kjørt Geth, må vi kjøre Ethereum Wallet. Ettersom vi vil at grensesnittet skal finne den nøyaktige plasseringen der vi synkroniserte filene våre ved hjelp av Geth, kjører vi det fra konsollen.

I likhet med Geth lagret jeg også en batchfil for den med en eksempelkommando, som den nedenfor:

Merk at kommandoen din kan se litt annerledes ut enn min, da du kan lagre applikasjonen din i en annen katalog.

Alternativt kan du legge til applikasjonen i banen din.

Argumentet --node-datadir="C:\EthereumTestnet"sier hvor jeg lagret chaindataen min, som er nøyaktig den samme som jeg spesifiserte for Geth.

For Mac-brukere

Det er litt enklere for MacOS, fordi chaindata blir lastet ned automatisk til biblioteket og ikke skjult for oss. Så vi trenger ikke å spesifisere datakatalogen.

Likevel anbefaler jeg å lage en skriptfil for å gjøre det enklere å kjøre Geth og Ethereum Wallet.

Merk: Geth må løpe før Ethereum Wallet .

Å kjøre Ethereum Wallet alene starter automatisk synkroniseringsprosessen, da den automatisk kjører en Geth-klient i bakgrunnen. Dette er brukervennlig, men aktiverer ikke RPC-tjenestene vi vil bruke. Dermed vil vi sikre at RPC er aktivert i både Geth- og Ethereum Wallet-utførelsen.

Noen notater

  1. Synkroniseringsprosessen er veldig lang, og kan ta opptil 2-3 dager. Vær tålmodig og vurder å la datamaskinen være slått på over natten.
  2. Synkroniseringshastigheten avhenger av internetthastigheten din, antall kollegaer og skrivehastigheten til lagringsstasjonen.
  3. Ettersom dataene lagres i blokker og kobles sammen, kan korrupsjon i en blokk ødelegge hele chaindata. Dette kan potensielt kaste bort innsatsen din i vente dager på at noden skal synkroniseres. Derfor er det veldig viktig å stenge Geth ordentlig. I visse tilfeller vil du kanskje tilbakestille. Men forebygging er bedre enn kur her.
  4. Fremdriftslinjen på Ethereum Wallet er IKKE nøyaktig. Å stole på det vil gi deg mye angst og frustrasjon.
  5. Geth kjører på port 30303 for ekstern lytting.
  6. Standardporten som brukes til intern kommunikasjon, for eksempel mellom lommeboken og Geth, er 8545.

Forsikre deg om at porten din til Geth-klienten er åpnet

Det er veldig viktig å sørge for at forbindelsen til Geth-klienten ikke er begrenset. En stor hodepine jeg opplevde var å la brannmuren begrense antall tilkoblinger jeg kunne ha gjennom Geth-klienten.

Du kan oppdage dette problemet ved å se på antall kollegaer . Hvis den holder seg konstant lav på omtrent 1–3 kolleger (i minst en halv time), er det stor sjanse for at forbindelsen din er begrenset. Et sunt utvalg er over 5 jevnaldrende.

MacOS-brukere

Når du kjører Geth, bør det være et varsel om at du tillater tilkobling. Vel, selvfølgelig, klikk på “Tillat.

For å sjekke, gå til Systemvalg> System og personvern.

Under Brannmur- fanen klikker du på Brannmuralternativer .

Windows-brukere

For å åpne porten din, gå til Kontrollpanel> System og sikkerhet> Windows defender-brannmur.

Klikk på Avanserte innstillinger . Klikk på Innkommende regler på sidepanelet .

De inngående portene du vil åpne er TCP og UDP 30303. Så jeg opprettet en regel for TCP 30303 og en annen for UDP 30303.

Det kan hende du må åpne de utgående portene for TCP 30303 også.

Vær oppmerksom på at en tredjeparts brannmur / antivirus kan begrense forbindelsene dine også, så sørg for å konfigurere den deretter.

Fest til Geth

For å hente mer informasjon om noden din, kan du knytte til Geth-klienten og utføre kommandoer med den ved hjelp av RPC-tjenestene.

Her er en enkel måte å sjekke synkroniseringsstatusen din på: fest til klienten ved å skrive inn følgende kommando på en separat terminal / konsoll.

geth attach //127.0.0.1:8545

Igjen, vil du kanskje lagre den i en batch / skriptfil for din egen bekvemmelighet.

Etter å ha kjørt kommandoen, bør du se noe slikt.

Skriv inn, web3.ethog du bør se mye informasjon. For å hente spesifikk informasjon om synkronisering, skriv i web3.eth.syncingstedet.

Som du kan se, er fremdriftslinjen øverst på Ethereum Wallet bare en sammenligning mellom den høyeste blokken og den nåværende blokkeringen . Ettersom den høyeste blokkeringen som er kjent for datamaskinen din kanskje ikke er den faktiske høyeste blokken, kan fremdriftslinjen ikke gjenspeile den virkelige fremgangen.

Faktisk vil den høyeste blokkeringen og de kjente statene fortsette å øke når du synkroniserer nodene dine.

Noen siste poeng

Ettersom teknologien endres raskt, bruk alltid den stabile versjonen av klienten og lommeboken for å unngå å gi deg mer hodepine.

Vær også oppmerksom på at det alltid er en løsning for noen av problemene du står overfor. Når du har problemer med synkronisering, kan du prøve å søke etter løsninger, da du sannsynligvis ikke er den første til å møte det samme problemet.

Og minne deg alltid på at du ikke trenger å synkronisere en node for å utvikle en smart kontrakt. Å gjøre det hjelper bare til å gjøre det lettere for deg å forstå miljøet og utviklingsprosessen. Så ikke slå deg selv over det hvis du støter på problemer så tidlig i utviklingsprosessen.

For flere av slike artikler, følg meg eller besøk nettstedet mitt - En utviklers perspektiv.