Κλιμάκωση μπλοκ αλυσίδων με δεδομένα εκτός αλυσίδας

Κόμβος πηγής: 1738525

Όταν ένα hash αξίζει ένα εκατομμύριο λέξεις

Μέχρι τώρα είναι σαφές ότι πολλές περιπτώσεις χρήσης blockchain δεν έχουν καμία σχέση με τις χρηματοοικονομικές συναλλαγές. Αντίθετα, σκοπός της αλυσίδας είναι να επιτρέψει την αποκεντρωμένη συγκέντρωση, παραγγελία, χρονική σήμανση και αρχειοθέτηση του κάθε τύπος πληροφοριών, συμπεριλαμβανομένων δομημένων δεδομένων, αλληλογραφίας ή τεκμηρίωσης. Η βασική τιμή του blockchain επιτρέπει στους συμμετέχοντες να συμφωνήσουν με ακρίβεια και αποδεικτικά στοιχεία σχετικά με το ποια δεδομένα έχουν εισαχθεί, πότε και από ποιον, χωρίς να βασίζονται σε έναν αξιόπιστο ενδιάμεσο. Για παράδειγμα, η SAP κυκλοφόρησε πρόσφατα πλατφόρμα blockchain, που υποστηρίζει το MultiChain και το Hyperledger Fabric, στοχεύει ένα ευρύ φάσμα αλυσίδας εφοδιασμού και άλλων μη χρηματοοικονομικών εφαρμογών.

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

Για παράδειγμα, το MultiChain 1.0 επέτρεψε να δημιουργηθούν ένα ή περισσότερα ονόματα "streams" σε ένα blockchain και στη συνέχεια να χρησιμοποιηθούν για την αποθήκευση και ανάκτηση πρωτογενών δεδομένων. Κάθε ροή έχει το δικό της σύνολο δικαιωμάτων εγγραφής και κάθε κόμβος μπορεί ελεύθερα να επιλέξει σε ποιες ροές θα εγγραφεί. Εάν ένας κόμβος έχει εγγραφεί σε μια ροή, ευρετηριάζει το περιεχόμενο της ροής σε πραγματικό χρόνο, επιτρέποντας την ανάκτηση στοιχείων γρήγορα βάσει της παραγγελίας, της χρονικής σφραγίδας, του αριθμού αποκλεισμού ή της διεύθυνσης εκδότη, καθώς και μέσω ενός "κλειδιού" (ή ετικέτας) με ποια στοιχεία μπορούν να επισημανθούν. Το MultiChain 2.0 (από το alpha 1) επέκτεινε τις ροές για την υποστήριξη δεδομένων Unicode ή δεδομένων JSON, καθώς και πολλαπλών κλειδιών ανά στοιχείο και πολλαπλών στοιχείων ανά συναλλαγή. Πρόσθεσε επίσης συναρτήσεις συνόψεων όπως "συγχώνευση JSON" που συνδυάζουν στοιχεία με το ίδιο κλειδί ή εκδότη με χρήσιμο τρόπο.

Εμπιστευτικότητα και επεκτασιμότητα

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

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

Η επεκτασιμότητα, από την άλλη πλευρά, είναι μια πιο σημαντική πρόκληση. Ας υποθέσουμε ότι οποιαδήποτε αξιοπρεπής πλατφόρμα blockchain θα πρέπει να υποστηρίζει μια απόδοση δικτύου 500 συναλλαγών ανά δευτερόλεπτο. Εάν ο σκοπός της αλυσίδας είναι η αποθήκευση πληροφοριών, τότε το μέγεθος κάθε συναλλαγής θα εξαρτηθεί κυρίως από το πόσα δεδομένα περιέχει. Κάθε συναλλαγή θα χρειαστεί επίσης (τουλάχιστον) 100 byte γενικά για να αποθηκεύσει τη διεύθυνση του αποστολέα, την ψηφιακή υπογραφή και μερικά άλλα κομμάτια.

Εάν πάρουμε μια εύκολη υπόθεση, όπου κάθε στοιχείο είναι μια μικρή δομή JSON των 100 bytes, η συνολική απόδοση δεδομένων θα είναι 100 kilobytes ανά δευτερόλεπτο, υπολογιζόμενη από 500 × (100 + 100). Αυτό μεταφράζεται σε εύρος ζώνης κάτω από 1 megabit / δευτερόλεπτο, το οποίο είναι άνετα εντός της χωρητικότητας οποιασδήποτε σύγχρονης σύνδεσης στο Διαδίκτυο. Τα δεδομένα συσσωρεύονται με ρυθμό περίπου 3 terabyte ετησίως, κάτι που δεν είναι μικρό ποσό. Αλλά με σκληρούς δίσκους 12 terabyte τώρα ευρέως διαθέσιμο, να RAID ελεγκτές που συνδυάζουν πολλές φυσικές μονάδες δίσκου σε ένα λογικό, θα μπορούσαμε εύκολα να αποθηκεύσουμε 10-20 χρόνια δεδομένων σε κάθε κόμβο χωρίς υπερβολική ταλαιπωρία ή έξοδα.

