Πώς να συγχρονίσετε έναν κόμβο Ethereum χωρίς να κάνω τα λάθη που έκανα

Όταν άρχισα να αναπτύσσω για πρώτη φορά στην πλατφόρμα Ethereum, ο συγχρονισμός ενός κόμβου ήταν ένα από τα πρώτα πράγματα που έκανα. Χωρίς κανέναν να κρατάω το χέρι μου και πουθενά για να ενοποιήσω όλα τα κοινά λάθη που αντιμετώπισα, σπατάλησα εβδομάδες απλώς συγχρονίζοντας έναν κόμβο. Ήταν τόσο πονοκέφαλος που σχεδόν σταμάτησα.

Η μη γνώση της ορολογίας το έκανε πιο δύσκολο.

Έτσι, σε αυτό το άρθρο, θέλω να ενοποιήσω όλα τα κοινά σφάλματα που ενδέχεται να αντιμετωπίσετε και να εξηγήσω τους λόγους πίσω από κάθε βήμα κατά το συγχρονισμό ενός κόμβου. Ας ελπίσουμε ότι δεν θα έχετε μια τόσο άσχημη πρώιμη εμπειρία όπως εγώ.

Μια γρήγορη εισαγωγή

Στο Ethereum, οι προγραμματιστές δημιουργούν κομμάτια μιας εφαρμογής που εκτελείται στο δίκτυο. Αυτά ονομάζονται έξυπνες συμβάσεις . Παρόλο που μπορείτε να τα αναπτύξετε χειροκίνητα χωρίς συγχρονισμό σε κόμβο Ethereum, μακροπρόθεσμα είναι πιο βολικό για συγχρονισμό της διαδικασίας ανάπτυξης (ειδικά όταν θέλουμε να χρησιμοποιήσουμε πλαίσια ανάπτυξης όπως το Truffle).

Για να συγχρονίσουμε έναν κόμβο Ethereum, θα χρειαζόμαστε το ακόλουθο λογισμικό:

  • Geth - Πελάτης για κόμβο Ethereum.
  • Πορτοφόλι Ethereum - Διεπαφή χρήστη για κόμβο Ethereum.

Ας αρχίσουμε.

Εγκαταστήστε το Geth

Για λήψη του Geth, μεταβείτε εδώ για χρήστες Windows. Στη συνέχεια, κάντε κλικ στο κουμπί "Geth για Windows".

Για χρήστες MacOS, σας συνιστούμε να κάνετε λήψη χρησιμοποιώντας homebrew. Μπορείτε να το κάνετε με τις ακόλουθες εντολές:

brew tap ethereum/ethereumbrew install ethereum

Ανατρέξτε στις οδηγίες του Geth για περισσότερες λεπτομέρειες.

Βεβαιωθείτε ότι το Geth έχει εγκατασταθεί σωστά πληκτρολογώντας geth versionτο τερματικό (MacOS) ή το PowerShell (Windows).

Εγκαταστήστε το Ethereum Wallet

Καλούμε το GUI που αλληλεπιδρά με το δίκτυο το «πορτοφόλι». Μπορείτε να βρείτε πολλά διαφορετικά πορτοφόλια για το Ethereum με μια γρήγορη αναζήτηση στο Google (όπως Parity, Jaxx και MyEtherWallet). Προσωπικά μου αρέσει να χρησιμοποιώ το Ethereum Wallet. Έχει μια φιλική προς το χρήστη διεπαφή και είμαι επίσης λίγο προκατειλημμένος, επειδή αναπτύχθηκε από την ίδια την Ethereum

Μπορείτε να βρείτε το πρόγραμμα εγκατάστασης εδώ.

Σημείωση: Προτιμώ το Ethereum Wallet από το Mist . Το Mist είναι βασικά ένα πρόγραμμα περιήγησης που παρέχει αποκεντρωμένες εφαρμογές (dApps) και ιστότοπους.

Για την ανάπτυξη ενός έξυπνου συμβολαίου, θα χρειαζόμαστε μόνο το πορτοφόλι Ethereum.

Mainnet εναντίον Testnet

Στο Ethereum, υπάρχουν δύο κύρια δίκτυα: το mainnet και το testnet.

Το mainnet χρησιμοποιείται για τη συναλλαγή του πραγματικού Ether. Η αξία του Ether συνδέεται με το πραγματικό νόμισμα fiat μέσω ανταλλαγών κρυπτονομισμάτων.

Ως προγραμματιστές, δεν θέλουμε να εκτελέσουμε δοκιμές εφαρμογών με πραγματικά χρήματα. Αυτό είναι το testnet.

