TON: Ανοικτό δίκτυο Telegram. Μέρος 2: Blockchains, διαμοιρασμός

TON: Ανοικτό δίκτυο Telegram. Μέρος 2: Blockchains, διαμοιρασμός

Αυτό το κείμενο αποτελεί συνέχεια μιας σειράς άρθρων στα οποία εξετάζω τη δομή του (πιθανώς) κατανεμημένου δικτύου Telegram Open Network (TON), το οποίο ετοιμάζεται για κυκλοφορία φέτος. ΣΕ προηγούμενο μέρος Περιέγραψα το πιο βασικό του επίπεδο - τον τρόπο που οι κόμβοι αλληλεπιδρούν μεταξύ τους.

Για κάθε ενδεχόμενο, να σας υπενθυμίσω ότι δεν έχω καμία σχέση με την ανάπτυξη αυτού του δικτύου και όλο το υλικό προήλθε από μια ανοιχτή (αν και μη επαληθευμένη) πηγή - έγγραφο (υπάρχει και συνοδευτικό προσπέκτους, περιγράφοντας συνοπτικά τα κύρια σημεία), που εμφανίστηκαν στα τέλη του περασμένου έτους. Ο όγκος των πληροφοριών σε αυτό το έγγραφο, κατά τη γνώμη μου, υποδηλώνει την αυθεντικότητά του, αν και δεν υπάρχει επίσημη επιβεβαίωση αυτού.

Σήμερα θα εξετάσουμε το κύριο συστατικό του TON - το blockchain.

ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ

Λογαριασμός (λογαριασμός). Ένα σύνολο δεδομένων που αναγνωρίζονται από έναν αριθμό 256-bit Αναγνωριστικό λογαριασμού (τις περισσότερες φορές αυτό είναι το δημόσιο κλειδί του κατόχου του λογαριασμού). Στη θήκη βάσης (δείτε παρακάτω μηδενική αλυσίδα εργασίας), αυτά τα δεδομένα αναφέρονται στο υπόλοιπο του χρήστη. «Κατάληψη» συγκεκριμένα Αναγνωριστικό λογαριασμού ο καθένας μπορεί, αλλά η αξία του μπορεί να αλλάξει μόνο σύμφωνα με ορισμένους κανόνες.

Έξυπνο συμβόλαιο (έξυπνη σύμβαση). Στην ουσία πρόκειται για μια ειδική περίπτωση λογαριασμού, που συμπληρώνεται με έξυπνο κωδικό συμβολαίου και αποθήκευση των μεταβλητών του. Εάν στην περίπτωση ενός «πορτοφολιού» μπορείτε να καταθέσετε και να κάνετε ανάληψη χρημάτων από αυτό σύμφωνα με σχετικά απλούς και προκαθορισμένους κανόνες, τότε στην περίπτωση ενός έξυπνου συμβολαίου αυτοί οι κανόνες γράφονται με τη μορφή του κωδικού του (σε ένα συγκεκριμένο Turing-complete γλώσσα προγραμματισμού).

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

Μήνυμα (μήνυμα). Παραπάνω χρησιμοποίησα την έκφραση "πιστωτικά και χρεωστικά χρήματα" - αυτό είναι ένα συγκεκριμένο παράδειγμα μηνύματος ("μεταφορά N γραμμάρια από λογαριασμό λογαριασμός_1 στο λογαριασμό λογαριασμός_2"). Προφανώς, μόνο ο κόμβος που κατέχει το ιδιωτικό κλειδί του λογαριασμού μπορεί να στείλει ένα τέτοιο μήνυμα λογαριασμός_1 - και μπορεί να το επιβεβαιώσει με υπογραφή. Το αποτέλεσμα της παράδοσης τέτοιων μηνυμάτων σε έναν κανονικό λογαριασμό είναι η αύξηση του υπολοίπου του και το αποτέλεσμα του έξυπνου συμβολαίου είναι η εκτέλεση του κωδικού του (ο οποίος θα επεξεργαστεί τη λήψη του μηνύματος). Φυσικά, είναι δυνατά και άλλα μηνύματα (μεταφορά όχι χρηματικών ποσών, αλλά αυθαίρετων δεδομένων μεταξύ έξυπνων συμβολαίων).

