Παρουσιάζουμε τις ροές MultiChain

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

Για κοινόχρηστες αμετάβλητες βάσεις δεδομένων κλειδιού-τιμής και χρονοσειρών

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

  1. Βάση δεδομένων κλειδιού ή αποθήκευσης εγγράφων, με το στυλ της NoSQL.
  2. Μια βάση δεδομένων χρονοσειρών, η οποία επικεντρώνεται στη σειρά των καταχωρήσεων.
  3. Μια βάση δεδομένων βάσει ταυτότητας όπου οι καταχωρήσεις ταξινομούνται σύμφωνα με τον συντάκτη τους.

Αυτά μπορούν να θεωρηθούν ως «τι», «πότε» και «ποιος» μιας κοινής βάσης δεδομένων.

Βασικά στοιχεία ροής

Οποιοσδήποτε αριθμός ροών μπορεί να δημιουργηθεί σε ένα blockchain MultiChain και κάθε ροή λειτουργεί ως μια ανεξάρτητη συλλογή στοιχείων μόνο για προσάρτημα. Κάθε στοιχείο σε μια ροή έχει τα ακόλουθα χαρακτηριστικά:

  • Ενα ή περισσότερα Εκδότες που έχουν υπογράψει ψηφιακά αυτό το αντικείμενο.
  • Προαιρετικό κλειδί για βολική μετέπειτα ανάκτηση.
  • Μερικοί ημερομηνία, το οποίο μπορεί να κυμαίνεται από ένα μικρό κομμάτι κειμένου έως πολλά megabyte ακατέργαστου δυαδικού.
  • A timestamp, το οποίο λαμβάνεται από την κεφαλίδα του μπλοκ στο οποίο επιβεβαιώνεται το αντικείμενο.

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

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

Κάθε blockchain έχει μια προαιρετική ροή «root», η οποία ορίζεται σε αυτήν παράμετροι και υπάρχει από τη στιγμή που δημιουργείται η αλυσίδα. Αυτό επιτρέπει την άμεση χρήση ενός blockchain για την αποθήκευση και ανάκτηση δεδομένων, χωρίς να περιμένετε να δημιουργηθεί ρητά μια ροή.

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

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

Αυτό παρέχει έναν αποτελεσματικό τρόπο αρχειοθέτησης δεδομένων σε ένα blockchain, καθιστώντας τα ορατά μόνο σε συγκεκριμένους συμμετέχοντες.

Ανάκτηση από ροές

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

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

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

Όπως αναφέρθηκε στην αρχή, αυτές οι μέθοδοι ανάκτησης επιτρέπουν τη χρήση ροών βάσεις δεδομένων κλειδιού-τιμής, βάσεις δεδομένων χρονοσειρών και βάσεις δεδομένων που βασίζονται στην ταυτότητα. Όλες οι API ανάκτησης προσφέρουν Εκκίνηση και μετράνε παραμέτρους, επιτρέποντας την αποτελεσματική ανάκτηση των υποτμημάτων των μεγάλων λιστών (όπως μια ρήτρα LIMIT στο SQL). Αρνητικές τιμές για Εκκίνηση επιτρέψτε την ανάκτηση των πιο πρόσφατων στοιχείων.

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

Λάβετε υπόψη ότι λόγω της αρχιτεκτονικής peer-to-peer ενός blockchain, τα στοιχεία σε μια ροή ενδέχεται να φτάσουν σε διαφορετικούς κόμβους με διαφορετικές παραγγελίες και το MultiChain επιτρέπει την ανάκτηση στοιχείων πριν "επιβεβαιωθούν" σε ένα μπλοκ. Ως αποτέλεσμα, όλα τα API ανάκτησης προσφέρουν μια επιλογή μεταξύ καθολικής (προεπιλεγμένης) ή τοπικής παραγγελίας. Η καθολική παραγγελία εγγυάται ότι, όταν η αλυσίδα καταλήξει σε συναίνεση, όλοι οι κόμβοι λαμβάνουν τις ίδιες απαντήσεις από τις ίδιες κλήσεις API. Η τοπική παραγγελία εγγυάται ότι, για οποιονδήποτε συγκεκριμένο κόμβο, η σειρά των στοιχείων μιας ροής δεν θα αλλάξει ποτέ μεταξύ των κλήσεων API. Κάθε εφαρμογή μπορεί να κάνει την κατάλληλη επιλογή για τις ανάγκες της.

Ροές και ο χάρτης πορείας MultiChain

Με την κυκλοφορία ροών, ολοκληρώσαμε την τελευταία σημαντική δουλειά για το MultiChain 1.0 και τώρα είμαστε σταθερά στο δρόμο προς το beta. Αναμένουμε να περάσουμε τους επόμενους μήνες επεκτείνοντας την εσωτερική μας δοκιμαστική σουίτα (ήδη αρκετά μεγάλη!), Ολοκληρώνοντας τις θύρες Windows και Mac, προσθέτοντας μερικά πιο χρήσιμα API, ενημερώνοντας το εξερευνητής για ροές, τροποποιήσεις πτυχών του μηχανισμού συναίνεσης, απελευθέρωση της επίδειξης ιστού και γενικά για την τακτοποίηση μηνυμάτων κώδικα και βοήθειας. Το πιο σημαντικό, θα συνεχίσουμε να διορθώνουμε σφάλματα μόλις ανακαλυφθούν, έτσι ώστε τα λάθη μας να μην διακόπτουν τη δουλειά σας.

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

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