Καλούμε το testnet Ropsten .

Εκτελέστε το πορτοφόλι Geth και Ethereum

Όταν αναπτύσσετε ένα έξυπνο συμβόλαιο, θα πρέπει πρώτα να συγχρονίσετε το testnet. Θα χρειαστεί να συγχρονίσουμε το mainnet μόνο όταν είμαστε έτοιμοι να αναπτύξουμε.

Θα χρειαστείτε περίπου 30 GB αποθηκευτικού χώρου για να συγχρονίσετε ένα testnet. Δεδομένου ότι υπάρχουν περισσότερες συναλλαγές στο mainnet, θα χρειαστείτε περίπου 100GB για να συγχρονίσετε ένα mainnet.

Σημείωση: ορισμένοι λένε ότι χρειάζεστε χώρο αποθήκευσης SSD για γρήγορη εγγραφή, έτσι ώστε ο συγχρονισμός να μπορεί να καλύψει το τελευταίο μπλοκ. Προσωπικά, θεωρώ ότι ο χώρος αποθήκευσης HDD είναι εντάξει. Ωστόσο, εάν μου δοθεί η επιλογή, θα χρησιμοποιούσα σίγουρα SSD storage.

Για χρήστες Windows

Για εύκολη πρόσβαση, σας προτείνω να δημιουργήσετε ένα φάκελο για να αποθηκεύσετε το blockchain. Για παράδειγμα, "C: \ EthereumTestnet".

Αφού δημιουργήσετε το φάκελο, δοκιμάστε να εκτελέσετε την ακόλουθη εντολή:

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

Επεξεργασία: Φαίνεται ότι άλλαξαν επιχειρήματα. Εάν αντιμετωπίσατε τέτοιο σφάλμα "η σημαία παρέχεται αλλά δεν ορίζεται: -data-dir", δοκιμάστε να αλλάξετε το όνομα του ορίσματος σε - datadir αντί για data-dir.

Το όρισμα --testnetκαθορίζει ότι θέλουμε να συγχρονίσουμε με το δίκτυο Ropsten. Έτσι, για να συγχρονίσετε το mainnet, απλά πρέπει να βγείτε από το επιχείρημα --testnetκαι να αλλάξετε τον κατάλογο δεδομένων. Για παράδειγμα:

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

Το --rpcόρισμα ενεργοποιεί τον διακομιστή HTTP-RPC. Αυτό μας επιτρέπει να χρησιμοποιούμε ορισμένες υπηρεσίες, όπως αυτό που αναφέρεται στο --rpcapi eth,web3,net,personal.

Αφού εισαγάγετε την εντολή, θα πρέπει να δείτε κάτι τέτοιο:

Για να μην καταστρέψετε το blockchain, ειδικά μετά από πολλές ώρες συγχρονισμού, ΔΕΝ πρέπει να κλείσετε απότομα τη γραμμή εντολών. Σταματήστε πάντα τον συγχρονισμό πατώντας Ctrl + C και περιμένετε έως ότου ο Geth τερματίσει το πρόγραμμα για εσάς.

Ωστόσο, είναι δύσκολο να θυμάστε όλες τις υπηρεσίες εντολών και rpc που χρειάζεστε. Γι 'αυτό προτείνω να δημιουργήσετε μια συντόμευση ή ένα αρχείο δέσμης για να σας βοηθήσουμε.

Απλώς δημιουργήστε ένα αρχείο χρησιμοποιώντας οποιοδήποτε πρόγραμμα επεξεργασίας κειμένου έχετε και αποθηκεύστε το ως αρχείο .bat . Για παράδειγμα, RunGethTestnet.bat (το όνομα δεν είναι σημαντικό). Αντιγράψτε και επικολλήστε την εντολή στο αρχείο και αποθηκεύστε την. Την επόμενη φορά που θα χρειαστεί να εκτελέσετε το Geth για Ropsten, απλώς κάντε διπλό κλικ στο αρχείο.

Αφού τρέξουμε το Geth, πρέπει να τρέξουμε το Ethereum Wallet. Καθώς θέλουμε η διεπαφή να εντοπίσει την ακριβή τοποθεσία όπου συγχρονίζαμε τα αρχεία μας χρησιμοποιώντας το Geth, το εκτελούμε από την κονσόλα.

Παρόμοια με το Geth, έσωσα ένα αρχείο δέσμης για αυτό και με μια εντολή παραδείγματος, όπως η παρακάτω:

Σημειώστε ότι η εντολή σας μπορεί να φαίνεται λίγο διαφορετική από τη δική μου, καθώς ενδέχεται να αποθηκεύσετε την εφαρμογή σας σε διαφορετικό κατάλογο.