Συναλλαγή (συναλλαγή). Το γεγονός ότι παραδίδεται ένα μήνυμα ονομάζεται συναλλαγή. Οι συναλλαγές αλλάζουν την κατάσταση του blockchain. Είναι οι συναλλαγές (αρχεία παράδοσης μηνυμάτων) που αποτελούν τα μπλοκ στο blockchain. Από αυτή την άποψη, μπορείτε να σκεφτείτε την κατάσταση του blockchain ως μια σταδιακή βάση δεδομένων - όλα τα μπλοκ είναι "διαφορές" που πρέπει να εφαρμοστούν διαδοχικά για να λάβετε την τρέχουσα κατάσταση της βάσης δεδομένων. Οι ιδιαιτερότητες της συσκευασίας αυτών των «διαφορών» (και της αποκατάστασης της πλήρους κατάστασης από αυτές) θα συζητηθούν στο επόμενο άρθρο.

Blockchain στο TON: τι είναι και γιατί;

Όπως αναφέρθηκε στο προηγούμενο άρθρο, Το blockchain είναι μια δομή δεδομένων, τα στοιχεία (μπλοκ) της οποίας ταξινομούνται σε μια "αλυσίδα" και κάθε επόμενο μπλοκ της αλυσίδας περιέχει έναν κατακερματισμό του προηγούμενου. Τα σχόλια έθεταν το ερώτημα: γιατί χρειαζόμαστε καθόλου μια τέτοια δομή δεδομένων όταν έχουμε ήδη ένα DHT - έναν κατανεμημένο πίνακα κατακερματισμού; Προφανώς, ορισμένα δεδομένα μπορούν να αποθηκευτούν στο DHT, αλλά αυτό είναι κατάλληλο μόνο για όχι πολύ «ευαίσθητες» πληροφορίες. Τα υπόλοιπα κρυπτονομισμάτων δεν μπορούν να αποθηκευτούν στο DHT - κυρίως λόγω της έλλειψης ελέγχων ακεραιότητα. Στην πραγματικότητα, όλη η πολυπλοκότητα της δομής της αλυσίδας μπλοκ μεγαλώνει προκειμένου να αποτραπεί η παρεμβολή στα δεδομένα που είναι αποθηκευμένα σε αυτήν.

Ωστόσο, το blockchain στο TON φαίνεται ακόμα πιο περίπλοκο από ό,τι στα περισσότερα άλλα κατανεμημένα συστήματα - και για δύο λόγους. Το πρώτο είναι η επιθυμία να ελαχιστοποιηθεί η ανάγκη για πιρούνια. Στα παραδοσιακά κρυπτονομίσματα, όλες οι παράμετροι ορίζονται στο αρχικό στάδιο και κάθε προσπάθεια αλλαγής τους οδηγεί στην πραγματικότητα στην εμφάνιση ενός «εναλλακτικού σύμπαντος κρυπτονομισμάτων». Ο δεύτερος λόγος είναι η υποστήριξη για σύνθλιψη (τεμαχισμός, τεμαχισμός) blockchain. Το blockchain είναι μια δομή που δεν μπορεί να γίνει μικρότερη με την πάροδο του χρόνου. και συνήθως κάθε κόμβος που είναι υπεύθυνος για τη λειτουργία του δικτύου αναγκάζεται να το αποθηκεύσει πλήρως. Στα παραδοσιακά (κεντρικά) συστήματα, ο διαμοιρασμός χρησιμοποιείται για την επίλυση τέτοιων προβλημάτων: ορισμένες από τις εγγραφές στη βάση δεδομένων βρίσκονται σε έναν διακομιστή, ορισμένες σε έναν άλλο, κ.λπ. Στην περίπτωση των κρυπτονομισμάτων, μια τέτοια λειτουργικότητα εξακολουθεί να είναι αρκετά σπάνια - ειδικότερα, λόγω του γεγονότος ότι είναι δύσκολο να προστεθεί διαμοιρασμός σε ένα σύστημα όπου δεν είχε αρχικά προγραμματιστεί.