Ωστόσο, τα πράγματα φαίνονται πολύ διαφορετικά αν αποθηκεύουμε μεγαλύτερα κομμάτια πληροφοριών, όπως σαρωμένη τεκμηρίωση. Μια εύλογη ποιότητα σάρωσης JPEG ενός φύλλου χαρτιού Α4 μπορεί να έχει μέγεθος 500 kilobyte. Πολλαπλασιάστε αυτό με 500 συναλλαγές ανά δευτερόλεπτο και εξετάζουμε μια απόδοση 250 megabytes ανά δευτερόλεπτο. Αυτό μεταφράζεται σε 2 gigabits / δευτερόλεπτο εύρους ζώνης, το οποίο είναι ταχύτερο από τα περισσότερα τοπικά δίκτυα, πόσο μάλλον συνδέσεις στο Διαδίκτυο. Στις Amazon Web Services φθηνότερες δημοσιευμένη τιμή 0.05 $ ανά gigabyte, σημαίνει ετήσιο λογαριασμό εύρους ζώνης 400,000 $ ανά κόμβο. Και πού θα αποθηκεύσει κάθε κόμβος τα 8000 terabyte νέων δεδομένων που δημιουργούνται ετησίως;

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

Η λύση κατακερματισμού

Λοιπόν, πώς επιλύουμε το πρόβλημα της επεκτασιμότητας δεδομένων; Πώς μπορούμε να επωφεληθούμε από την αποκεντρωμένη συμβολαιοποίηση δεδομένων του blockchain, χωρίς να αναπαράγουμε αυτά τα δεδομένα σε κάθε κόμβο της αλυσίδας;

Η απάντηση είναι με ένα έξυπνο κομμάτι της τεχνολογίας που ονομάζεται «hash». Ο κατακερματισμός είναι ένας μεγάλος αριθμός (σκεφτείτε 256 bit ή περίπου 80 δεκαδικά ψηφία) που αναγνωρίζει μοναδικά ένα κομμάτι δεδομένων. Το κατακερματισμό υπολογίζεται από τα δεδομένα χρησιμοποιώντας ένα μονόδρομη λειτουργία που έχει μια σημαντική κρυπτογραφική ιδιότητα: Δεδομένου οποιουδήποτε κομματιού δεδομένων, είναι εύκολο και γρήγορο να υπολογιστεί το κατακερματισμό του. Ωστόσο, δεδομένου ενός συγκεκριμένου κατακερματισμού, είναι υπολογιστικά ανέφικτο να βρούμε ένα κομμάτι δεδομένων που θα δημιουργούσε αυτό το κατακερματισμό. Και όταν λέμε «υπολογιστικά ανέφικτο», εννοούμε περισσότερους υπολογισμούς από ό, τι υπάρχουν άτομα στο γνωστό σύμπαν.

Τα Hashes διαδραματίζουν καθοριστικό ρόλο σε όλα τα blockchain, εντοπίζοντας μοναδικά τις συναλλαγές και τα block. Υποστηρίζουν επίσης την υπολογιστική πρόκληση σε συστήματα απόδειξης εργασίας όπως το bitcoin. Έχουν αναπτυχθεί πολλές διαφορετικές λειτουργίες κατακερματισμού, με ονόματα gobbledygook όπως BLAKE2, MD5 και RIPEMD160. Αλλά για να είναι αξιόπιστη οποιαδήποτε λειτουργία κατακερματισμού, πρέπει να υποστεί εκτεταμένη ακαδημαϊκή αναθεώρηση και δοκιμή. Αυτά τα τεστ έρχονται με τη μορφή απόπειρων επιθέσεων, όπως «preimage» (εύρεση εισόδου με το δεδομένο hash), «δεύτερο preimage» (εύρεση δεύτερης εισόδου με το ίδιο hash με τη δεδομένη είσοδο) και «σύγκρουση» (εύρεση οποιασδήποτε δύο διαφορετικές εισόδους με το ίδιο κατακερματισμό). Η επιβίωση σε αυτό το γάντι δεν είναι καθόλου εύκολη, με μια μακρά και τραγική ιστορία σπασμένων λειτουργιών κατακερματισμού που αποδεικνύει το περίφημο αξίωμα: "Μην ξεδιπλώνετε τη δική σας κρυπτογράφηση."