Εναλλακτικά, μπορείτε να προσθέσετε την εφαρμογή στη διαδρομή σας.

Το όρισμα --node-datadir="C:\EthereumTestnet"δηλώνει πού αποθηκεύτηκα τα δεδομένα αλυσίδων μου, τα οποία είναι ακριβώς τα ίδια που έχω καθορίσει για το Geth.

Για χρήστες Mac

Είναι ελαφρώς απλούστερο για το MacOS, επειδή τα αλυσίδες δεδομένων λαμβάνονται αυτόματα στη βιβλιοθήκη και δεν είναι κρυμμένα από εμάς. Επομένως, δεν θα χρειαστεί να καθορίσουμε τον κατάλογο δεδομένων.

Ωστόσο, προτείνω να δημιουργήσετε ένα αρχείο σεναρίου για να διευκολύνετε την εκτέλεση του Geth και του Ethereum Wallet.

Σημείωση: Το Geth πρέπει να τρέξει πριν από το Ethereum Wallet .

Η εκτέλεση του Ethereum Wallet μόνο του θα ξεκινήσει αυτόματα τη διαδικασία συγχρονισμού καθώς θα εκτελεί αυτόματα έναν πελάτη Geth στο παρασκήνιο. Αυτό είναι φιλικό προς το χρήστη, αλλά δεν επιτρέπει τις υπηρεσίες RPC που θέλουμε να χρησιμοποιήσουμε. Έτσι, θέλουμε να διασφαλίσουμε ότι το RPC είναι ενεργοποιημένο τόσο στην εκτέλεση του Geth όσο και στο Ethereum Wallet.

Μερικές σημειώσεις

  1. Η διαδικασία συγχρονισμού είναι πολύ μεγάλη και μπορεί να διαρκέσει έως 2-3 ημέρες. Έχετε υπομονή και σκεφτείτε να αφήσετε τον υπολογιστή σας ενεργοποιημένο όλη τη νύχτα.
  2. Η ταχύτητα συγχρονισμού εξαρτάται από την ταχύτητα του διαδικτύου, τον αριθμό των συνομηλίκων και την ταχύτητα εγγραφής της μονάδας αποθήκευσης.
  3. Καθώς τα δεδομένα αποθηκεύονται σε μπλοκ και συνδέονται μεταξύ τους, η καταστροφή σε ένα μπλοκ μπορεί να καταστρέψει ολόκληρα τα αλυσίδα δεδομένων. Αυτό μπορεί δυνητικά να χάσει την προσπάθειά σας σε ημέρες αναμονής για τον συγχρονισμό του κόμβου. Επομένως, είναι πολύ σημαντικό να κλείσετε σωστά το Geth σας. Σε ορισμένες περιπτώσεις, μπορεί να θέλετε να κάνετε επαναφορά. Αλλά η πρόληψη είναι καλύτερη από τη θεραπεία εδώ.
  4. Η γραμμή προόδου στο Πορτοφόλι Ethereum ΔΕΝ είναι ακριβής. Στηριζόμενος σε αυτό θα σας δώσει πολύ άγχος και απογοήτευση.
  5. Το Geth τρέχει στη θύρα 30303 για εξωτερική ακρόαση.
  6. Η προεπιλεγμένη θύρα που χρησιμοποιείται για εσωτερική επικοινωνία, για παράδειγμα μεταξύ του πορτοφολιού σας και του Geth, είναι 8545.

Βεβαιωθείτε ότι η θύρα σας στον πελάτη Geth είναι ανοιχτή

Είναι πολύ σημαντικό να βεβαιωθείτε ότι η σύνδεση με τον πελάτη Geth δεν είναι περιορισμένη. Ένας τεράστιος πονοκέφαλος που αντιμετώπισα ήταν να αφήσω το τείχος προστασίας μου να περιορίσει τον αριθμό των συνδέσεων που θα μπορούσα να έχω μέσω του πελάτη Geth.

Μπορείτε να εντοπίσετε αυτό το πρόβλημα κοιτάζοντας τον αριθμό των συνομηλίκων . Αν παραμείνει σταθερά χαμηλό σε περίπου 1-3 άτομα (για τουλάχιστον μισή ώρα), υπάρχει καλή πιθανότητα η σύνδεσή σας να είναι περιορισμένη. Ένα υγιές εύρος είναι άνω των 5 συνομηλίκων.

Χρήστες MacOS

Όταν εκτελείτε το Geth, θα πρέπει να υπάρχει ειδοποίηση για να επιτρέψετε τη σύνδεση. Φυσικά, κάντε κλικ στο "Να επιτρέπεται.