Πώς σχεδιάζει η TON να λύσει και τα δύο παραπάνω προβλήματα;

Περιεχόμενο blockchain. Αλυσίδες εργασίας.

TON: Ανοικτό δίκτυο Telegram. Μέρος 2: Blockchains, διαμοιρασμός

Πρώτα απ 'όλα, ας μιλήσουμε για το τι σχεδιάζεται να αποθηκευτεί στο blockchain. Οι καταστάσεις των λογαριασμών («πορτοφόλια» στη βασική περίπτωση) και τα έξυπνα συμβόλαια θα αποθηκευτούν εκεί (για απλότητα, θα υποθέσουμε ότι αυτό είναι το ίδιο με τους λογαριασμούς). Στην ουσία, αυτός θα είναι ένας κανονικός πίνακας κατακερματισμού - τα κλειδιά σε αυτόν θα είναι αναγνωριστικά Αναγνωριστικό λογαριασμούκαι οι τιμές είναι δομές δεδομένων που περιέχουν πράγματα όπως:

  • ισορροπία;
  • κωδικός έξυπνου συμβολαίου (μόνο για έξυπνες συμβάσεις).
  • αποθήκευση δεδομένων έξυπνων συμβολαίων (μόνο για έξυπνες συμβάσεις).
  • στατιστική;
  • (προαιρετικά) δημόσιο κλειδί για μεταφορές από τον λογαριασμό, από προεπιλογή account_id.
  • ουρά εξερχόμενων μηνυμάτων (εδώ εισάγονται για προώθηση στον παραλήπτη).
  • μια λίστα με τα πιο πρόσφατα μηνύματα που παραδόθηκαν σε αυτόν τον λογαριασμό.

Όπως προαναφέρθηκε, τα ίδια τα μπλοκ αποτελούνται από συναλλαγές - μηνύματα που παραδίδονται σε διάφορους λογαριασμούς account_id. Ωστόσο, εκτός από το account_id, τα μηνύματα περιέχουν επίσης ένα πεδίο 32 bit workchain_id — το λεγόμενο αναγνωριστικό αλυσίδα εργασίας (αλυσίδα εργασίας, λειτουργικό blockchain). Αυτό σας επιτρέπει να έχετε πολλές μπλοκ αλυσίδες ανεξάρτητες μεταξύ τους με διαφορετικές διαμορφώσεις. Σε αυτήν την περίπτωση, το workchain_id = 0 θεωρείται ειδική περίπτωση, μηδενική αλυσίδα εργασίας — είναι τα υπόλοιπα σε αυτό που θα αντιστοιχούν στο κρυπτονόμισμα TON (γραμμάρια). Πιθανότατα, αρχικά, άλλες αλυσίδες εργασίας δεν θα υπάρχουν καθόλου.

Αλυσίδες σκαγιών. Infinite Sharding Paradigm.

Αλλά η αύξηση του αριθμού των blockchain δεν σταματά εκεί. Ας ασχοληθούμε με το Sharing. Ας φανταστούμε ότι σε κάθε λογαριασμό (account_id) έχει εκχωρηθεί το δικό του blockchain - περιέχει όλα τα μηνύματα που έρχονται σε αυτόν - και οι καταστάσεις όλων αυτών των blockchain αποθηκεύονται σε ξεχωριστούς κόμβους.

Φυσικά, αυτό είναι πολύ σπάταλο: πιθανότατα, σε καθένα από αυτά αλυσίδες σκόνης (αλυσιδάκι, θραύσμα blockchain) οι συναλλαγές θα φτάνουν πολύ σπάνια και θα χρειαστούν πολλοί ισχυροί κόμβοι (κοιτάζοντας μπροστά, σημειώνω ότι δεν μιλάμε μόνο για πελάτες σε κινητά τηλέφωνα - αλλά για σοβαρούς διακομιστές).