Για να επιστρέψουμε στο αρχικό μας πρόβλημα, μπορούμε να λύσουμε τη δυνατότητα κλιμάκωσης δεδομένων σε blockchain με την ενσωμάτωση των κατακερματισμών μεγάλων κομματιών δεδομένων σε συναλλαγές, αντί για τα ίδια τα δεδομένα. Κάθε κατακερματισμός ενεργεί ως «δέσμευση» στα δεδομένα εισόδου του, με τα ίδια τα δεδομένα να αποθηκεύονται έξω από το blockchain ή «εκτός αλυσίδας». Για παράδειγμα, χρησιμοποιώντας τη δημοφιλή συνάρτηση κατακερματισμού SHA256, μια εικόνα JPEG 500 kilobyte μπορεί να αναπαρασταθεί με έναν αριθμό 32 byte, με μείωση άνω των 15,000 ×. Ακόμη και με ρυθμό 500 εικόνων ανά δευτερόλεπτο, αυτό μας φέρνει άνετα πίσω στην περιοχή του εφικτού εύρους ζώνης και απαιτήσεων αποθήκευσης, όσον αφορά τα δεδομένα που είναι αποθηκευμένα στην ίδια την αλυσίδα.

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

Ένα ζήτημα παράδοσης

Μέχρι εδώ καλά. Με την ενσωμάτωση κατακερματισμού σε ένα blockchain αντί για τα αρχικά δεδομένα, έχουμε μια εύκολη λύση στο πρόβλημα της επεκτασιμότητας. Ωστόσο, παραμένει ένα κρίσιμο ερώτημα:

Πώς παραδίδουμε το αρχικό περιεχόμενο εκτός αλυσίδας σε εκείνους τους κόμβους που το χρειάζονται, αν όχι μέσω της ίδιας της αλυσίδας;

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

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

  • Απαιτεί έναν χάρτη διευθύνσεων blockchain σε διευθύνσεις IP, για να επιτρέψει στον καταναλωτή ορισμένων δεδομένων να επικοινωνεί απευθείας με τον εκδότη του. Το Blockchains μπορεί γενικά να αποφύγει αυτόν τον τύπο στατικής διαμόρφωσης δικτύου, το οποίο μπορεί να είναι ένα πρόβλημα όσον αφορά το failover και το απόρρητο.
  • Εάν ο αρχικός κόμβος εκδότη έχει εγκαταλείψει το δίκτυο ή είναι προσωρινά εκτός λειτουργίας, τότε τα δεδομένα δεν μπορούν να ανακτηθούν από κανέναν άλλο.
  • Εάν ένας μεγάλος αριθμός κόμβων ενδιαφέρεται για ορισμένα δεδομένα, τότε ο εκδότης θα κατακλυστεί από αιτήματα. Αυτό μπορεί να δημιουργήσει σοβαρή συμφόρηση δικτύου, να επιβραδύνει το σύστημα του εκδότη και να οδηγήσει σε μεγάλες καθυστερήσεις για όσους προσπαθούν να ανακτήσουν αυτά τα δεδομένα.

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

Για όσους έχουν εμπειρία με κοινή χρήση αρχείων peer-to-peer πρωτόκολλα όπως το Napster, το Gnutella ή το BitTorrent, όλα αυτά θα ακούγονται πολύ οικεία. Πράγματι, πολλές από τις βασικές αρχές είναι οι ίδιες, αλλά υπάρχουν δύο βασικές διαφορές. Πρώτον, υποθέτοντας ότι χρησιμοποιούμε το blockchain μας σε εταιρικό πλαίσιο, το σύστημα λειτουργεί μέσα σε μια κλειστή ομάδα συμμετεχόντων και όχι στο Διαδίκτυο ως σύνολο. Δεύτερον, το blockchain προσθέτει μια αποκεντρωμένη σπονδυλική στήλη παραγγελιών, χρονικής σήμανσης και συμβολαιογράφησης, επιτρέποντας σε όλους τους χρήστες να διατηρούν μια αποδεδειγμένα συνεπή και ανθεκτική σε παραβίαση εικόνα του τι συνέβη, πότε και από ποιον.

Πώς μπορεί ένας προγραμματιστής εφαρμογών blockchain να επιτύχει αυτήν την αποκεντρωμένη παράδοση περιεχομένου εκτός αλυσίδας; Μια κοινή επιλογή είναι να πάρετε μια υπάρχουσα πλατφόρμα ανταλλαγής αρχείων peer-to-peer, όπως το διασκεδαστικό όνομα Διαπλανητικό σύστημα αρχείων (IPFS) και χρησιμοποιήστε το μαζί με το blockchain. Κάθε συμμετέχων εκτελεί έναν κόμβο blockchain και έναν κόμβο IPFS, με κάποιο μεσαίο λογισμικό να συντονίζεται μεταξύ των δύο. Κατά τη δημοσίευση δεδομένων εκτός αλυσίδας, αυτό το μεσαίο λογισμικό αποθηκεύει τα αρχικά δεδομένα στο IPFS και, στη συνέχεια, δημιουργεί μια συναλλαγή blockchain που περιέχει τον κατακερματισμό αυτών των δεδομένων. Για να ανακτήσετε ορισμένα δεδομένα εκτός αλυσίδας, το μεσαίο λογισμικό εξάγει τον κατακερματισμό από το blockchain και, στη συνέχεια, χρησιμοποιεί αυτόν τον κατακερματισμό για να πάρει το περιεχόμενο από το IPFS. Ο τοπικός κόμβος IPFS επαληθεύει αυτόματα το ανακτημένο περιεχόμενο έναντι του κατακερματισμού για να διασφαλίσει ότι δεν έχει αλλάξει.

