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

Μπλοκ

Τελευταία επεξεργασία: @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_roothash ρίζας συναλλαγών πληρωμών
withdrawal_rootroot 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 του μπλοκ μέσω συναίνεσης. Η συνολική ποσότητα κρατήσεων που δαπανάται από όλες τις συναλλαγές στο μπλοκ πρέπει να είναι μικρότερη από το όριο κρατήσεων του μπλοκ. Αυτό είναι σημαντικό επειδή εξασφαλίζει ότι τα μπλοκ δεν μπορούν να είναι αυθαίρετα μεγάλα σε μέγεθος. Εάν τα μπλοκ θα μπορούσαν να είναι αυθαίρετα μεγάλα σε μέγεθος, τότε οι κόμβοι με περιορισμένες επιδόσεις δε θα μπορούσαν να ανταποκριθούν στις ανάγκες και τις απαιτήσεις του δικτύου. Όσο μεγαλύτερο είναι ένα μπλοκ, τόσο μεγαλύτερη υπολογιστική δύναμη απαιτείται για να επεξεργαστεί εγκαίρως για την επόμενη υποδοχή. Αυτή είναι μια συγκεντρωτική δύναμη, η οποία αντιστέκεται με την κάλυψη των μεγεθών μπλοκ.

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

Γνωρίζετε κάποιο πόρο της κοινότητας που σας βοήθησε; Επεξεργαστείτε αυτή τη σελίδα και προσθέστε το!

  • Συναλλαγές
  • Κρατήσεις (Gas)
  • Απόδειξη συμμετοχής

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