Επομένως, τα shardchains συνδυάζουν λογαριασμούς με τα δυαδικά προθέματα των αναγνωριστικών τους: εάν ένα shardchain έχει πρόθεμα 0110, τότε θα περιλαμβάνει συναλλαγές όλων των account_ids που ξεκινούν με αυτούς τους αριθμούς. Αυτό θραύσμα_πρόθεμα μπορεί να έχει μήκος από 0 έως 60 bit - και το κυριότερο είναι ότι μπορεί να αλλάξει δυναμικά.

TON: Ανοικτό δίκτυο Telegram. Μέρος 2: Blockchains, διαμοιρασμός

Μόλις ένα από τα shardchain αρχίσει να λαμβάνει πάρα πολλές συναλλαγές, οι κόμβοι που εργάζονται σε αυτό, σύμφωνα με προκαθορισμένους κανόνες, το "χωρίζουν" σε δύο παιδιά - τα προθέματά τους θα είναι ένα bit μεγαλύτερα (και για έναν από αυτά αυτό το bit θα είναι ίσο με 0, και για το άλλο - 1). Για παράδειγμα, θραύσμα_πρόθεμα = 0110β θα χωριστεί σε 01100β και 01101β. Με τη σειρά τους, εάν δύο «γειτονικές» αλυσίδες αρχίζουν να αισθάνονται αρκετά άνετα (για κάποιο χρονικό διάστημα), θα συγχωνευθούν ξανά.

Έτσι, ο διαμοιρασμός γίνεται "από κάτω προς τα πάνω" - υποθέτουμε ότι κάθε λογαριασμός έχει το δικό του θραύσμα, αλλά προς το παρόν είναι "κολλημένα" με προθέματα. Αυτό σημαίνει Infinite Sharding Paradigm (άπειρο παράδειγμα διαμοιρασμού).

Ξεχωριστά, θα ήθελα να τονίσω ότι οι αλυσίδες εργασίας υπάρχουν μόνο εικονικά - στην πραγματικότητα, workchain_id είναι μέρος του αναγνωριστικού μιας συγκεκριμένης αλυσίδας. Με τυπικούς όρους, κάθε σκαρφαλωμένη αλυσίδα ορίζεται από ένα ζεύγος αριθμών (workchain_id, θραύσμα_πρόθεμα).

Διόρθωση σφαλμάτων. Κάθετες μπλοκ αλυσίδες.

Παραδοσιακά, οποιαδήποτε συναλλαγή σε ένα blockchain θεωρείται ότι έχει «σταθεί». Ωστόσο, στην περίπτωση του TON, είναι δυνατό να «ξαναγράψουμε την ιστορία» - σε περίπτωση που κάποιος (το λεγόμενο. ψαράδικος κόμπος) θα αποδείξει ότι ένα από τα μπλοκ υπογράφηκε λανθασμένα. Σε αυτήν την περίπτωση, ένα ειδικό μπλοκ διόρθωσης προστίθεται στην αντίστοιχη αλυσίδα θραυσμάτων, που περιέχει τον κατακερματισμό του ίδιου του μπλοκ που διορθώνεται (και όχι το τελευταίο μπλοκ του μπλοκ που διορθώνεται). Σκεπτόμενος την αλυσίδα ως μια αλυσίδα από μπλοκ τοποθετημένα οριζόντια, μπορούμε να πούμε ότι το διορθωτικό μπλοκ είναι προσαρτημένο στο λανθασμένο μπλοκ όχι προς τα δεξιά, αλλά από πάνω - επομένως θεωρείται ότι γίνεται μέρος μιας μικρής «κάθετης αλυσίδας μπλοκ». . Έτσι, μπορούμε να πούμε ότι οι αλυσίδες είναι δισδιάστατες αλυσίδες μπλοκ.

TON: Ανοικτό δίκτυο Telegram. Μέρος 2: Blockchains, διαμοιρασμός