Ενώ αυτή η λύση είναι δυνατή, είναι μάλλον αδέξια και άβολη. Πρώτον, κάθε συμμετέχων πρέπει να εγκαταστήσει, να συντηρήσει και να ενημερώσει τρία ξεχωριστά κομμάτια λογισμικού (blockchain node, IPFS node και middleware), καθένα από τα οποία αποθηκεύει τα δεδομένα του σε ξεχωριστό μέρος. Δεύτερον, θα υπάρχουν δύο ξεχωριστά δίκτυα peer-to-peer, το καθένα με τη δική του διαμόρφωση, θύρες δικτύου, σύστημα ταυτότητας και άδεια (αν και πρέπει να σημειωθεί ότι το IPFS δεν υποστηρίζει ακόμη κλειστά δίκτυα). Τέλος, η στενή σύνδεση του IPFS και του blockchain θα έκανε το middleware όλο και πιο περίπλοκο. Για παράδειγμα, εάν θέλουμε τα δεδομένα εκτός αλυσίδας που αναφέρονται από ορισμένες συναλλαγές blockchain να ανακτηθούν άμεσα (με αυτόματες επαναλήψεις), το μεσαίο λογισμικό θα πρέπει να είναι συνεχώς σε λειτουργία και να λειτουργεί, διατηρώντας τη δική του περίπλοκη κατάσταση. Δεν θα ήταν ωραίο εάν ο κόμβος blockchain τα έκανε όλα αυτά για εμάς;

Δεδομένα εκτός αλυσίδας στο MultiChain 2.0

Σήμερα είμαστε στην ευχάριστη θέση να κυκλοφορήσουμε το τρίτη έκδοση προεπισκόπησης (άλφα 3) του MultiChain 2.0, με μια πλήρως ολοκληρωμένη και απρόσκοπτη λύση για δεδομένα εκτός αλυσίδας. Κάθε πληροφορία που δημοσιεύεται σε μια ροή μπορεί να είναι on-chain ή εκτός αλυσίδας όπως επιθυμείτε, και το MultiChain φροντίζει τα πάντα.

Όχι πραγματικά, εννοούμε πάντα. Ως προγραμματιστής που βασίζεται στο MultiChain, δεν θα ανησυχείτε για κατακερματισμούς, τοπικό χώρο αποθήκευσης, ανακάλυψη περιεχομένου, αποκεντρωμένη παράδοση ή επαλήθευση δεδομένων. Να τι συμβαίνει πίσω από τα παρασκήνια:

  1. Ο κόμβος MultiChain έκδοσης γράφει τα νέα δεδομένα στον τοπικό του χώρο αποθήκευσης, τεμαχίζοντας μεγάλα αντικείμενα σε κομμάτια για εύκολη πέψη και παράδοση.
  2. Η συναλλαγή για τη δημοσίευση στοιχείων ροής εκτός αλυσίδας δημιουργείται αυτόματα, που περιέχει τα κομμάτια κατακερματισμού και τα μεγέθη σε byte.
  3. Αυτή η συναλλαγή υπογράφεται και μεταδίδεται στο δίκτυο, διαδίδεται μεταξύ κόμβων και εισέρχεται στο blockchain με τον συνηθισμένο τρόπο.
  4. Όταν ένας κόμβος εγγεγραμμένος σε μια ροή βλέπει μια αναφορά σε ορισμένα δεδομένα εκτός αλυσίδας, προσθέτει τα τεμάχια κατακερματισμού για αυτά τα δεδομένα στην ουρά ανάκτησης. (Κατά την εγγραφή σε μια παλιά ροή, ένας κόμβος αναβάλλει επίσης την ουρά οποιωνδήποτε προηγουμένως δημοσιευμένων στοιχείων εκτός αλυσίδας για ανάκτηση.)
  5. Ως διαδικασία παρασκηνίου, εάν υπάρχουν κομμάτια στην ουρά ανάκτησης ενός κόμβου, τα ερωτήματα αποστέλλονται στο δίκτυο για να εντοπίσουν αυτά τα κομμάτια, όπως προσδιορίζονται από τους κατακερματισμούς τους.
  6. Αυτά τα ερωτήματα κομμάτι διαδίδονται σε άλλους κόμβους στο δίκτυο με τρόπο peer-to-peer (περιορίζεται σε δύο λυκίσκους προς το παρόν - δείτε τις τεχνικές λεπτομέρειες παρακάτω).
  7. Κάθε κόμβος που έχει τα δεδομένα για ένα κομμάτι μπορεί να ανταποκριθεί και αυτή η απόκριση μεταδίδεται στον συνδρομητή πίσω στην ίδια διαδρομή με το ερώτημα.
  8. Εάν κανένας κόμβος δεν απαντήσει στο ερώτημα κομμάτι, το κομμάτι επιστρέφει στην ουρά για μελλοντική επανάληψη.
  9. Διαφορετικά, ο συνδρομητής επιλέγει την πιο ελπιδοφόρα πηγή για ένα κομμάτι (με βάση το λυκίσκο και το χρόνο απόκρισης) και του στέλνει ένα αίτημα για τα δεδομένα αυτού του κομματιού, ξανά κατά μήκος της ίδιας διαδρομής peer-to-peer με την προηγούμενη απόκριση.
  10. Ο κόμβος προέλευσης παραδίδει τα ζητούμενα δεδομένα, χρησιμοποιώντας ξανά την ίδια διαδρομή.
  11. Ο συνδρομητής επαληθεύει το μέγεθος και τον κατακερματισμό των δεδομένων έναντι του αρχικού αιτήματος.
  12. Εάν τα πάντα ελέγχουν, ο συνδρομητής γράφει τα δεδομένα στον τοπικό του χώρο αποθήκευσης, καθιστώντας τα άμεσα διαθέσιμα για ανάκτηση μέσω των API ροής.
  13. Εάν το ζητούμενο περιεχόμενο δεν έφτασε, ή δεν ταιριάζει με το επιθυμητό κατακερματισμό ή μέγεθος, το κομμάτι επιστρέφεται στην ουρά για μελλοντική ανάκτηση από διαφορετική πηγή.

Το πιο σημαντικό, όλα αυτά συμβαίνουν εξαιρετικά γρήγορα. Σε δίκτυα με χαμηλό λανθάνοντα χρόνο, μικρά κομμάτια δεδομένων εκτός αλυσίδας θα φτάσουν στους συνδρομητές μέσα σε ένα δευτερόλεπτο της συναλλαγής που τους αναφέρει. Και για εφαρμογές υψηλού φορτίου, οι δοκιμές μας δείχνουν ότι το MultiChain 2.0 alpha 3 μπορεί να διατηρήσει ρυθμό άνω των 1000 στοιχείων εκτός αλυσίδας ή 25 MB δεδομένων αλυσίδας εκτός ανάκτησης ανά δευτερόλεπτο, σε διακομιστή μεσαίας εμβέλειας (Core i7) με αξιοπρεπή Σύνδεση στο Internet. Όλα λειτουργούν καλά με αντικείμενα εκτός αλυσίδας μεγέθους έως 1 GB, πολύ πέρα ​​από το όριο των 64 MB για δεδομένα σε αλυσίδα. Φυσικά, ελπίζουμε να βελτιώσουμε περαιτέρω αυτούς τους αριθμούς καθώς ξοδεύουμε χρόνο βελτιστοποιώντας το MultiChain 2.0 κατά τη διάρκεια της φάσης beta.

Κατά τη χρήση δεδομένων εκτός αλυσίδας και όχι δεδομένων αλυσίδας σε ροές, οι προγραμματιστές εφαρμογών MultiChain πρέπει να κάνουν ακριβώς δύο πράγματα:

  • Κατά τη δημοσίευση δεδομένων, μεταβιβάστε μια σημαία "εκτός αλυσίδας" στα κατάλληλα API.
  • Όταν χρησιμοποιείτε τα API ερωτήματος ροής, εξετάστε την πιθανότητα ότι ορισμένα δεδομένα εκτός αλυσίδας ενδέχεται να μην είναι ακόμη διαθέσιμα, όπως αναφέρεται από τη σημαία "διαθέσιμο". Ενώ αυτή η κατάσταση θα είναι σπάνια υπό κανονικές συνθήκες, είναι σημαντικό για τους προγραμματιστές εφαρμογών να το χειριστούν κατάλληλα.

Φυσικά, για να αποφευχθεί η ανάκτηση κάθε κόμβου κάθε στοιχείου εκτός αλυσίδας, τα αντικείμενα πρέπει να ομαδοποιούνται σε ροές με τον κατάλληλο τρόπο, με κάθε κόμβο να εγγράφεται σε αυτές τις ροές ενδιαφέροντος.

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

Αν θέλετε να δοκιμάσετε στοιχεία ροής εκτός αλυσίδας, απλώς ακολουθήστε την τακτική του MultiChain Ξεκινώντας φροντιστήριο και φροντίστε να μην παραλείψετε την ενότητα 5.

Λοιπόν τι ακολουθεί?

