de Zack

Cum să sincronizezi un nod Ethereum fără a face greșelile pe care le-am făcut

Cum sa sincronizezi un nod Ethereum fara a face greselile

Când am început să mă dezvolt pe platforma Ethereum, sincronizarea unui nod a fost unul dintre primele lucruri pe care le-am făcut. Fără nimeni care să mă țină de mână și nicăieri să nu consolidez toate erorile obișnuite pe care le-am întâlnit, am pierdut săptămâni doar sincronizând un nod. A fost o durere de cap atât de mare încât aproape am renunțat.

Necunoașterea terminologiei a făcut-o mai dificilă.

Așadar, în acest articol, vreau să consolidez toate erorile obișnuite cu care s-ar putea confrunta și să explic motivele din spatele fiecărui pas atunci când sincronizați un nod. Sperăm că nu veți avea o experiență timpurie atât de urâtă ca mine.

O introducere rapidă

În Ethereum, dezvoltatorii creează fragmente ale unei aplicații care rulează în rețea. Acestea sunt numite contracte inteligente. Deși le puteți implementa manual fără sincronizare cu un nod Ethereum, pe termen lung este mai convenabil ca procesul de dezvoltare să se sincronizeze (mai ales atunci când dorim să folosim cadre de dezvoltare precum Trufa).

ad-banner

Pentru a sincroniza un nod Ethereum, vom avea nevoie de următorul software:

  • Geth – Client pentru un nod Ethereum.
  • Portofel Ethereum – Interfață cu utilizatorul pentru un nod Ethereum.

Să începem.

Instalați Geth

Pentru a descărca Geth, du-te aici pentru utilizatorii de Windows. Apoi faceți clic pe butonul „Geth for Windows”.

1611670808 687 Cum sa sincronizezi un nod Ethereum fara a face greselile

Pentru utilizatorii de MacOS, vă recomand să descărcați utilizând homebrew. Puteți face acest lucru cu următoarele comenzi:

brew tap ethereum/ethereumbrew install ethereum

A se referi la Instrucțiunile lui Geth pentru mai multe detalii.

Verificați dacă Geth este instalat corect tastând geth version în terminal (MacOS) sau PowerShell (Windows).

Instalați portofelul Ethereum

GUI-ul care interacționează cu rețeaua îl numim „portofel”. Puteți găsi multe portofele diferite pentru Ethereum cu o căutare rapidă pe Google (cum ar fi Parity, Jaxx și MyEtherWallet). Personal îmi place să folosesc Ethereum Wallet. Are o interfață ușor de utilizat și sunt, de asemenea, un pic părtinitoare, deoarece este dezvoltată chiar de Ethereum.

Puteți găsi programul de instalare aici.

Notă: prefer Portofel Ethereum la Aburi. Mist este practic un browser care redă aplicații descentralizate (dApps) și site-uri web.

Pentru dezvoltarea unui contract inteligent, vom avea nevoie doar de portofelul Ethereum.

Mainnet vs Testnet

În Ethereum, există două rețele principale: mainnet și testnet.

Rețeaua principală este utilizată pentru a tranzacționa eter real. Valoarea eterului este legată de moneda reală fiduciară prin schimburi de criptomonede.

În calitate de dezvoltatori, nu vrem să rulăm teste de aplicație cu bani reali. Pentru asta este testnet-ul.

Numim testnet Ropsten.

Rulați portofelul Geth și Ethereum

Când dezvoltați un contract inteligent, ar trebui să sincronizați mai întâi testnetul. Va trebui să sincronizăm rețeaua principală doar atunci când suntem gata de implementare.

Veți avea nevoie de aproximativ 30 GB de spațiu de stocare pentru a sincroniza un testnet. Deoarece există mai multe tranzacții pe mainnet, veți avea nevoie de aproximativ 100 GB pentru a sincroniza o rețea principală.

Notă: unii spun că aveți nevoie de un spațiu de stocare SSD pentru scrierea rapidă, astfel încât sincronizarea să poată ajunge la ultimul bloc. Personal, consider că stocarea HDD este în regulă. Cu toate acestea, dacă mi s-ar da alegerea, aș folosi cu siguranță stocarea SSD.

Pentru utilizatorii de Windows

Pentru un acces ușor, vă recomand să creați un folder pentru stocarea blockchain-ului. De exemplu, „C: EthereumTestnet”.

După crearea folderului, încercați să rulați următoarea comandă:

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