Μετά την κυκλοφορία του MultiChain 1.0 (και μια premium έκδοση), τι ακολουθεί σε αυτήν τη λίστα; Αν κοιτάξετε το Εντολή API που χρησιμοποιείται για τη δημιουργία ροών, θα παρατηρήσετε μια φαινομενικά περιττή παράμετρο, με μια σταθερή τιμή stream. Αυτή η παράμετρος θα επιτρέψει στο MultiChain να υποστηρίζει άλλους τύπους οντοτήτων υψηλού επιπέδου στο μέλλον.

Οι πιθανές μελλοντικές τιμές για την παράμετρο περιλαμβάνουν evm (για ένα Ethereum-συμβατή εικονική μηχανή), sql (για μια βάση δεδομένων τύπου SQL) ή ακόμα και wiki (για συνεργατικό κείμενο). Οποιαδήποτε κοινόχρηστη οντότητα της οποίας η κατάσταση καθορίζεται από μια σειρά αλλαγών είναι πιθανός υποψήφιος. Κάθε τέτοια οντότητα θα χρειαστεί: (α) API που παρέχουν τη σωστή αφαίρεση για την ενημέρωση της κατάστασής του, (β) κατάλληλους μηχανισμούς για εγγεγραμμένους κόμβους για την παρακολούθηση αυτής της κατάστασης και (γ) API για την αποτελεσματική ανάκτηση μέρους ή όλου του κράτους. Περιμένουμε να μάθουμε ποιες άλλες οντότητες υψηλού επιπέδου θα ήταν πιο χρήσιμες, για να εφαρμοστούν από εμάς ή από τρίτα μέρη μέσω μιας αρχιτεκτονικής προσθήκης.

Τι γίνεται με τις έξυπνες συμβάσεις;

Σε γενικές γραμμές, το MultiChain ακολουθεί την προσέγγιση με την οποία ημερομηνία είναι ενσωματωμένο αμετάβλητα σε ένα blockchain, αλλά το κωδικός για την ερμηνεία ότι τα δεδομένα βρίσκονται στον κόμβο ή στο επίπεδο εφαρμογής. Αυτό είναι σκόπιμα διαφορετικό από το πρότυπο «έξυπνων συμβάσεων», όπως φαίνεται από το Ethereum, στο οποίο ο κώδικας ενσωματώνεται στο blockchain και εκτελείται σε μια εικονική μηχανή. Θεωρητικά, επειδή οι έξυπνες συμβάσεις είναι Ολοκληρώθηκε, μπορούν να αναπαραγάγουν τη συμπεριφορά του MultiChain ή οποιασδήποτε άλλης πλατφόρμας blockchain. Στην πράξη, ωστόσο, τα έξυπνα συμβόλαια τύπου Ethereum έχουν πολλές οδυνηρές ελλείψεις:

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

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

 

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

 

Τεχνική προσθήκη

Όλες οι εντολές που σχετίζονται με ροές τεκμηριώνονται πλήρως στο Σελίδα API MultiChain, αλλά εδώ είναι μια σύντομη περίληψη:

  • Δημιουργήστε μια ροή χρησιμοποιώντας create stream or createfrom ... stream
  • Προσθέστε ένα στοιχείο σε μια ροή με publish or publishfrom
  • Ανακτήστε μια λίστα ροών χρησιμοποιώντας liststreams
  • Ξεκινήστε ή σταματήστε να παρακολουθείτε μια ροή με subscribe και unsubscribe
  • Ανάκτηση στοιχείων ροής χρησιμοποιώντας liststreamitems, liststreamkeyitems και liststreampublisheritems
  • Λίστα κλειδιών ροής και εκδοτών με liststreamkeys και liststreampublishers
  • Για μεγάλα στοιχεία ροής, ανακτήστε τα πλήρη δεδομένα χρησιμοποιώντας gettxoutdata (Βλ. maxshowndata παρακάτω)
  • Ελέγξτε τα δικαιώματα ανά ροή με κλήσεις όπως grant [address] stream1.write
  • Δείτε τα δικαιώματα μιας ροής χρησιμοποιώντας listpermissions stream1.*

Μερικές άλλες σημειώσεις προγραμματιστών που σχετίζονται με ροές:

  • Η create Η άδεια επιτρέπει σε μια διεύθυνση να δημιουργεί ροές.
  • Τα σχετικά δικαιώματα ανά ροή είναι write, admin και activate
  • Νέα παράμετροι blockchain: root-stream-name (αφήστε κενό για κανένα), root-stream-open, anyone-can-create, admin-consensus-create, max-std-op-returns-count
  • Νέα παράμετροι χρόνου εκτέλεσης: autosubscribe να εγγραφείτε αυτόματα σε νέες ροές που δημιουργήθηκαν και maxshowndata για να περιορίσετε την ποσότητα δεδομένων στις απαντήσεις API (βλ gettxoutdata πάνω από).
  • Το μέγιστο μέγεθος των δεδομένων ενός στοιχείου ροής καθορίζεται από το max-std-op-return-size παράμετρος blockchain, καθώς και η μικρότερη maximum-block-size και max-std-tx-size τιμές μείον μερικές εκατοντάδες byte.
  • Οι κόμβοι που χρησιμοποιούν την παλιά μορφή πορτοφολιού δεν μπορούν να εγγραφούν σε ροές και πρέπει να αναβαθμιστεί.

 

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

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