Με απρόσκοπτη υποστήριξη για δεδομένα εκτός αλυσίδας, το MultiChain 2.0 θα προσφέρει ένα μεγάλο βήμα προς τα εμπρός για εφαρμογές blockchain που εστιάζουν σε χρονική σήμανση και συμβολαιογράφηση δεδομένων μεγάλης κλίμακας. Μακροπρόθεσμα, σκεφτόμαστε ήδη έναν τόνο πιθανών μελλοντικών βελτιώσεων σε αυτήν τη δυνατότητα για τις εκδόσεις της κοινότητας ή / και του Enterprise MultiChain:

  • Εφαρμογή ροής ανάγνωση άδειες χρησιμοποιώντας έναν συνδυασμό ειδών εκτός αλυσίδας, αλατισμένων κατακερματισμών, υπογεγραμμένων τεμαχίων και κρυπτογραφημένης παράδοσης.
  • Επιτρέποντας στα δεδομένα εκτός αλυσίδας να "ξεχαστούν" ρητά, τόσο εθελοντικά από μεμονωμένους κόμβους, είτε από όλους τους κόμβους σε απάντηση σε ένα μήνυμα στην αλυσίδα.
  • Επιλεκτικές συνδρομές ροής, στις οποίες οι κόμβοι ανακτούν μόνο τα δεδομένα για στοιχεία εκτός αλυσίδας με συγκεκριμένους εκδότες ή κλειδιά.
  • Χρησιμοποιώντας δέντρα merkle για να επιτρέψει σε έναν μόνο κατακερματισμό για να αντιπροσωπεύει έναν απεριόριστο αριθμό αντικειμένων εκτός αλυσίδας, δίνοντας ένα άλλο τεράστιο άλμα όσον αφορά την επεκτασιμότητα
  • Μηχανές αποθήκευσης με δυνατότητα σύνδεσης, επιτρέποντας την αποθήκευση δεδομένων εκτός αλυσίδας σε βάσεις δεδομένων ή εξωτερικά συστήματα αρχείων και όχι σε τοπικό δίσκο.
  • Οι κόμβοι μαθαίνουν με την πάροδο του χρόνου, όπου κάθε τύπος δεδομένων εκτός αλυσίδας είναι συνήθως διαθέσιμος σε ένα δίκτυο και εστιάζοντας σωστά τα ερωτήματά τους.

Θα θέλαμε πολύ ακούστε τα σχόλιά σας στην παραπάνω λίστα, καθώς και είδη εκτός αλυσίδας γενικά. Με το MultiChain 2.0 ακόμα επίσημα σε άλφα, υπάρχει αρκετός χρόνος για να βελτιωθεί αυτή η δυνατότητα πριν από την τελική της κυκλοφορία.

Εν τω μεταξύ, έχουμε ήδη ξεκινήσει να δουλεύουμε στο "Smart Filters", το τελευταίο σημαντικό χαρακτηριστικό που σχεδιάστηκε για την κοινότητα MultiChain 2.0. Το Έξυπνο φίλτρο είναι ένα κομμάτι κώδικα που είναι ενσωματωμένο στο blockchain και εφαρμόζει προσαρμοσμένους κανόνες για την επικύρωση δεδομένων ή συναλλαγών. Τα έξυπνα φίλτρα έχουν κάποιες ομοιότητες με τα «έξυπνα συμβόλαια» και μπορούν να κάνουν πολλά από τα ίδια πράγματα, αλλά έχουν βασικές διαφορές όσον αφορά την ασφάλεια και την απόδοση. Ανυπομονούμε να σας πούμε περισσότερα σε εύθετο χρόνο.

Παρακαλώ δημοσιεύστε τυχόν σχόλια στο LinkedIn.