Εάν, μετά από ένα λανθασμένο μπλοκ, οι αλλαγές που έγιναν από αυτόν αναφέρθηκαν από επόμενα μπλοκ (δηλαδή, έγιναν νέες συναλλαγές με βάση μη έγκυρες), διορθωτικές προστίθενται επίσης σε αυτά τα μπλοκ "από πάνω". Εάν τα μπλοκ δεν επηρέασαν τις "επηρεαζόμενες" πληροφορίες, αυτά τα "διορθωτικά κύματα" δεν ισχύουν για αυτά. Για παράδειγμα, στην παραπάνω εικόνα, η συναλλαγή του πρώτου μπλοκ, που αυξάνει το υπόλοιπο του λογαριασμού C, αναγνωρίστηκε ως λανθασμένη - επομένως, η συναλλαγή που μειώνει το υπόλοιπο αυτού του λογαριασμού στο τρίτο μπλοκ θα πρέπει επίσης να ακυρωθεί και ένα διορθωτικό μπλοκ πρέπει να δεσμευτεί πάνω από το ίδιο το μπλοκ.

Θα πρέπει να σημειωθεί ότι αν και τα διορθωτικά μπλοκ απεικονίζονται όπως βρίσκονται «πάνω» από τα αρχικά, στην πραγματικότητα θα προστεθούν στο τέλος του αντίστοιχου blockchain (όπου θα έπρεπε να βρίσκονται χρονολογικά). Η δισδιάστατη θέση δείχνει μόνο σε ποιο σημείο της αλυσίδας μπλοκ θα «συνδεθούν» (μέσω του κατακερματισμού του αρχικού μπλοκ που βρίσκεται σε αυτά).

Μπορείτε να φιλοσοφήσετε χωριστά για το πόσο καλή είναι η απόφαση να «αλλάξετε το παρελθόν». Φαίνεται ότι εάν παραδεχτούμε την πιθανότητα εμφάνισης λανθασμένου μπλοκ στην αλυσίδα, τότε δεν μπορούμε να αποφύγουμε την πιθανότητα εμφάνισης λανθασμένου διορθωτικού μπλοκ. Εδώ, από όσο μπορώ να πω, η διαφορά έγκειται στον αριθμό των κόμβων που πρέπει να επιτύχουν συναίνεση για νέα μπλοκ - θα υπάρχει σχετικά μικρός αριθμός ατόμων που θα εργάζονται σε κάθε shardchain."ομάδα εργασίας» κόμβους (που αλλάζει τη σύνθεσή του αρκετά συχνά) και η εισαγωγή διορθωτικών μπλοκ θα απαιτήσει τη συγκατάθεση όλων κόμβους επικύρωσης. Θα μιλήσω περισσότερα για επικυρωτές, ομάδες εργασίας και άλλους ρόλους κόμβων στο επόμενο άρθρο.

Ένα blockchain για να τα κυβερνά όλα

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

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

Όπως ίσως μαντέψατε, όλα αυτά τα πράγματα καταγράφονται σε άλλο χώρο αποθήκευσης blockchain - masterchain (masterchain, master blockchain). Λόγω της παρουσίας κατακερματισμών από τα μπλοκ όλων των shardchains στα μπλοκ του, καθιστά το σύστημα εξαιρετικά συνδεδεμένο. Αυτό σημαίνει, μεταξύ άλλων, ότι η δημιουργία ενός νέου μπλοκ στο masterchain θα συμβεί αμέσως μετά τη δημιουργία μπλοκ σε shardchains - αναμένεται ότι τα μπλοκ σε shardchains θα εμφανίζονται σχεδόν ταυτόχρονα περίπου κάθε 5 δευτερόλεπτα και το επόμενο μπλοκ στο masterchain - ένα δευτερόλεπτο μετά από αυτό.

Αλλά ποιος θα είναι υπεύθυνος για την υλοποίηση όλης αυτής της τιτάνιας δουλειάς - για την αποστολή μηνυμάτων, την εκτέλεση έξυπνων συμβάσεων, τη δημιουργία μπλοκ σε shardchains και το masterchain, ακόμη και τον έλεγχο των μπλοκ για σφάλματα; Όλα αυτά θα γίνονται κρυφά από τα τηλέφωνα εκατομμυρίων χρηστών με εγκατεστημένο σε αυτά τον πελάτη Telegram; Ή, μήπως, η ομάδα Durov θα εγκαταλείψει τις ιδέες της αποκέντρωσης και οι διακομιστές της θα το κάνουν με τον παλιομοδίτικο τρόπο;

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

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο