Μπλοκ
Τελευταία επεξεργασία: @mr_giorgos(opens in a new tab), 26 Μαΐου 2024
Τα μπλοκ είναι μια σειρά από συναλλαγές μαζί με ένα αναγνωριστικό του προηγούμενου μπλοκ στην αλυσίδα. Αυτά τα μπλοκ συνδέονται μεταξύ τους (μέσα στην αλυσίδα) επειδή τα αναγνωριστικά τους περιέχουν ένα κρυπτογραφημένο μέρος από τα δεδομένα του μπλοκ. Αυτός ο τρόπος αποτρέπει την απάτη, επειδή μια αλλαγή σε οποιοδήποτε σημείο ενός μπλοκ στο ιστορικό του, θα ακυρώσει όλα τα ακόλουθα, καθώς όλα τα επόμενα αναγνωριστικά θα άλλαζαν και όλοι όσοι εκτελούν την κρυπτοαλυσίδα θα το παρατηρούσαν.
Προαπαιτούμενα
Τα μπλοκ είναι σχεδόν το πρώτο θέμα που διαβάζουν οι αρχάριοι. Για να σας βοηθήσουμε να κατανοήσετε καλύτερα αυτή τη σελίδα, σας συνιστούμε να διαβάσετε πρώτα σχετικά με Λογαριασμούς, Συναλλαγές και τις οδηγίες εισαγωγής μας στο Ethereum.
Χρήση των μπλοκ
Για να εξασφαλιστεί πως όλοι οι συμμετέχοντες στο δίκτυο Ethereum διατηρούν μία συγχρονισμένη κατάσταση και να συμφωνήσουν σε ένα ακριβής ιστορικό συναλλαγών, συγχωνεύουμε τις συναλλαγές σε πολλά μπλοκ. Αυτό σημαίνει ότι δεκάδες (ή εκατοντάδες) συναλλαγές έχουν καταχωρηθεί, συμφωνηθεί και έχουν συγχρονιστεί όλα άμεσα.
Προσαρμοσμένο διάγραμμα εικονογραφημένο από Ethereum EVM(opens in a new tab)
Διαχωρίζοντας τις δεσμεύσεις, παρέχουμε σε όλους τους συμμετέχοντες στο δίκτυο αρκετό χρόνο για να καταλήξουν σε συναίνεση: ακόμα και αν οι αιτήσεις συναλλαγών ξεπερνούν τις δεκάδες το δευτερόλεπτο, τα μπλοκ στο Ethereum δημιουργούνται και διαχωρίζονται περίπου μία φορά κάθε δώδεκα δευτερόλεπτα.
Πώς λειτουργούν τα μπλοκ
Για να διατηρηθεί το ιστορικό συναλλαγών, τα μπλοκ ταξινομούνται αυστηρά (κάθε νέο μπλοκ που δημιουργείται περιέχει μια αναφορά στο προηγούμενο μπλοκ) και οι συναλλαγές μέσα σε κάθε μπλοκ είναι αυστηρά ταξινομημένες. Εκτός από σπάνιες περιπτώσεις, ανά πάσα στιγμή, όλοι οι συμμετέχοντες στο δίκτυο συμφωνούν σχετικά με τον ακριβή αριθμό και το ιστορικό των μπλοκ και εργάζονται για να συγκεντρώσουν τα τρέχοντα αιτήματα συναλλαγών στο επόμενο μπλοκ.
Μόλις δημιουργηθεί ένα μπλοκ από έναν τυχαία επιλεγμένο επικυρωτή στο δίκτυο, ανακοινώνεται στο υπόλοιπο δίκτυο ώστε όλοι οι κόμβοι να προσθέσουν αυτό το μπλοκ στο τέλος της κρυπτοαλυσίδας και στη συνέχεια γίνεται η επιλογή του επόμενου επικυρωτή για το επόμενο μπλοκ. Η ακριβής διαδικασία δημιουργίας ενός μπλοκ και η διαδικασία δέσμευσης/συναίνεσης, καθορίζεται επί του παρόντος από το πρωτόκολλο της «Απόδειξης συμμετοχής» του Ethereum.
Πρωτόκολλο της απόδειξης συμμετοχής
Ως απόδειξη συμμετοχής νοούνται τα ακόλουθα:
- Οι επικυρωμένοι κόμβοι πρέπει να συμμετέχουν αποθηκεύοντας 32 ETH σε ένα συμβόλαιο καταθέσεων ως εξασφάλιση έναντι της κακής συμπεριφοράς. Αυτό βοηθά στην προστασία του δικτύου, επειδή μια αποδεδειγμένα κακόβουλη δραστηριότητα οδηγεί σε κάποια ή όλα τα αποθηκευμένα κεφάλαια να καταστραφούν.
- Σε κάθε θέση (με διάστημα δώδεκα δευτερολέπτων), επιλέγεται τυχαία ένας επικυρωτής για να προτείνει το επόμενο μπλοκ. Συγκεντρώνουν τις συναλλαγές μαζί, τις εκτελούν και καθορίζουν μια νέα «κατάσταση». Συγκεντρώνουν αυτές τις πληροφορίες σε ένα μπλοκ και τις διαβιβάζουν σε άλλους επικυρωτές.
- Οι υπόλοιποι επικυρωτές που ενημερώνονται για το νέο μπλοκ επανεκτελούν τις συναλλαγές για να εξασφαλίσουν ότι συμφωνούν με την προτεινόμενη αλλαγή στη γενική κατάσταση. Θεωρώντας ότι το μπλοκ είναι έγκυρο, το προσθέτουν στη δική τους βάση δεδομένων.
- Αν ένας επικυρωτής ενημερωθεί για δύο αντικρουόμενα μπλοκ για την ίδια θέση χρησιμοποιούν τον αλγόριθμο επιλογής ενσωμάτωσης για να επιλέξουν αυτό που υποστηρίζεται από τα ETH με την περισσότερη συμμετοχή.
Περισσότερα για την απόδειξη συμμετοχής
Τι περιέχει ένα μπλοκ;
Υπάρχουν πολλές πληροφορίες που περιέχονται μέσα σε ένα μπλοκ. Στο υψηλότερο επίπεδο ένα μπλοκ περιέχει τα ακόλουθα πεδία:
Πεδίο | Περιγραφή |
---|---|
slot | η θέση στην οποία ανήκει το μπλοκ |
proposer_index | το αναγνωριστικό του επικυρωτή που προτείνει το μπλοκ |
parent_root | ο κατακερματισμός του προηγούμενου μπλοκ |
state_root | το κατακερματισμό ρίζας του αντικειμένου κατάστασης |
body | ένα αντικείμενο που περιέχει διάφορα πεδία όπως ορίζεται παρακάτω |
Το μπλοκ body
περιέχει από μόνο του τα πεδία:
Πεδίο | Περιγραφή |
---|---|
randao_reveal | μια τιμή που χρησιμοποιείται για την επιλογή του επόμενου προτεινόμενου μπλοκ |
eth1_data | πληροφορίες σχετικά με το συμβόλαιο κατάθεσης |
graffiti | αυθαίρετα δεδομένα που χρησιμοποιούνται για τη σήμανση του μπλοκ |
proposer_slashings | κατάλογος επικυρωτών που πρέπει να περικοπούν |
attester_slashings | κατάλογος βεβαιωτών που πρέπει να περικοπούν |
attestations | λίστα βεβαιώσεων υπέρ του τρέχοντος μπλοκ |
deposits | λίστα νέων καταθέσεων στο συμβόλαιο καταθέσεων |
voluntary_exits | λίστα επικυρωτών που εξέρχονται από το δίκτυο |
sync_aggregate | υποσύνολο επικυρωτών που χρησιμοποιούνται για την εξυπηρέτηση λογισμικού ελαφρύ πελάτη |
execution_payload | συναλλαγές που έχουν μεταβιβαστεί από τον πελάτη εκτέλεσης |
Το πεδίο attestations
περιέχει μια λίστα με όλες τις βεβαιώσεις στο μπλοκ. Οι επιβεβαιώσεις έχουν το δικό τους τύπο δεδομένων που περιέχει πολλά κομμάτια των δεδομένων. Κάθε επιβεβαίωση περιέχει:
Πεδίο | Περιγραφή |
---|---|
aggregation_bits | κατάλογο επικυρωτών που συμμετείχαν στην επιβεβαίωση |
data | ένα κατάλογο με πολλαπλά υποπεδία |
signature | συγκεντρωτική υπογραφή όλων των βεβαιώσεων των επικυρωτών |
Το πεδίο data
στo attestation
περιέχει:
Πεδίο | Περιγραφή |
---|---|
slot | τη θέση που αφορά η επιβεβαίωση |
index | δείκτες βεβαίωσης επικυρωτών |
beacon_block_root | το κατακερματισμό ρίζας του αρχικού μπλοκ που περιέχει αυτό το αντικείμενο |
source | το τελευταίο επιβεβαιωμένο σημείο ελέγχου |
target | το τελευταίο μπλοκ ορίων εποχής |
Η εκτέλεση συναλλαγών στην execution_payload
ενημερώνει την παγκόσμια κατάσταση. Όλοι οι πελάτες επανεκτελούν τις συναλλαγές στο execution_payload
, για να εξασφαλίσουν ότι η νέα κατάσταση ταιριάζει με αυτό στο νέο πεδίο μπλοκ state_root
. Αυτός είναι ο τρόπος με τον οποίο το λογισμικό πελάτη μπορεί να πει ότι ένα νέο μπλοκ είναι έγκυρο και ασφαλές για να προστεθεί στην κρυπτοαλυσίδα. Το execution payload
είναι ένα αντικείμενο με πολλά πεδία. Υπάρχει επίσης το execution_payload_header
που περιέχει σημαντικές συνοπτικές πληροφορίες σχετικά με τα δεδομένα εκτέλεσης. Αυτές οι δομές δεδομένων οργανώνονται όπως παρακάτω:
Το execution_payload_header
περιέχει τα πεδία:
Πεδίο | Περιγραφή |
---|---|
parent_hash | κατακερματισμό γονικού μπλοκ |
fee_recipient | διεύθυνση λογαριασμού πληρωμής των τελών συναλλαγής |
state_root | κατακερματισμό ρίζας παγκόσμιας κατάστασης μετά την εφαρμογή αλλαγών σε αυτό το μπλοκ |
receipts_root | κατακερματισμό των αποδείξεων συναλλαγής |
logs_bloom | δομή δεδομένων που περιέχει αρχεία καταγραφής συμβάντων |
prev_randao | τιμή που χρησιμοποιήθηκε στην τυχαία επιλογή του επικυρωτή |
block_number | ο αριθμός του τρέχοντος μπλοκ |
gas_limit | μέγιστο επιτρεπόμενο κόστος κρατήσεων σε αυτό το μπλοκ |
gas_used | η πραγματική ποσότητα κρατήσεων που χρησιμοποιείται σε αυτό το μπλοκ |
χρονική σήμανση | χρόνος μπλοκ |
extra_data | αυθαίρετα πρόσθετα δεδομένα ως ακατέργαστα bytes |
base_fee_per_gas | βασική αξία τέλους |
block_hash | κατακερματισμός του μπλοκ εκτέλεσης |
transactions_root | hash ρίζας συναλλαγών πληρωμών |
withdrawal_root | root hash των αναλήψεων στο payload |
Το ίδιο το execution_payload
περιέχει τα εξής (προσέξτε ότι είναι πανομοιότυπο με την κεφαλίδα εκτός από το ότι αντί για τον κατακερματισμό ρίζας των συναλλαγών περιλαμβάνει την πραγματική λίστα συναλλαγών και πληροφορίες ανάληψης):
Πεδίο | Περιγραφή |
---|---|
parent_hash | κατακερματισμό γονικού μπλοκ |
fee_recipient | διεύθυνση λογαριασμού πληρωμής των τελών συναλλαγής |
state_root | κατακερματισμό ρίζας παγκόσμιας κατάστασης μετά την εφαρμογή αλλαγών σε αυτό το μπλοκ |
receipts_root | κατακερματισμό των αποδείξεων συναλλαγής |
logs_bloom | δομή δεδομένων που περιέχει αρχεία καταγραφής συμβάντων |
prev_randao | τιμή που χρησιμοποιήθηκε στην τυχαία επιλογή του επικυρωτή |
block_number | ο αριθμός του τρέχοντος μπλοκ |
gas_limit | μέγιστο επιτρεπόμενο κόστος κρατήσεων σε αυτό το μπλοκ |
gas_used | η πραγματική ποσότητα κρατήσεων που χρησιμοποιείται σε αυτό το μπλοκ |
χρονική σήμανση | χρόνος μπλοκ |
extra_data | αυθαίρετα πρόσθετα δεδομένα ως ακατέργαστα bytes |
base_fee_per_gas | βασική αξία τέλους |
block_hash | κατακερματισμός του μπλοκ εκτέλεσης |
συναλλαγές | λίστα των προς εκτέλεση συναλλαγών |
αναλήψεις | λίστα αντικειμένων ανάληψης |
Η λίστα withdrawals
περιέχει αντικείμενα withdrawal
δομημένα με τον ακόλουθο τρόπο:
Πεδίο | Περιγραφή |
---|---|
διεύθυνση | τη διεύθυνση λογαριασμού ανάληψης |
amount | ποσό ανάληψης |
index | τιμή δείκτη ανάληψης |
validatorIndex | τιμή δείκτη επικυρωτή |
Χρόνος μπλοκ
Ο χρόνος μπλοκ αναφέρεται στο χρόνο διαχωρισμού των μπλοκ. Στο Ethereum, ο χρόνος χωρίζεται σε τμήματα των δώδεκα δευτερολέπτων που ονομάζονται «θέσεις». Σε κάθε θέση επιλέγεται ένας επικυρωτής για να προτείνει ένα μπλοκ. Υποθέτοντας ότι όλοι οι επικυρωτές βρίσκονται σε σύνδεση και πλήρως λειτουργικοί θα υπάρχει ένα μπλοκ σε κάθε θέση, που σημαίνει ότι ο χρόνος μπλοκ είναι 12 δευτ. Ωστόσο, περιστασιακά οι επικυρωτές μπορεί να είναι εκτός σύνδεσης όταν καλούνται να προτείνουν ένα μπλοκ, πράγμα που σημαίνει ότι κάποιες θέσεις θα είναι κενές.
Αυτή η εφαρμογή διαφέρει από τα συστήματα που βασίζονται στην απόδειξη εργασία, όπου οι χρόνοι θέσης είναι πιθανός συντονισμένοι με το πρωτόκολλο στοχευμένης δυσκολίας κρυπτόρυξης. Ο μέσος χρόνος μπλοκ(opens in a new tab) του Ethereum, είναι ένα τέλειο παράδειγμα όπου συμπεράνουμε ότι η μετάβαση από την απόδειξη εργασίας στην απόδειξη συμμετοχής μπορεί γίνει σαφώς με βάση τη συνοχή του νέου χρόνου μπλοκ των 12 δευτ.
Μέγεθος μπλοκ
Μια τελευταία σημαντική σημείωση είναι ότι τα μπλοκ έχουν περιορισμένο μέγεθος. Κάθε μπλοκ έχει ένα μέγεθος στόχο 15 εκατομμύρια, αλλά το μέγεθος των μπλοκ θα αυξάνεται ή θα μειώνεται σύμφωνα με τη ζήτηση του δικτύου, μέχρι το όριο μπλοκ των 30 εκατομμυρίων (2x το μέγεθος του στόχου μπλοκ). Το όριο κράτησης gas στο μπλοκ μπορεί να ρυθμιστεί προς τα πάνω ή προς τα κάτω κατά συντελεστή 1/1024 από το όριο κράτησης gas του προηγούμενου μπλοκ. Ως αποτέλεσμα, οι επικυρωτές μπορούν να αλλάξουν το όριο κράτησης gas του μπλοκ μέσω συναίνεσης. Η συνολική ποσότητα κρατήσεων που δαπανάται από όλες τις συναλλαγές στο μπλοκ πρέπει να είναι μικρότερη από το όριο κρατήσεων του μπλοκ. Αυτό είναι σημαντικό επειδή εξασφαλίζει ότι τα μπλοκ δεν μπορούν να είναι αυθαίρετα μεγάλα σε μέγεθος. Εάν τα μπλοκ θα μπορούσαν να είναι αυθαίρετα μεγάλα σε μέγεθος, τότε οι κόμβοι με περιορισμένες επιδόσεις δε θα μπορούσαν να ανταποκριθούν στις ανάγκες και τις απαιτήσεις του δικτύου. Όσο μεγαλύτερο είναι ένα μπλοκ, τόσο μεγαλύτερη υπολογιστική δύναμη απαιτείται για να επεξεργαστεί εγκαίρως για την επόμενη υποδοχή. Αυτή είναι μια συγκεντρωτική δύναμη, η οποία αντιστέκεται με την κάλυψη των μεγεθών μπλοκ.
Περισσότερες πληροφορίες
Γνωρίζετε κάποιο πόρο της κοινότητας που σας βοήθησε; Επεξεργαστείτε αυτή τη σελίδα και προσθέστε το!