Sådan synkroniseres en Ethereum-node uden at lave de fejl, jeg lavede

Da jeg først begyndte at udvikle på Ethereum-platformen, var synkronisering af en node en af ​​de første få ting, jeg gjorde. Med ingen til at holde min hånd og ingen steder at konsolidere alle de almindelige fejl, jeg stødte på, spildte jeg uger på bare at synkronisere en node. Det var sådan en hovedpine, at jeg næsten gav op.

Ikke at kende terminologien gjorde det kun sværere.

Og så i denne artikel vil jeg konsolidere alle de almindelige fejl, du måske står over for, og forklare årsagerne til hvert trin, når du synkroniserer en node. Forhåbentlig har du ikke sådan en grim tidlig oplevelse som jeg gjorde.

En hurtig introduktion

I Ethereum opretter udviklere stykker af en applikation, der kører på netværket. Disse kaldes smarte kontrakter . Selvom du kan distribuere dem manuelt uden at synkronisere med en Ethereum-node, er det i det lange løb mere praktisk for udviklingsprocessen at synkronisere (især når vi vil bruge udviklingsrammer som Truffle).

For at synkronisere en Ethereum-node skal vi bruge følgende software:

  • Geth - Klient til en Ethereum-node.
  • Ethereum Wallet - Brugergrænseflade til en Ethereum-node.

Lad os komme igang.

Installer Geth

For at downloade Geth, gå her til Windows-brugere. Klik derefter på knappen "Geth til Windows".

For MacOS-brugere anbefaler jeg, at du downloader ved hjælp af homebrew. Du kan gøre det med følgende kommandoer:

brew tap ethereum/ethereumbrew install ethereum

Se Geths instruktioner for flere detaljer.

Kontroller, at Geth er installeret korrekt ved at skrive geth versionterminalen (MacOS) eller PowerShell (Windows).

Installer Ethereum Wallet

Vi kalder GUI'en, der interagerer med netværket, "tegnebogen". Du kan finde mange forskellige tegnebøger til Ethereum med en hurtig Google-søgning (såsom Parity, Jaxx og MyEtherWallet). Jeg kan godt lide at bruge Ethereum Wallet. Det har en brugervenlig grænseflade, og jeg er også lidt partisk, fordi den er udviklet af Ethereum selv.

Du kan finde installationsprogrammet her.

Bemærk: Jeg foretrækker Ethereum Wallet frem for Mist . Mist er dybest set en browser, der gengiver decentrale applikationer (dApps) og websteder.

Til udviklingen af ​​en smart kontrakt har vi kun brug for Ethereum Wallet.

Mainnet vs Testnet

I Ethereum er der to hovednetværk: mainnet og testnet.

Mainnet bruges til at gennemføre ægte Ether. Etherens værdi er bundet til ægte fiat-valuta via kryptokursudveksling.

Som udviklere ønsker vi ikke at køre applikationstest med rigtige penge. Det er, hvad testnet er beregnet til.

Vi kalder testnet Ropsten .

Kør Geth og Ethereum Wallet

Når du udvikler en smart kontrakt, skal du først synkronisere testnet. Vi behøver kun at synkronisere mainnet, når vi er klar til implementering.

Du skal bruge ca. 30 GB lagerplads til at synkronisere et testnet. Da der er flere transaktioner i mainnet, skal du bruge ca. 100 GB til at synkronisere et mainnet.

Bemærk: nogle siger, at du har brug for et SSD-lager til hurtig skrivning, så synkroniseringen kan indhente den seneste blok. Personligt finder jeg, at harddisklagring er okay. Men hvis jeg får valget, vil jeg helt sikkert bruge SSD-lagring.

For Windows-brugere

For nem adgang anbefaler jeg, at du opretter en mappe til lagring af blockchain. For eksempel “C: \ EthereumTestnet”.

Når du har oprettet mappen, skal du prøve at køre følgende kommando:

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

Rediger: Det ser ud til, at nogle argumenter er ændret. Hvis du stødte på en sådan fejl “flag forudsat men ikke defineret: -data-dir”, prøv at ændre argumentnavnet til - datadir i stedet til data-dir.

Argumentet --testnetspecificerer, at vi vil synkronisere med Ropsten-netværket. For at synkronisere mainnet skal du bare tage argumentet ud --testnetog ændre datakataloget . For eksempel:

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

Det --rpcargument giver HTTP-RPC-serveren. Dette giver os mulighed for at bruge bestemte tjenester, såsom hvad der er angivet i --rpcapi eth,web3,net,personal.

Når du har indtastet kommandoen, skal du se noget som dette:

For ikke at ødelægge blockchain, især efter mange timers synkronisering, skal du IKKE lukke kommandoprompten brat. Stop altid synkroniseringen ved at trykke på Ctrl + C og vent, indtil Geth lukker programmet for dig.

Det er dog svært at huske alle de kommando- og rpc-tjenester, du har brug for. Derfor foreslår jeg at oprette en genvej eller en batchfil til at hjælpe dig.

Opret blot en fil ved hjælp af enhver teksteditor, du har, og gem den som .bat- fil. For eksempel RunGethTestnet.bat (navnet er ikke vigtigt). Kopier og indsæt kommandoen i filen, og gem den. Næste gang du skal køre Geth for Ropsten, skal du bare dobbeltklikke på filen.

Efter at have kørt Geth er vi nødt til at køre Ethereum Wallet. Da vi vil have grænsefladen til at finde den nøjagtige placering, hvor vi synkroniserede vores filer ved hjælp af Geth, udfører vi det fra konsollen.

