Επίπεδο δικτύωσης
Το Ethereum είναι ένα δίκτυο peer-to-peer με χιλιάδες κόμβους που πρέπει να μπορούν να επικοινωνούν μεταξύ τους χρησιμοποιώντας τυποποιημένα πρωτόκολλα. Το "επίπεδο δικτύωσης" είναι η στοίβα πρωτοκόλλων που επιτρέπουν σε αυτούς τους κόμβους να βρίσκουν ο ένας τον άλλον και να ανταλλάσσουν πληροφορίες. Αυτό περιλαμβάνει τη "διασπορά" πληροφοριών (επικοινωνία ένας προς πολλούς) μέσω του δικτύου καθώς και την ανταλλαγή αιτημάτων και απαντήσεων μεταξύ συγκεκριμένων κόμβων (επικοινωνία ένας προς έναν). Κάθε κόμβος πρέπει να συμμορφώνεται με συγκεκριμένους κανόνες δικτύωσης για να διασφαλίσει ότι στέλνει και λαμβάνει τις σωστές πληροφορίες.
Υπάρχουν δύο μέρη στο λογισμικό πελάτη (πελάτες εκτέλεσης και πελάτες συναίνεσης), καθένα με τη δική του ξεχωριστή στοίβα δικτύωσης. Εκτός από την επικοινωνία με άλλους κόμβους Ethereum, οι πελάτες εκτέλεσης και συναίνεσης πρέπει να επικοινωνούν μεταξύ τους. Αυτή η σελίδα δίνει μια εισαγωγική εξήγηση των πρωτοκόλλων που επιτρέπουν αυτήν την επικοινωνία.
Οι πελάτες εκτέλεσης διασπείρουν συναλλαγές μέσω του δικτύου peer-to-peer εκτέλεσης. Αυτό απαιτεί κρυπτογραφημένη επικοινωνία μεταξύ πιστοποιημένων ομότιμων. Όταν επιλεγεί ένας επικυρωτής για να προτείνει ένα μπλοκ, οι συναλλαγές από το τοπικό pool συναλλαγών του κόμβου θα μεταβιβαστούν στους πελάτες συναίνεσης μέσω μιας τοπικής σύνδεσης RPC, η οποία θα συσκευαστεί σε μπλοκ Beacon. Οι πελάτες συναίνεσης θα διασπείρουν στη συνέχεια τα μπλοκ Beacon μέσω του δικτύου τους p2p. Αυτό απαιτεί δύο ξεχωριστά δίκτυα p2p: ένα που συνδέει τους πελάτες εκτέλεσης για τη διασπορά συναλλαγών και ένα που συνδέει τους πελάτες συναίνεσης για τη διασπορά μπλοκ.
Προαπαιτούμενα
Μερικές γνώσεις για τους κόμβους και τους πελάτες Ethereum θα είναι χρήσιμες για την κατανόηση αυτής της σελίδας.
Το επίπεδο εκτέλεσης
Τα πρωτόκολλα δικτύωσης του επιπέδου εκτέλεσης χωρίζονται σε δύο στοίβες:
-
Τη στοίβα ανακάλυψης: χτισμένη πάνω από το UDP και επιτρέπει σε έναν νέο κόμβο να βρει ομότιμους για σύνδεση.
-
Τη στοίβα DevP2P: βρίσκεται πάνω από το TCP και επιτρέπει στους κόμβους να ανταλλάσσουν πληροφορίες.
Και οι δύο στοίβες λειτουργούν παράλληλα. Η στοίβα ανακάλυψης τροφοδοτεί νέους συμμετέχοντες δικτύου στο δίκτυο, και η στοίβα DevP2P επιτρέπει τις αλληλεπιδράσεις τους.
Εξερεύνηση
Η ανακάλυψη είναι η διαδικασία εύρεσης άλλων κόμβων στο δίκτυο. Αυτό ξεκινά με τη χρήση ενός μικρού συνόλου κόμβων εκκίνησης (κόμβοι των οποίων οι διευθύνσεις είναι ενσωματωμένες στον πελάτη, ώστε να μπορούν να βρεθούν αμέσως και να συνδέσουν τον πελάτη με ομότιμους). Αυτοί οι κόμβοι εκκίνησης υπάρχουν μόνο για να εισαγάγουν έναν νέο κόμβο σε ένα σύνολο ομότιμων καθώς αυτή είναι η μόνη τους λειτουργία, δε συμμετέχουν σε κανονικές εργασίες πελάτη όπως ο συγχρονισμός της αλυσίδας και χρησιμοποιούνται μόνο την πρώτη φορά που ένας πελάτης ξεκινά.
Το πρωτόκολλο που χρησιμοποιείται για τις αλληλεπιδράσεις κόμβου-bootnode είναι μια τροποποιημένη μορφή του Kademlia που χρησιμοποιεί έναν κατανεμημένο πίνακα κατακερματισμού για να μοιράζεται λίστες κόμβων. Κάθε κόμβος έχει μια έκδοση αυτού του πίνακα που περιέχει τις πληροφορίες που απαιτούνται για τη σύνδεση με τους πλησιέστερους ομότιμους του. Αυτή η "εγγύτητα" δεν είναι γεωγραφική, η απόσταση ορίζεται από την ομοιότητα του αναγνωριστικού του κόμβου. Ο πίνακας κάθε κόμβου ανανεώνεται τακτικά ως μέτρο ασφαλείας. Για παράδειγμα, στο πρωτόκολλο ανακάλυψης Discv5, οι κόμβοι μπορούν επίσης να στέλνουν "διαφημίσεις" που εμφανίζουν τα υπο πρωτόκολλα που υποστηρίζει ο πελάτης, επιτρέποντας στους ομότιμους να διαπραγματευτούν σχετικά με τα πρωτόκολλα που μπορούν και οι δύο να χρησιμοποιήσουν για επικοινωνία.
Η ανακάλυψη ξεκινά με ένα παιχνίδι PING-PONG. Ένα επιτυχημένο PING-PONG "δένει" τον νέο κόμβο με ένα bootnode. Το αρχικό μήνυμα που ειδοποιεί ένα bootnode για την ύπαρξη ενός νέου κόμβου που εισέρχεται στο δίκτυο είναι ένα PING
. Αυτό το PING
περιλαμβάνει κατακερματισμένες πληροφορίες σχετικά με τον νέο κόμβο, το bootnode και μια χρονική σφραγίδα λήξης. Το bootnode λαμβάνει το PING
και επιστρέφει ένα PONG
που περιέχει τον κατακερματισμό PING
. Εάν οι κατακερματισμοί PING
και PONG
ταιριάζουν, τότε η σύνδεση μεταξύ του νέου κόμβου και του bootnode επαληθεύεται και λέγεται ότι έχουν "δεθεί".
Μόλις συνδεθεί, ο νέος κόμβος μπορεί να στείλει μια αίτηση FIND-NEIGHBOURS
στο bootnode. Τα δεδομένα που επιστρέφονται από το bootnode περιλαμβάνουν μια λίστα ομότιμων με τους οποίους μπορεί να συνδεθεί ο νέος κόμβος. Εάν οι κόμβοι δεν είναι δεμένοι, η αίτηση FIND-NEIGHBOURS
θα αποτύχει, οπότε ο νέος κόμβος δε θα μπορεί να εισέλθει στο δίκτυο.
Μόλις ο νέος κόμβος λάβει μια λίστα γειτόνων από τον κόμβο εκκίνησης, ξεκινά μια ανταλλαγή PING-PONG με καθέναν από αυτούς. Οι επιτυχημένες ανταλλαγές PING-PONG συνδέουν τον νέο κόμβο με τους γείτονές του, επιτρέποντας την ανταλλαγή μηνυμάτων.
1start client --> connect to bootnode --> bond to bootnode --> find neighbours --> bond to neighbours
Οι πελάτες εκτέλεσης χρησιμοποιούν αυτήν τη στιγμή το πρωτόκολλο ανακάλυψης Discv4 και υπάρχει μια ενεργή προσπάθεια μετανάστευσης στο πρωτόκολλο Discv5.
ENR: Εγγραφές κόμβου Ethereum
Η εγγραφή κόμβου Ethereum (ENR) είναι ένα αντικείμενο που περιέχει τρία βασικά στοιχεία: μια υπογραφή (hash του περιεχομένου της εγγραφής που δημιουργείται σύμφωνα με κάποιο συμφωνημένο σχέδιο ταυτοποίησης), έναν αριθμό ακολουθίας που παρακολουθεί τις αλλαγές στην εγγραφή και μια αυθαίρετη λίστα ζευγών κλειδιού:τιμής. Αυτή είναι μια μελλοντική μορφή που επιτρέπει την ευκολότερη ανταλλαγή πληροφοριών ταυτοποίησης μεταξύ νέων ομότιμων και είναι η προτιμώμενη μορφή διεύθυνσης δικτύου για τους κόμβους Ethereum.
Γιατί η ανακάλυψη είναι χτισμένη στο UDP;
Το UDP δεν υποστηρίζει κανέναν έλεγχο σφαλμάτων, επαναστολή αποτυχημένων πακέτων ή δυναμικό άνοιγμα και κλείσιμο συνδέσεων - αντίθετα, πυροβολεί ένα συνεχές ρεύμα πληροφοριών σε έναν στόχο, ανεξάρτητα από το αν έχει ληφθεί με επιτυχία. Αυτή η ελάχιστη λειτουργικότητα μεταφράζεται επίσης σε ελάχιστο επιπλέον κόστος, καθιστώντας αυτό το είδος σύνδεσης πολύ γρήγορο. Για την ανακάλυψη, όπου ένας κόμβος απλά θέλει να γνωστοποιήσει την παρουσία του για να δημιουργήσει στη συνέχεια μια επίσημη σύνδεση με έναν ομότιμο, το UDP είναι επαρκές. Ωστόσο, για την υπόλοιπη στοίβα δικτύωσης, το UDP δεν είναι κατάλληλο για τον σκοπό αυτό. Η ανταλλαγή πληροφοριών μεταξύ των κόμβων είναι αρκετά περίπλοκη και επομένως χρειάζεται ένα πιο πλήρες πρωτόκολλο που μπορεί να υποστηρίξει επαναστολή, έλεγχο σφαλμάτων κ.λπ. Το πρόσθετο κόστος που σχετίζεται με το TCP αξίζει την πρόσθετη λειτουργικότητα. Επομένως, το μεγαλύτερο μέρος της στοίβας P2P λειτουργεί μέσω TCP.
DevP2P
Το DevP2P είναι από μόνο του μια ολόκληρη στοίβα πρωτοκόλλων που υλοποιεί το Ethereum για να δημιουργήσει και να διατηρήσει το δίκτυο peer-to-peer. Μετά την είσοδο νέων κόμβων στο δίκτυο, οι αλληλεπιδράσεις τους διέπονται από πρωτόκολλα στη στοίβα DevP2P. Όλα αυτά βρίσκονται πάνω από το TCP και περιλαμβάνουν το πρωτόκολλο μεταφοράς RLPx, το πρωτόκολλο καλωδίωσης και αρκετά υποπρωτόκολλα. Το RLPx είναι το πρωτόκολλο που διέπει την έναρξη, την πιστοποίηση και τη διατήρηση των συνεδριών μεταξύ των κόμβων. Το RLPx κωδικοποιεί μηνύματα χρησιμοποιώντας RLP (Recursive Length Prefix), το οποίο είναι μια πολύ αποδοτική μέθοδος κωδικοποίησης δεδομένων σε μια ελάχιστη δομή για αποστολή μεταξύ κόμβων.
Μια συνεδρία RLPx μεταξύ δύο κόμβων ξεκινά με μια αρχική κρυπτογραφημένη επικοινωνία. Αυτό περιλαμβάνει την αποστολή ενός μηνύματος auth από τον κόμβο, το οποίο στη συνέχεια επαληθεύεται από τον ομότιμο. Μετά την επιτυχή επαλήθευση, ο ομότιμος δημιουργεί ένα μήνυμα auth-acknowledgement για να επιστρέψει στον κόμβο εκκίνησης. Αυτή είναι μια διαδικασία ανταλλαγής κλειδιών που επιτρέπει στους κόμβους να επικοινωνούν ιδιωτικά και με ασφάλεια. Μια επιτυχημένη κρυπτογραφημένη επικοινωνία ενεργοποιεί και τους δύο κόμβους να στείλουν ένα μήνυμα "hello" ο ένας στον άλλο "on the wire". Το πρωτόκολλο καλωδίωσης ξεκινά με μια επιτυχή ανταλλαγή μηνυμάτων hello.
Τα μηνύματα hello περιέχουν:
- έκδοση πρωτοκόλλου
- ID πελάτη
- θύρα
- ID κόμβου
- λίστα με τα υποστηριζόμενα υπό πρωτόκολλα
Αυτές είναι οι πληροφορίες που απαιτούνται για μια επιτυχημένη αλληλεπίδραση, καθώς ορίζουν ποιες δυνατότητες μοιράζονται μεταξύ των δύο κόμβων και ρυθμίζουν την επικοινωνία. Υπάρχει μια διαδικασία διαπραγμάτευσης υπο-πρωτοκόλλου όπου συγκρίνονται οι λίστες των υπο-πρωτοκόλλων που υποστηρίζονται από κάθε κόμβο και αυτά που είναι κοινά και στους δύο κόμβους και μπορούν να χρησιμοποιηθούν στη συνεδρία.
Μαζί με τα μηνύματα hello, το πρωτόκολλο καλωδίωσης μπορεί επίσης να στείλει ένα μήνυμα "αποσύνδεσης" που δίνει προειδοποίηση σε έναν ομότιμο ότι η σύνδεση θα τερματιστεί. Το πρωτόκολλο καλωδίωσης περιλαμβάνει επίσης μηνύματα PING και PONG που αποστέλλονται περιοδικά για να διατηρηθεί ανοιχτή μια συνεδρία. Οι ανταλλαγές πρωτοκόλλου RLPx και καλωδίωσης επομένως δημιουργούν τις βάσεις της επικοινωνίας μεταξύ κόμβων, παρέχοντας τη δυνατότητα για ανταλλαγή χρήσιμων πληροφοριών σύμφωνα με ένα συγκεκριμένο υπο-πρωτόκολλο.
Δευτερεύοντα πρωτόκολλα
Το πρωτόκολλο Wire
Μόλις συνδεθούν οι ομότιμοι και ξεκινήσει μια συνεδρία RLPx, το πρωτόκολλο καλωδίωσης ορίζει τον τρόπο επικοινωνίας τους. Αρχικά, το πρωτόκολλο καλωδίωσης ορίζει τρεις κύριες εργασίες: τον συγχρονισμό αλυσίδας, τη διάδοση μπλοκ και την ανταλλαγή συναλλαγών. Ωστόσο, μόλις το Ethereum άλλαξε σε απόδειξη συμμετοχής, η διάδοση μπλοκ και ο συγχρονισμός αλυσίδας έγιναν μέρος του επιπέδου συναίνεσης. Η ανταλλαγή συναλλαγών εξακολουθεί να εμπίπτει στην αρμοδιότητα των πελατών εκτέλεσης. Η ανταλλαγή συναλλαγών αναφέρεται στην ανταλλαγή εκκρεμών συναλλαγών μεταξύ κόμβων, ώστε οι κατασκευαστές μπλοκ να μπορούν να επιλέξουν μερικές από αυτές για συμπερίληψη στο επόμενο μπλοκ. Λεπτομερείς πληροφορίες σχετικά με αυτές τις εργασίες είναι διαθέσιμες εδώ. Οι πελάτες που υποστηρίζουν αυτά τα υπο-πρωτόκολλα τα εκθέτουν μέσω του JSON-RPC.
les (light ethereum subprotocol)
Αυτό είναι ένα ελάχιστο πρωτόκολλο για το συγχρονισμό πελατών μικρού μεγέθους. Παραδοσιακά, αυτό το πρωτόκολλο έχει χρησιμοποιηθεί σπάνια επειδή απαιτούνται πλήρεις κόμβοι για να εξυπηρετήσουν δεδομένα σε πελάτες μικρού μεγέθους χωρίς να παρέχεται κίνητρο. Η προεπιλεγμένη συμπεριφορά των πελατών εκτέλεσης είναι να μην εξυπηρετούν δεδομένα ελαφρού πελάτη μέσω του les. Περισσότερες πληροφορίες είναι διαθέσιμες στις προδιαγραφές les spec.
Snap
Το πρωτόκολλο snap είναι μια προαιρετική επέκταση που επιτρέπει στους ομότιμους να ανταλλάσσουν στιγμιότυπα πρόσφατων καταστάσεων, επιτρέποντας στους ομότιμους να επαληθεύουν δεδομένα λογαριασμού και αποθήκευσης χωρίς να χρειάζεται να κατεβάσουν ενδιάμεσους κόμβους Merkle trie.
Wit (πρωτόκολλο μάρτυρα)
Το πρωτόκολλο μάρτυρα είναι μια προαιρετική επέκταση που επιτρέπει την ανταλλαγή μαρτύρων κατάστασης μεταξύ ομότιμων, βοηθώντας στο συγχρονισμό των πελατών στην κορυφή της αλυσίδας.
Whisper
Το Whisper ήταν ένα πρωτόκολλο που στοχεύει στην παροχή ασφαλούς ανταλλαγής μηνυμάτων μεταξύ ομότιμων χωρίς να γράφει καμία πληροφορία στην αλυσίδα μπλοκ. Ήταν μέρος του πρωτοκόλλου καλωδίωσης DevP2P αλλά τώρα έχει καταργηθεί. Υπάρχουν άλλα σχετικά έργα με παρόμοιους στόχους.
Το επίπεδο συναίνεσης
Οι πελάτες συναίνεσης συμμετέχουν σε ένα ξεχωριστό δίκτυο ομότιμων με διαφορετικές προδιαγραφές. Οι πελάτες συναίνεσης πρέπει να συμμετέχουν στη διάδοση μπλοκ ώστε να μπορούν να λαμβάνουν νέα μπλοκ από ομότιμους και να τα μεταδίδουν όταν είναι η σειρά τους ως προτείνων μπλοκ. Παρόμοια με το επίπεδο εκτέλεσης, αυτό απαιτεί πρώτα ένα πρωτόκολλο ανακάλυψης ώστε ένας κόμβος να μπορεί να βρει ομότιμους και να δημιουργήσει ασφαλείς συνεδρίες για ανταλλαγή μπλοκ, πιστοποιήσεων κ.λπ.
Εξερεύνηση
Παρόμοια με τους πελάτες εκτέλεσης, οι πελάτες συναίνεσης χρησιμοποιούν το discv5 μέσω UDP για την εύρεση ομότιμων κόμβων. Η υλοποίηση του discv5 στο επίπεδο συναίνεσης διαφέρει από αυτή των πελατών εκτέλεσης μόνο στο ότι περιλαμβάνει έναν προσαρμογέα που συνδέει το discv5 σε μια στοίβα libP2P, καταργώντας το DevP2P. Οι συνεδρίες RLPx του επιπέδου εκτέλεσης καταργούνται υπέρ του ασφαλούς χειρισμού καναλιού θορύβου του libP2P.
ENRs
Το ENR για τους κόμβους συναίνεσης περιλαμβάνει το δημόσιο κλειδί του κόμβου, τη διεύθυνση IP, τις θύρες UDP και TCP και δύο πεδία συγκεκριμένα για τη συναίνεση: το bitfield υποδικτύου απόδειξης και το κλειδί eth2
. Το πρώτο διευκολύνει τους κόμβους να βρίσκουν ομότιμους κόμβους που συμμετέχουν σε συγκεκριμένα υποδίκτυα ενημέρωσης. Το κλειδί eth2
περιέχει πληροφορίες σχετικά με την έκδοση της αναβάθμισης Ethereum που χρησιμοποιεί ο κόμβος, εξασφαλίζοντας ότι οι ομότιμοι συνδέονται με το σωστό Ethereum.
libP2P
Η στοίβα libP2P υποστηρίζει όλες τις επικοινωνίες μετά την ανακάλυψη. Οι πελάτες μπορούν να καλούν και να ακούν σε IPv4 και/ή IPv6 όπως ορίζεται στο ENR τους. Τα πρωτόκολλα στο επίπεδο libP2P μπορούν να υποδιαιρεθούν στους τομείς ενημέρωσης και req/resp.
Gossip
Ο τομέας ενημέρωσης περιλαμβάνει όλες τις πληροφορίες που πρέπει να εξαπλωθούν γρήγορα σε όλο το δίκτυο. Αυτό περιλαμβάνει beacon μπλοκ, αποδείξεις, πιστοποιήσεις, εξόδους και περικοπές. Αυτό μεταδίδεται χρησιμοποιώντας το libP2P gossipsub v1 και βασίζεται σε διάφορα μεταδεδομένα που αποθηκεύονται τοπικά σε κάθε κόμβο, συμπεριλαμβανομένου του μέγιστου μεγέθους των φορτίων ενημέρωσης για λήψη και μετάδοση. Λεπτομερείς πληροφορίες σχετικά με τον τομέα ενημέρωσης είναι διαθέσιμες εδώ.
Αίτηση-Απάντηση
Ο τομέας αίτησης-απάντησης περιέχει πρωτόκολλα για πελάτες που ζητούν συγκεκριμένες πληροφορίες από τους ομότιμούς τους. Παραδείγματα περιλαμβάνουν τη ζήτηση συγκεκριμένων μπλοκ Beacon που ταιριάζουν με συγκεκριμένες ρίζες hash ή μέσα σε ένα εύρος διαστημάτων. Οι απαντήσεις επιστρέφονται πάντα ως συμπιεσμένα με snappy bytes κωδικοποιημένα SSZ.
Γιατί ο πελάτης συναίνεσης προτιμά το SSZ από το RLP;
Το SSZ σημαίνει απλή σειριοποίηση. Χρησιμοποιεί σταθερές μετατοπίσεις που διευκολύνουν την αποκωδικοποίηση μεμονωμένων τμημάτων ενός κωδικοποιημένου μηνύματος χωρίς να χρειάζεται να αποκωδικοποιηθεί ολόκληρη η δομή, κάτι που είναι πολύ χρήσιμο για τον πελάτη συναίνεσης καθώς μπορεί να αρπάξει αποτελεσματικά συγκεκριμένα κομμάτια πληροφοριών από κωδικοποιημένα μηνύματα. Είναι επίσης σχεδιασμένο ειδικά για να ενσωματωθεί με πρωτόκολλα Merkle, με σχετικές αποδόσεις για τη Merkleization. Δεδομένου ότι όλες οι κατακερματισμοί στο επίπεδο συναίνεσης είναι ρίζες Merkle, αυτό οδηγεί σε μια σημαντική βελτίωση. Το SSZ εγγυάται επίσης μοναδικές αναπαραστάσεις τιμών.
Σύνδεση του πελάτη εκτέλεσης και του πελάτη συναίνεσης
Τόσο ο πελάτης συναίνεσης όσο και ο πελάτης εκτέλεσης εκτελούνται παράλληλα. Πρέπει να συνδεθούν ώστε ο πελάτης συναίνεσης να μπορεί να παρέχει οδηγίες στον πελάτη εκτέλεσης και ο πελάτης εκτέλεσης να μπορεί να μεταβιβάσει δεσμίδες συναλλαγών στον πελάτη συναίνεσης για συμπερίληψη σε μπλοκ Beacon. Η επικοινωνία μεταξύ των δύο πελατών μπορεί να επιτευχθεί χρησιμοποιώντας μια τοπική σύνδεση RPC. Ένα API γνωστό ως 'Engine-API' ορίζει τις οδηγίες που αποστέλλονται μεταξύ των δύο πελατών. Δεδομένου ότι και οι δύο πελάτες βρίσκονται πίσω από μια ενιαία ταυτότητα δικτύου, μοιράζονται ένα ENR (Ethereum node record) το οποίο περιέχει ένα ξεχωριστό κλειδί για κάθε πελάτη (κλειδί eth1 και κλειδί eth2).
Μια περίληψη της ροής ελέγχου παρουσιάζεται παρακάτω, με τη σχετική στοίβα δικτύωσης σε παρένθεση.
Όταν ο πελάτης consensus δεν είναι παραγωγός μπλοκ:
- Ο πελάτης consensus λαμβάνει ένα μπλοκ μέσω του πρωτοκόλλου ανταλλαγής κουτσομπολιού μπλοκ (consensus p2p).
- Ο πελάτης consensus προ-επαληθεύει το μπλοκ, δηλαδή διασφαλίζει ότι έφτασε από έναν έγκυρο αποστολέα με σωστά μεταδεδομένα.
- Οι συναλλαγές στο μπλοκ αποστέλλονται στο επίπεδο εκτέλεσης ως ωφέλιμο φορτίο εκτέλεσης (τοπική σύνδεση RPC).
- Το επίπεδο εκτέλεσης εκτελεί τις συναλλαγές και επικυρώνει την κατάσταση στον επικεφαλίδα του μπλοκ (δηλ. ελέγχει αν τα hash ταιριάζουν).
- Το επίπεδο εκτέλεσης διαβιβάζει τα δεδομένα επικύρωσης πίσω στο επίπεδο consensus, το μπλοκ θεωρείται πλέον επικυρωμένο (τοπική σύνδεση RPC).
- Το επίπεδο consensus προσθέτει το μπλοκ στην κορυφή του δικού του blockchain και το πιστοποιεί, μεταδίδοντας την πιστοποίηση μέσω του δικτύου (consensus p2p).
Όταν ο πελάτης συναίνεσης είναι παραγωγός μπλοκ:
- Ο πελάτης consensus λαμβάνει ειδοποίηση ότι είναι ο επόμενος παραγωγός μπλοκ (consensus p2p).
- Το επίπεδο consensus καλεί τη μέθοδο
create block
στον πελάτη εκτέλεσης (τοπική RPC). - Το επίπεδο εκτέλεσης αποκτά πρόσβαση στο mempool συναλλαγών που έχει συμπληρωθεί από το πρωτόκολλο ανταλλαγής κουτσομπολιού συναλλαγών (εκτέλεση p2p).
- Ο πελάτης εκτέλεσης ομαδοποιεί τις συναλλαγές σε ένα μπλοκ, εκτελεί τις συναλλαγές και δημιουργεί ένα hash μπλοκ.
- Ο πελάτης consensus λαμβάνει τις συναλλαγές και το hash μπλοκ από τον πελάτη εκτέλεσης και τα προσθέτει στο μπλοκ beacon (τοπική RPC).
- Ο πελάτης consensus μεταδίδει το μπλοκ μέσω του πρωτοκόλλου ανταλλαγής κουτσομπολιού μπλοκ (consensus p2p).
- Άλλοι πελάτες λαμβάνουν το προτεινόμενο μπλοκ μέσω του πρωτοκόλλου ανταλλαγής κουτσομπολιού μπλοκ και το επικυρώνουν όπως περιγράφεται παραπάνω (consensus p2p).
Μόλις το μπλοκ πιστοποιηθεί από αρκετούς επικυρωτές, προστίθεται στην κορυφή της αλυσίδας, δικαιολογείται και τελικά οριστικοποιείται.
Σχέδιο δικτύου για πελάτες consensus και εκτέλεσης, από το ethresear.ch.
Περισσότερες πληροφορίες
DevP2P LibP2p Προδιαγραφές επιπέδου συναίνεσης δικτύου kademlia στο discv5 τεκμηρίωση kademlia εισαγωγή στο Ethereum p2p σχέσεις eth1/eth2 βίντεο με λεπτομέρειες πελάτη της συγχώνευσης και eth2