Μετάβαση στο κύριο περιεχόμενο
Change page

Πρόταση μπλοκ

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

Προαπαιτούμενα

Η πρόταση μπλοκ είναι μέρος του πρωτοκόλλου απόδειξης συμμετοχής. Για να κατανοήσετε καλύτερα αυτή τη σελίδα, σας συνιστούμε να διαβάσετε σχετικά με την απόδειξη συμμετοχής και την αρχιτεκτονική μπλοκ.

Ποιος παράγει μπλοκ;

Οι λογαριασμοί επικυρωτών προτείνουν μπλοκ. Τους λογαριασμούς επικυρωτών διαχειρίζονται χειριστές κόμβων που εκτελούν λογισμικό επικυρωτή ως μέρος των πελατών εκτέλεσης και συναίνεσης και έχουν καταθέσει τουλάχιστον 32 ETH στη σύμβαση κατάθεσης. Ωστόσο, κάθε επικυρωτής είναι υπεύθυνος μόνο περιστασιακά για την πρόταση ενός μπλοκ. Το Ethereum μετράει τον χρόνο σε χρονικά κενά και εποχές. Κάθε χρονικό κενό είναι δώδεκα δευτερόλεπτα και 32 χρονικά κενά (6,4 λεπτά) αποτελούν μια εποχή. Κάθε χρονικό κενό είναι μια ευκαιρία να προστεθεί ένα νέο μπλοκ στο Ethereum.

Τυχαία επιλογή

Ένας μεμονωμένος επικυρωτής επιλέγεται ψευδοτυχαία για να προτείνει ένα μπλοκ σε κάθε χρονικό κενό. Δεν υφίσταται πραγματική τυχαιότητα σε μια κρυπτοαλυσίδα, επειδή εάν κάθε κόμβος δημιουργούσε πραγματικά τυχαίους αριθμούς, δεν θα μπορούσαν να καταλήξουν σε συναίνεση. Αντίθετα, ο στόχος είναι να καταστεί η διαδικασία επιλογής επικυρωτή απρόβλεπτη. Η τυχαιότητα επιτυγχάνεται στο Ethereum μέσω ενός αλγορίθμου που ονομάζεται RANDAO και αναμειγνύει έναν κατακερματισμό από τον προτείνοντα μπλοκ με μια φράση ασφαλείας (seed) που ενημερώνεται σε κάθε μπλοκ. Αυτή η τιμή χρησιμοποιείται για την επιλογή ενός συγκεκριμένου επικυρωτή από το συνολικό σύνολο επικυρωτών. Η επιλογή επικυρωτή καθορίζεται δύο εποχές εκ των προτέρων, γεγονός που συμβάλλει στην προστασία από ορισμένους τύπους χειραγώγησης της φράσης ασφαλείας.

Αν και οι επικυρωτές προσθέτουν στο RANDAO σε κάθε χρονικό κενό, η ολική τιμή RANDAO ενημερώνεται μόνο μία φορά ανά εποχή. Για να υπολογιστεί ο δείκτης του επόμενου προτείνοντα μπλοκ, η τιμή RANDAO αναμειγνύεται με τον αριθμό χρονικού κενού για να δώσει μια μοναδική τιμή σε κάθε χρονικό κενό. Η πιθανότητα επιλογής ενός μεμονωμένου επικυρωτή δεν είναι απλώς 1/Ν (όπου Ν = συνολικοί ενεργοί επικυρωτές). Αντιθέτως, υπολογίζεται με το πραγματικό υπόλοιπο ETH κάθε επικυρωτή. Το μέγιστο πραγματικό υπόλοιπο είναι 32 ETH (αυτό σημαίνει ότι balance < 32 ETH οδηγεί σε χαμηλότερη στάθμιση από balance == 32 ETH, αλλά balance > 32 ETH δεν οδηγεί σε υψηλότερη στάθμιση από balance == 32 ETH).

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

Πώς δημιουργείται το μπλοκ;

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

Ο προτείνων μπλοκ δημιουργεί ένα μπλοκ συλλέγοντας δεδομένα από τη δική του τοπική βάση δεδομένων και την όψη της αλυσίδας. Το περιεχόμενο του μπλοκ εμφανίζεται στο παρακάτω απόσπασμα:

1class BeaconBlockBody(Container):
2 randao_reveal: BLSSignature
3 eth1_data: Eth1Data
4 graffiti: Bytes32
5 proposer_slashings: List[ProposerSlashing, MAX_PROPOSER_SLASHINGS]
6 attester_slashings: List[AttesterSlashing, MAX_ATTESTER_SLASHINGS]
7 attestations: List[Attestation, MAX_ATTESTATIONS]
8 deposits: List[Deposit, MAX_DEPOSITS]
9 voluntary_exits: List[SignedVoluntaryExit, MAX_VOLUNTARY_EXITS]
10 sync_aggregate: SyncAggregate
11 execution_payload: ExecutionPayload
Εμφάνιση όλων