Edit: Se pare că unele argumente s-au schimbat. Dacă ați întâmpinat o astfel de eroare „semnalizare furnizată, dar nedefinită: -data-dir”, încercați să schimbați numele argumentului în – datadir în schimb în data-dir.

Argumentul --testnet specifică faptul că dorim să ne sincronizăm cu rețeaua Ropsten. Astfel, pentru a sincroniza rețeaua principală, trebuie doar să scoateți argumentul --testnet și schimbați directorul de date. De exemplu:

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

--rpc argumentul activează serverul HTTP-RPC. Acest lucru ne permite să folosim anumite servicii, cum ar fi cele menționate în --rpcapi eth,web3,net,personal.

După ce introduceți comanda, ar trebui să vedeți așa ceva:

1611670809 917 Cum sa sincronizezi un nod Ethereum fara a face greselile
Geth începe.

Pentru a nu corupe blockchain-ul, mai ales după multe ore de sincronizare, ar trebui NU închideți promptul de comandă brusc. Opriți întotdeauna sincronizarea apăsând Ctrl + C și așteptați până când Geth închide programul pentru dvs.

1611670809 813 Cum sa sincronizezi un nod Ethereum fara a face greselile
După ce apăsați Ctrl + C, Geth se oprește.

Cu toate acestea, este dificil să vă amintiți toate serviciile de comandă și rpc de care aveți nevoie. De aceea vă sugerez să creați o comandă rapidă sau un fișier batch pentru a vă ajuta.

Pur și simplu creați un fișier folosind orice editor de text pe care îl aveți și salvați-l ca .băţ fişier. De exemplu, RunGethTestnet.bat (numele nu este important). Copiați și lipiți comanda în fișier și salvați-o. Data viitoare când trebuie să rulați Geth pentru Ropsten, trebuie doar să faceți dublu clic pe fișier.

După ce am rulat Geth, trebuie să rulăm portofelul Ethereum. Deoarece dorim ca interfața să localizeze locația exactă în care ne-am sincronizat fișierele folosind Geth, o executăm din consolă.

Similar cu Geth, am salvat un fișier batch și pentru acesta cu o comandă de exemplu, cum ar fi cea de mai jos:

1611670809 713 Cum sa sincronizezi un nod Ethereum fara a face greselile

Rețineți că comanda dvs. ar putea arăta puțin diferită de a mea, deoarece puteți stoca aplicația într-un alt director.

Alternativ, puteți adăuga aplicația la calea dvs.

Argumentul --node-datadir="C:EthereumTestnet" afirmă unde mi-am stocat chaindata, care este exact aceeași pe care am specificat-o pentru Geth.

Pentru utilizatorii de Mac

Este ușor mai simplu pentru MacOS, deoarece chaindata este descărcată automat în bibliotecă și nu ascunsă de noi. Deci, nu va trebui să specificăm directorul de date.

Cu toate acestea, vă recomand să creați un fișier script pentru a ușura rularea Geth și Ethereum Wallet.

1611670809 360 Cum sa sincronizezi un nod Ethereum fara a face greselile
Comanda Geth pentru testnet
1611670810 434 Cum sa sincronizezi un nod Ethereum fara a face greselile
Comandă pentru a rula Ethereum Wallet

Notă: Geth trebuie să alerge înainte de Ethereum Wallet.

Rularea Ethereum Wallet singur va porni automat procesul de sincronizare, deoarece va rula automat un client Geth în fundal. Acesta este ușor de utilizat, dar nu permite serviciile RPC pe care dorim să le folosim. Astfel, dorim să ne asigurăm că RPC este activat atât în ​​executarea portofelului nostru Geth, cât și a celui Ethereum.

Câteva note

  1. Procesul de sincronizare este foarte lung și poate dura până la 2-3 zile. Vă rugăm să aveți răbdare și să vă gândiți să lăsați computerul pornit peste noapte.
  2. Viteza de sincronizare depinde de viteza dvs. de internet, de numărul de colegi și de viteza de scriere a unității de stocare.
  3. Deoarece datele sunt stocate în blocuri și legate între ele, corupția într-un bloc poate corupe întreaga chaindată. Acest lucru vă poate pierde efortul în zilele de așteptare pentru ca nodul să se sincronizeze. Prin urmare, este foarte important să vă închideți corect Geth. În anumite cazuri, s-ar putea să doriți revenire. Dar prevenirea este mai bună decât vindecarea aici.
  4. Bara de progres pe portofelul dvs. Ethereum este NU exact. Bazându-vă pe acesta vă va oferi multă anxietate și frustrare.
  5. Geth rulează pe portul 30303 pentru ascultare externă.
  6. Portul implicit utilizat pentru comunicarea internă, de exemplu între portofelul dvs. și Geth, este 8545.