Τεχνικές λεπτομέρειες

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

  • Πολιτικές ανά ροή. Όταν δημιουργείται μια ροή MultiChain, μπορεί προαιρετικά να περιορίζεται ώστε να επιτρέπει μόνο δεδομένα εντός ή εκτός αλυσίδας. Υπάρχουν πολλοί πιθανοί λόγοι για αυτό, αντί να επιτρέπεται σε κάθε εκδότη να αποφασίσει για τον εαυτό του. Για παράδειγμα, τα είδη on-chain προσφέρουν μια εγγύηση διαθεσιμότητας, ενώ τα παλιά προϊόντα εκτός αλυσίδας μπορεί να γίνουν ανεπανόρθωτα εάν ο εκδότης και άλλοι συνδρομητές τους εγκαταλείψουν το δίκτυο. Από την άλλη πλευρά, τα αντικείμενα της αλυσίδας δεν μπορούν να «ξεχαστούν» χωρίς να τροποποιηθεί το blockchain, ενώ τα αντικείμενα εκτός αλυσίδας είναι πιο ευέλικτα. Αυτό μπορεί να είναι σημαντικό όσον αφορά τους κανόνες απορρήτου δεδομένων, όπως οι νέοι κανονισμοί GDPR της Ευρώπης.
  • Μεταδεδομένα εντός αλυσίδας. Για στοιχεία εκτός αλυσίδας, η συναλλαγή εντός αλυσίδας εξακολουθεί να περιέχει τους εκδότες, τα κλειδιά, τη μορφή (JSON, κείμενο ή δυαδικό) και το συνολικό μέγεθος του αντικειμένου. Όλα αυτά καταλαμβάνουν πολύ λίγο χώρο και βοηθούν τους προγραμματιστές εφαρμογών να προσδιορίσουν εάν η μη διαθεσιμότητα ενός στοιχείου εκτός αλυσίδας ανησυχεί για ένα συγκεκριμένο ερώτημα ροής.
  • Όριο δύο λυκίσκων. Κατά την αναμετάδοση ερωτημάτων σε ολόκληρο το δίκτυο peer-to-peer, υπάρχει μια αντιστάθμιση μεταξύ της δυνατότητας πρόσβασης και της απόδοσης. Ενώ θα ήταν ωραίο να μεταδίδεται κάθε ερώτημα σε κάθε διαδρομή, αυτό μπορεί να φράξει το δίκτυο με περιττή «συνομιλία». Έτσι, προς το παρόν τα τεμάχια των ερωτημάτων περιορίζονται σε δύο λυκίσκους, πράγμα που σημαίνει ότι ένας κόμβος μπορεί να ανακτήσει δεδομένα εκτός αλυσίδας από οποιονδήποτε από τους ομότιμους του. Στα μικρότερα δίκτυα κάτω των 1000 κόμβων που τείνουν να χαρακτηρίζουν τις επιχειρήσεις blockchain, πιστεύουμε ότι αυτό θα λειτουργήσει μια χαρά, αλλά είναι εύκολο για εμάς να προσαρμόσουμε αυτόν τον περιορισμό (ή να το προσφέρουμε ως παράμετρος) εάν αποδειχτούμε λάθος.
  • Τοπική αποθήκευση. Κάθε κόμβος MultiChain αποθηκεύει δεδομένα εκτός αλυσίδας στον κατάλογο "κομμάτια" του κανονικού καταλόγου blockchain, χρησιμοποιώντας μια αποτελεσματική δυαδική μορφή και ευρετήριο LevelDB. Ένας ξεχωριστός υποκατάλογος χρησιμοποιείται για τα στοιχεία σε κάθε μία από τις εγγραφείσες ροές, καθώς και για αυτά που δημοσιεύονται από τον ίδιο τον κόμβο. Σε κάθε έναν από αυτούς τους υποκαταλόγους, τα διπλά κομμάτια (με τον ίδιο κατακερματισμό) αποθηκεύονται μόνο μία φορά. Όταν ένας κόμβος διαγραφεί από μια ροή, μπορεί να επιλέξει εάν θα εκκαθαρίσει τα δεδομένα εκτός αλυσίδας που ανακτήθηκαν για αυτήν τη ροή.
  • Δυαδική προσωρινή μνήμη. Κατά τη δημοσίευση μεγάλων τμημάτων δυαδικών δεδομένων, είτε εντός ή εκτός αλυσίδας, ενδέχεται να μην είναι πρακτικό για τους προγραμματιστές εφαρμογών να στέλνουν αυτά τα δεδομένα στο API του MultiChain σε ένα μόνο αίτημα JSON-RPC. Έτσι, το MultiChain 2.0 εφαρμόζει μια δυαδική προσωρινή μνήμη, η οποία επιτρέπει τη δημιουργία μεγάλων τμημάτων δεδομένων μέσω πολλαπλών κλήσεων API και στη συνέχεια δημοσιεύεται σε ένα σύντομο τελικό βήμα. Κάθε στοιχείο της δυαδικής προσωρινής μνήμης αποθηκεύεται ως απλό αρχείο στον υποκατάλογο "προσωρινή μνήμη" του καταλόγου blockchain, επιτρέποντας την προώθηση δεδομένων gigabytes απευθείας μέσω του συστήματος αρχείων.
  • Παρακολούθηση API. Το MultiChain 2.0 alpha 3 προσθέτει δύο νέα API για την παρακολούθηση της ασύγχρονης ανάκτησης δεδομένων εκτός αλυσίδας. Το πρώτο API περιγράφει την τρέχουσα κατάσταση της ουράς, δείχνοντας πόσα κομμάτια (και πόσα δεδομένα) περιμένουν ή ανακτώνται ή ανακτώνται. Το δεύτερο API παρέχει συγκεντρωτικά στατιστικά στοιχεία για όλα τα ερωτήματα και τα αιτήματα που έχουν σταλεί από την έναρξη του κόμβου, συμπεριλαμβανομένων των μετρήσεων διαφορετικών τύπων αποτυχίας.
  • Εκκενώστε τη δημοσίευση. Κατά τη δημοσίευση ενός στοιχείου εκτός αλυσίδας, το MultiChain διασφαλίζει ότι το τοπικό αντίγραφο των δεδομένων είναι πλήρως γραμμένο (ή "ξεπλυμένο") στη μονάδα φυσικού δίσκου πριν από τη συναλλαγή που αναφέρεται ότι αυτά τα δεδομένα μεταδίδονται στο δίκτυο. Διαφορετικά, εάν ο κόμβος ήταν αρκετά άτυχος για να χάσει ενέργεια αμέσως μετά τη μετάδοση της συναλλαγής, τα δεδομένα εκτός αλυσίδας θα μπορούσαν να χαθούν μόνιμα. Αυτό δεν είναι πρόβλημα για το ίδιο το MultiChain, καθώς οι καθυστερήσεις μεταξύ των προσπαθειών ανάκτησης ενός κομματιού αυξάνονται αυτόματα με την πάροδο του χρόνου. Αλλά θα μπορούσε να προκαλέσει προβλήματα σε επίπεδο εφαρμογής, όπου όλοι γνωρίζουν την ύπαρξη ορισμένων δεδομένων, αλλά κανείς δεν μπορεί να τα βρει.
  • Απόδοση δημοσίευσης. Με τη μεταφορά δεδομένων εκτός αλυσίδας στο δίσκο με αυτόν τον τρόπο, το MultiChain μπορεί να επιβάλει ποινή απόδοσης, καθώς οι φυσικοί δίσκοι είναι αργοί. Για παράδειγμα, ένας σκληρός δίσκος μεσαίου εύρους 7200 σ.α.λ. μπορεί να εκτελέσει μόνο περίπου 100 τυχαίες εγγραφές δεδομένων ανά δευτερόλεπτο, περιορίζοντας με τη σειρά του το ρυθμό με τον οποίο ένας μεμονωμένος κόμβος μπορεί να δημοσιεύσει αντικείμενα εκτός αλυσίδας. Υπάρχουν τρεις πιθανές λύσεις για αυτό το πρόβλημα. Πρώτα και πιο απλά, οι κόμβοι μπορούν να χρησιμοποιούν μια μονάδα SSD αντί για έναν κανονικό σκληρό δίσκο, ο οποίος υποστηρίζει 10,000 λειτουργίες τυχαίας εγγραφής ανά δευτερόλεπτο. Δεύτερον, πολλά στοιχεία εκτός αλυσίδας μπορούν να δημοσιευτούν σε μία μόνο συναλλαγή χρησιμοποιώντας το API «createrawsendfrom». Σε αυτήν την περίπτωση, το MultiChain γράφει όλα τα δεδομένα εκτός αλυσίδας που αναφέρονται από μια συναλλαγή σε λειτουργία ενός δίσκου. Τέλος, το MultiChain μπορεί να ρυθμιστεί ώστε να μην ξεπλένει δεδομένα εκτός αλυσίδας στο δίσκο πριν μεταδώσει τη συναλλαγή που αναφέρεται. Χρησιμοποιήστε αυτήν την επιλογή με προσοχή.
  • Ενσωμάτωση εγγενών νομισμάτων. Για περιπτώσεις χρήσης που το απαιτούν, το MultiChain πάντα προσέφερε την επιλογή να χρησιμοποιεί ένα εγγενές νόμισμα σε ένα blockchain για την αποτροπή ανεπιθύμητων συναλλαγών και / ή την παροχή κινήτρων στους επικυρωτές αποκλεισμού ("ανθρακωρύχοι"). Σε αυτές τις περιπτώσεις, οι συναλλαγές πρέπει να προσφέρουν στους ανθρακωρύχους ένα ελάχιστο τέλος που είναι ανάλογο με το μέγεθός τους σε byte, προκειμένου να μεταδίδονται και να επιβεβαιώνονται στην αλυσίδα. Αυτός ο μηχανισμός επεκτάθηκε για να επιτρέψει την αποτροπή ανεπιθύμητων ανεπιθύμητων μηνυμάτων, απαιτώντας ένα ελάχιστο πρόσθετο τέλος ανά kilobyte δεδομένων εκτός αλυσίδας που αναφέρονται σε μια συναλλαγή.
  • Αρχείο κόμβων. Εάν ένας κόμβος επιθυμεί να εγγραφεί σε κάθε ροή και συνεπώς να ανακτήσει και να αποθηκεύσει κάθε δημοσιευμένο στοιχείο εκτός αλυσίδας, μπορεί να ρυθμιστεί να το κάνει χρησιμοποιώντας την παράμετρο χρόνου εκτέλεσης "αυτόματη εγγραφή". Οποιοσδήποτε τέτοιος κόμβος θα λειτουργεί ως αντίγραφο ασφαλείας για ολόκληρο το δίκτυο, διασφαλίζοντας ότι τα στοιχεία εκτός αλυσίδας δεν θα χαθούν ή δεν θα είναι διαθέσιμα, ανεξάρτητα από το ποιοι άλλοι κόμβοι εξαφανίζονται. Κάποιος μπορεί να φανταστεί εταιρείες τρίτων που το προσφέρουν ως εμπορική υπηρεσία.

Πλήρεις λεπτομέρειες όλων των σχετικών κλήσεων και παραμέτρων API μπορείτε να βρείτε στο Σελίδα προεπισκόπησης MultiChain 2.0.

Σφραγίδα ώρας:

Περισσότερα από Πολλαπλές αλυσίδες