Το πεδίο randao_reveal λαμβάνει μια επαληθεύσιμη τυχαία τιμή που δημιουργεί ο προτείνων του μπλοκ υπογράφοντας τον τρέχοντα αριθμό εποχής. Το eth1_data είναι μια ψήφος για την άποψη του προτείνοντα του μπλοκ για τη σύμβαση κατάθεσης, που περιλαμβάνει τη ρίζα του Merkle trie κατάθεσης και τον συνολικό αριθμό καταθέσεων που επιτρέπουν την επαλήθευση νέων καταθέσεων. Το graffiti είναι ένα προαιρετικό πεδίο που μπορεί να χρησιμοποιηθεί για την προσθήκη ενός μηνύματος στο μπλοκ. Τα proposer_slashings και attester_slashings είναι πεδία που περιέχουν απόδειξη ότι ορισμένοι επικυρωτές έχουν διαπράξει παραβάσεις περικοπής (slash) σύμφωνα με την άποψη που έχει ο προτείνων για την αλυσίδα. Το deposits είναι μια λίστα νέων καταθέσεων επικυρωτών των οποίων έχει γνώση ο προτείνων του μπλοκ και το voluntary_exits είναι μια λίστα επικυρωτών που επιθυμούν να εξέλθουν για τους οποίους ο προτείνων του μπλοκ άκουσε στο δίκτυο ενημέρωσης του επιπέδου συναίνεσης. Το sync_aggregate είναι ένας φορέας που δείχνει ποιοι επικυρωτές είχαν προηγουμένως ανατεθεί σε μια επιτροπή συγχρονισμού (ένα υποσύνολο επικυρωτών που εξυπηρετούν δεδομένα ελαφρού πελάτη) και συμμετείχαν στην υπογραφή δεδομένων.

Το execution_payload επιτρέπει τη μεταφορά πληροφοριών σχετικά με τις συναλλαγές μεταξύ των πελατών εκτέλεσης και συναίνεσης. Το execution_payload είναι ένα μπλοκ δεδομένων εκτέλεσης που ενσωματώνεται σε ένα μπλοκ beacon. Τα πεδία μέσα στο execution_payload αντικατοπτρίζουν τη δομή μπλοκ που περιγράφεται στο κίτρινο έγγραφο του Ethereum, εκτός από το ότι δεν υπάρχουν ommer και το prev_randao υπάρχει στη θέση του difficulty. Ο πελάτης εκτέλεσης έχει πρόσβαση σε μια τοπική συγκέντρωση συναλλαγών για την οποία έμαθε από το δικό του δίκτυο ενημέρωσης. Αυτές οι συναλλαγές εκτελούνται τοπικά για να δημιουργήσουν ένα ενημερωμένο trie κατάστασης γνωστό ως μετα-κατάσταση. Οι συναλλαγές περιλαμβάνονται στο execution_payload ως μια λίστα που ονομάζεται transactions και η μετα-κατάσταση παρέχεται στο πεδίο state-root.

Όλα αυτά τα δεδομένα συλλέγονται σε ένα μπλοκ beacon, υπογράφονται και μεταδίδονται στους ομοτίμους του προτείνοντα του μπλοκ, οι οποίοι το διαδίδουν στους ομοτίμους τους και ούτω καθεξής.

Διαβάστε περισσότερα για την ανατομία των μπλοκ.

Τι γίνεται με το μπλοκ;

Το μπλοκ προστίθεται στην τοπική βάση δεδομένων του προτείνοντος το μπλοκ και μεταδίδεται στους ομοτίμους μέσω του δικτύου ενημέρωσης του επιπέδου συναίνεσης. Όταν ένας επικυρωτής λαμβάνει το μπλοκ, επαληθεύει τα δεδομένα μέσα σε αυτό και, μεταξύ άλλων, ελέγχει ότι το μπλοκ έχει το σωστό γονικό στοιχείο, αντιστοιχεί στο σωστό χρονικό κενό, ότι ο δείκτης προτείνοντος είναι ο αναμενόμενος, ότι η αποκάλυψη RANDAO είναι έγκυρη και ότι ο προτείνων δεν έχει περικοπεί. Το execution_payload διαχωρίζεται και ο πελάτης εκτέλεσης του επικυρωτή εκτελεί ξανά τις συναλλαγές στη λίστα για να ελέγξει την προτεινόμενη αλλαγή κατάστασης. Υποθέτοντας ότι το μπλοκ περνάει όλους αυτούς τους ελέγχους, κάθε επικυρωτής προσθέτει το μπλοκ στη δική του κανονική αλυσίδα. Η διαδικασία ξεκινά ξανά στο επόμενο χρονικό κενό.

Επιβραβεύσεις μπλοκ

Ο προτείνων του μπλοκ λαμβάνει πληρωμή για την εργασία του. Υπάρχει μια base_reward που υπολογίζεται ως συνάρτηση του αριθμού των ενεργών επικυρωτών και των πραγματικών υπολοίπων τους. Ο προτείνων του μπλοκ στη συνέχεια λαμβάνει ένα κλάσμα της base_reward για κάθε έγκυρη βεβαίωση επικύρωσης που περιλαμβάνεται στο μπλοκ. Όσο περισσότεροι επικυρωτές βεβαιώνουν το μπλοκ, τόσο μεγαλύτερη είναι η ανταμοιβή του προτείνοντος το μπλοκ. Υπάρχει επίσης μια ανταμοιβή για την αναφορά επικυρωτών που πρέπει να περικοπούν, ίση με 1/512 * effective balance για κάθε περικομμένο επικυρωτή.

Περισσότερα για ανταμοιβές και ποινές

Περισσότερες πληροφορίες

Ήταν χρήσιμο αυτό το άρθρο;