Asigurați-vă că portul dvs. către clientul Geth este deschis

Este foarte important să vă asigurați că conexiunea cu clientul dvs. Geth nu este limitată. O durere de cap uriașă pe care am întâlnit-o a fost să-mi las firewall-ul să limiteze numărul de conexiuni pe care le puteam avea prin intermediul clientului Geth.

Puteți observa această problemă uitându-vă la colegii contează. Dacă rămâne constant scăzut la aproximativ 1-3 colegi (cel puțin o jumătate de oră), există șanse mari ca conexiunea dvs. să fie limitată. O gamă sănătoasă este peste 5 colegi.

Utilizatori MacOS

Când rulați Geth, ar trebui să existe o notificare pentru a permite conexiunea. Ei bine, desigur, faceți clic pe „Permiteți.

Pentru a verifica, accesați Preferințe sistem> Sistem și confidențialitate.

Sub Paravan de protecție fila, faceți clic pe Opțiuni firewall.

Cum sa sincronizezi un nod Ethereum fara a face greselile

Utilizatori Windows

Pentru a vă deschide portul, accesați Panoul de control> Sistem și securitate> Paravan de protecție Windows.

Click pe Setari avansate. În panoul lateral, faceți clic pe Reguli de intrare.

1611670810 799 Cum sa sincronizezi un nod Ethereum fara a face greselile
1611670810 836 Cum sa sincronizezi un nod Ethereum fara a face greselile

Porturile de intrare pe care doriți să le deschideți sunt TCP și UDP 30303. Așa că am creat o regulă pentru TCP 30303 și alta pentru UDP 30303.

Poate fi necesar să vă deschideți și porturile de ieșire pentru TCP 30303.

Rețineți că orice firewall / antivirus terță parte ar putea limita conexiunile dvs., așa că asigurați-vă că îl configurați în consecință.

Atașează-l pe Geth

Pentru a prelua mai multe informații despre nodul dvs., vă puteți atașa la clientul Geth și puteți executa comenzi folosind serviciile RPC.

Iată o modalitate simplă de a vă verifica starea de sincronizare: atașați-vă clientului introducând următoarea comandă pe un terminal / consolă separată.

geth attach http://127.0.0.1:8545

Din nou, s-ar putea să doriți să-l stocați într-un fișier batch / script pentru confortul dvs.

După executarea comenzii, ar trebui să vedeți așa ceva.

1611670811 479 Cum sa sincronizezi un nod Ethereum fara a face greselile

Tip web3.eth și ar trebui să vedeți multe informații. Pentru a prelua informații specifice despre sincronizare, tastați web3.eth.syncing in schimb.

1611670811 509 Cum sa sincronizezi un nod Ethereum fara a face greselile

După cum puteți vedea, bara de progres găsită în partea de sus a portofelului Ethereum este doar o comparație între maximumBlock si currentBlock. Dupa cum maximumBlock cunoscut de computerul dvs. s-ar putea să nu fie blocul cel mai înalt, bara de progres ar putea să nu reflecte progresul real.

De fapt, maximumBlock și state cunoscute va continua să crească pe măsură ce vă sincronizați nodurile.

Câteva puncte finale

Deoarece tehnologia se schimbă rapid, utilizați întotdeauna versiunea stabilă a clientului și a portofelului pentru a evita să vă dați mai multe dureri de cap.

De asemenea, rețineți că există întotdeauna o soluție pentru oricare dintre problemele cu care vă confruntați. Când vă confruntați cu o problemă de sincronizare, puteți încerca să căutați soluții, deoarece probabil că nu sunteți primul care se confruntă cu aceeași problemă.

Și amintiți-vă întotdeauna că nu este nevoie să sincronizați un nod pentru a dezvolta un contract inteligent. Acest lucru vă ajută doar să vă faciliteze înțelegerea mediului, precum și procesul de dezvoltare. Așadar, nu vă învingeți dacă întâmpinați probleme atât de devreme în procesul de dezvoltare.

Pentru mai multe astfel de articole, urmați-mă sau vizitați site-ul meu – Perspectiva unui dezvoltator.