Για έλεγχο, μεταβείτε στις Προτιμήσεις συστήματος> Σύστημα και απόρρητο.

Στην καρτέλα Τείχος προστασίας , κάντε κλικ στο Επιλογές τείχους προστασίας .

Χρήστες των Windows

Για να ανοίξετε τη θύρα σας, μεταβείτε στον Πίνακα ελέγχου> Σύστημα και ασφάλεια> Τείχος προστασίας αμυντικού συστήματος των Windows.

Κάντε κλικ στο Advanced ρυθμίσεις . Στο πλαϊνό πλαίσιο, κάντε κλικ στο Inbound Rules .

Οι εισερχόμενες θύρες που θέλετε να ανοίξετε είναι TCP και UDP 30303. Έτσι, δημιούργησα έναν κανόνα για το TCP 30303 και έναν άλλο για το UDP 30303.

Ίσως χρειαστεί να ανοίξετε και τις εξερχόμενες θύρες σας για το TCP 30303.

Λάβετε υπόψη ότι οποιοδήποτε τείχος προστασίας / ιούς τρίτων ενδέχεται επίσης να περιορίσει τις συνδέσεις σας, οπότε φροντίστε να το ρυθμίσετε ανάλογα.

Συνδέστε στο Geth

Για να ανακτήσετε περισσότερες πληροφορίες σχετικά με τον κόμβο σας, μπορείτε να επισυνάψετε στον πελάτη Geth και να εκτελέσετε εντολές μαζί του χρησιμοποιώντας τις υπηρεσίες RPC.

Εδώ είναι ένας απλός τρόπος για να ελέγξετε την κατάσταση συγχρονισμού σας: συνδέστε τον πελάτη εισάγοντας την ακόλουθη εντολή σε ξεχωριστό τερματικό / κονσόλα.

geth attach //127.0.0.1:8545

Και πάλι, ίσως θελήσετε να το αποθηκεύσετε σε ένα αρχείο δέσμης / δέσμης ενεργειών για δική σας ευκολία.

Αφού εκτελέσετε την εντολή, θα πρέπει να δείτε κάτι τέτοιο.

Πληκτρολογήστε web3.ethκαι θα πρέπει να δείτε πολλές πληροφορίες. Για να ανακτήσετε συγκεκριμένες πληροφορίες σχετικά με το συγχρονισμό, πληκτρολογήστε web3.eth.syncingαντ 'αυτού.

Όπως μπορείτε να δείτε, η γραμμή προόδου που βρίσκεται στην κορυφή του πορτοφολιού Ethereum είναι απλώς μια σύγκριση μεταξύ του υψηλότερου μπλοκ και του τρέχοντος μπλοκ . Καθώς η highestBlock γνωστό ότι ο υπολογιστής σας δεν μπορεί να είναι η πραγματική υψηλότερο μπλοκ, η γραμμή προόδου μπορεί να μην αντικατοπτρίζει την πραγματική πρόοδο.

Στην πραγματικότητα, το υψηλότερο μπλοκ και τα γνωστά κράτη θα συνεχίσουν να αυξάνονται καθώς συγχρονίζετε τους κόμβους σας.

Μερικά τελικά σημεία

Καθώς η τεχνολογία αλλάζει ταχύτατα, χρησιμοποιήστε πάντα τη σταθερή έκδοση του πελάτη και του πορτοφολιού για να αποφύγετε να προκαλέσετε περισσότερους πονοκεφάλους.

Επίσης, σημειώστε ότι υπάρχει πάντα μια λύση για οποιοδήποτε από τα προβλήματα που αντιμετωπίζετε. Όταν αντιμετωπίζετε πρόβλημα συγχρονισμού, μπορείτε να προσπαθήσετε να αναζητήσετε λύσεις, καθώς πιθανότατα δεν είστε ο πρώτος που αντιμετωπίζει το ίδιο πρόβλημα.

Και να θυμάστε πάντα ότι δεν χρειάζεται να συγχρονίσετε έναν κόμβο για να αναπτύξετε ένα έξυπνο συμβόλαιο. Κάτι τέτοιο βοηθά μόνο στη διευκόλυνση της κατανόησης του περιβάλλοντος καθώς και της διαδικασίας ανάπτυξης. Λοιπόν, μην ξεπεράσετε τον εαυτό σας εάν αντιμετωπίσετε προβλήματα τόσο νωρίς στη διαδικασία ανάπτυξης.

Για περισσότερα από τέτοια άρθρα, ακολουθήστε με ή επισκεφθείτε τον ιστότοπό μου - Προοπτική ενός προγραμματιστή.