I lighed med Geth gemte jeg også en batchfil til den med en eksempelkommando, som den nedenfor:

Bemærk, at din kommando muligvis ser lidt anderledes ud end min, da du muligvis gemmer din applikation i en anden mappe.

Alternativt kan du føje applikationen til din sti.

Argumentet --node-datadir="C:\EthereumTestnet"siger, hvor jeg lagrede min chaindata, som er nøjagtig den samme, som jeg specificerede for Geth.

For Mac-brugere

Det er lidt enklere for MacOS, fordi chaindata downloades automatisk til biblioteket og ikke skjules for os. Så vi behøver ikke at specificere datakataloget.

Ikke desto mindre anbefaler jeg at oprette en scriptfil for at gøre det lettere at køre Geth og Ethereum Wallet.

Bemærk: Geth skal løbe før Ethereum Wallet .

At køre Ethereum Wallet alene starter automatisk synkroniseringsprocessen, da den automatisk kører en Geth-klient i baggrunden. Dette er brugervenligt, men aktiverer ikke de RPC-tjenester, vi vil bruge. Således vil vi sikre, at RPC er aktiveret i både vores Geth- og Ethereum Wallet-udførelse.

Et par noter

  1. Synkroniseringsprocessen er meget lang og kan tage op til 2-3 dage. Vær tålmodig og overvej at lade din computer være tændt natten over.
  2. Synkroniseringshastigheden afhænger af din internethastighed, peers count og skrivehastighed på dit lagerdrev.
  3. Da dataene er gemt i blokke og sammenkædet, kan korruption i en blok ødelægge hele chaindata. Dette kan potentielt spilde din indsats i ventedage på, at noden synkroniseres. Derfor er det meget vigtigt at lukke din Geth ordentligt. I visse tilfælde vil du muligvis tilbageføre. Men forebyggelse er bedre end helbredelse her.
  4. Statuslinjen på din Ethereum Wallet er IKKE nøjagtig. At stole på det vil give dig en masse angst og frustration.
  5. Geth kører på port 30303 for ekstern lytning.
  6. Standardporten, der bruges til intern kommunikation, for eksempel mellem din tegnebog og Geth, er 8545.

Sørg for, at din port til Geth-klienten er åbnet

Det er virkelig vigtigt at sikre, at forbindelsen til din Geth-klient ikke er begrænset. En kæmpe hovedpine, jeg stødte på, var at lade min firewall begrænse antallet af forbindelser, jeg kunne have gennem Geth-klienten.

Du kan få øje på dette problem ved at se på antallet af jævnaldrende . Hvis det forbliver vedvarende lavt ved ca. 1-3 jævnaldrende (i mindst en halv time), er der en god chance for, at din forbindelse er begrænset. En sund rækkevidde er over 5 jævnaldrende.

MacOS-brugere

Når du kører Geth, skal der være en meddelelse om, at du tillader forbindelse. Nå, selvfølgelig, klik på “Tillad.

For at kontrollere, gå til Systemindstillinger> System og privatliv.

Under Firewall fane, skal du klikke på Firewall indstillinger .

Windows-brugere

For at åbne din port skal du gå til Kontrolpanel> System og sikkerhed> Windows defender firewall.

Klik på Avancerede indstillinger . Klik på Indgående regler på sidepanelet .

De indgående porte, du vil åbne, er TCP og UDP 30303. Så jeg oprettede en regel til TCP 30303 og en anden til UDP 30303.

Du skal muligvis også åbne dine udgående porte til TCP 30303.

Bemærk, at enhver tredjeparts firewall / antivirus muligvis også begrænser dine forbindelser, så sørg for at konfigurere det i overensstemmelse hermed.

Vedhæft dig til Geth

For at hente flere oplysninger om din node kan du vedhæfte til Geth-klienten og udføre kommandoer med den ved hjælp af RPC-tjenesterne.

Her er en enkel måde at kontrollere din synkroniseringsstatus på: vedhæft dig til klienten ved at indtaste følgende kommando på en separat terminal / konsol.

geth attach //127.0.0.1:8545

Igen vil du muligvis gemme det i en batch / script-fil for din egen bekvemmelighed.

Når du har kørt kommandoen, skal du se noget som dette.

Skriv, web3.ethog du skal se en masse information. For at hente specifikke oplysninger om synkronisering skal du skrive i web3.eth.syncingstedet.

Som du kan se, er statuslinjen øverst på Ethereum Wallet kun en sammenligning mellem den højeste og den nuværende blok . Da highestBlock kendt for din computer ikke kan være den egentlige højeste blok, kan statuslinjen ikke afspejler de reelle fremskridt.

Faktisk vil den højeste Blok og kendte Stater fortsat stige, når du synkroniserer dine noder.

Nogle sidste punkter

Da teknologien ændrer sig hurtigt, skal du altid bruge den stabile version af klienten og tegnebogen for at undgå at give dig selv mere hovedpine.

Bemærk også, at der altid er en løsning på ethvert af de problemer, du står over for. Når du har problemer med synkronisering, kan du prøve at søge efter løsninger, da du sandsynligvis ikke er den første, der står over for det samme problem.

Og husk altid dig selv, at du ikke behøver at synkronisere en node for at udvikle en smart kontrakt. Dette hjælper kun med at lette din forståelse af miljøet såvel som din udviklingsproces. Så slå ikke dig selv op over det, hvis du støder på problemer så tidligt i udviklingsprocessen.

For flere af sådanne artikler, følg mig eller besøg mit websted - En udviklers perspektiv.