Ύφασμα Hyperledger για Ανδρείκελα

Μια πλατφόρμα Blockchain για την Επιχείρηση

Ύφασμα Hyperledger για Ανδρείκελα

Καλησπέρα, αγαπητοί αναγνώστες, με λένε Nikolay Nefedov, είμαι τεχνικός στην IBM, σε αυτό το άρθρο θα ήθελα να σας παρουσιάσω την πλατφόρμα blockchain - Hyperledger Fabric. Η πλατφόρμα έχει σχεδιαστεί για τη δημιουργία επιχειρηματικών εφαρμογών επιχειρηματικής κλάσης. Το επίπεδο του άρθρου είναι για απροετοίμαστους αναγνώστες με βασικές γνώσεις τεχνολογιών πληροφορικής.

Το Hyperledger Fabric είναι ένα έργο ανοιχτού κώδικα, ένας από τους κλάδους του έργου ανοιχτού κώδικα Hyperledger, μια κοινοπραξία του Ιδρύματος Linux. Το Hyperledger Fabric ξεκίνησε αρχικά από την Digital Assets και την IBM. Το κύριο χαρακτηριστικό της πλατφόρμας Hyperledger Fabric είναι η εστίασή της στην εταιρική χρήση. Ως εκ τούτου, η πλατφόρμα αναπτύχθηκε λαμβάνοντας υπόψη την υψηλή ταχύτητα των συναλλαγών και το χαμηλό κόστος τους, καθώς και την ταυτοποίηση όλων των συμμετεχόντων. Αυτά τα πλεονεκτήματα επιτυγχάνονται μέσω του διαχωρισμού της υπηρεσίας επαλήθευσης συναλλαγών και του σχηματισμού νέων μπλοκ του κατανεμημένου μητρώου, καθώς και της χρήσης κέντρου πιστοποίησης και εξουσιοδότησης των συμμετεχόντων.

Το άρθρο μου είναι μέρος μιας σειράς άρθρων για το Hyperledger Fabric, στο οποίο περιγράφουμε ένα έργο συστήματος για την καταγραφή φοιτητών που εισέρχονται σε ένα πανεπιστήμιο.

Γενική αρχιτεκτονική του Hyperledger Fabric

Το Hyperledger Fabric είναι ένα κατανεμημένο δίκτυο blockchain που αποτελείται από διάφορα λειτουργικά στοιχεία που είναι εγκατεστημένα σε κόμβους δικτύου. Τα στοιχεία Hyperledger Fabric είναι κοντέινερ Docker που μπορούν να ληφθούν δωρεάν από το DockerHub. Το Hyperledger Fabric μπορεί επίσης να εκτελεστεί σε περιβάλλον Kubernetes.

Για να γράψουμε έξυπνα συμβόλαια (κωδικός αλυσίδας στο πλαίσιο του Hyperledger Fabric), χρησιμοποιήσαμε το Golang (αν και το Hyperledger Fabric επιτρέπει τη χρήση άλλων γλωσσών). Για να αναπτύξουμε μια προσαρμοσμένη εφαρμογή, στην περίπτωσή μας, χρησιμοποιήσαμε το Node.js με το αντίστοιχο Hyperledger Fabric SDK.

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

Η γενική αρχιτεκτονική μοιάζει με αυτό:

Ύφασμα Hyperledger για Ανδρείκελα

Εικόνα 1. Γενική Αρχιτεκτονική Υφασμάτων Hyperledger

Η εφαρμογή χρήστη (Submitting Client) είναι μια εφαρμογή με την οποία οι χρήστες συνεργάζονται με το δίκτυο blockchain. Για να εργαστείτε, πρέπει να έχετε εξουσιοδότηση και να έχετε τα κατάλληλα δικαιώματα για διάφορους τύπους ενεργειών στο δίκτυο.

Οι συνομήλικοι έρχονται σε διάφορους ρόλους:

  • Το Endorsing Peer είναι ένας κόμβος που προσομοιώνει την εκτέλεση μιας συναλλαγής (εκτελεί τον κώδικα έξυπνης σύμβασης). Μετά την επαλήθευση και την εκτέλεση του έξυπνου συμβολαίου, ο κόμβος επιστρέφει τα αποτελέσματα εκτέλεσης στην εφαρμογή πελάτη μαζί με την υπογραφή του.
  • Η υπηρεσία παραγγελίας είναι μια κατανεμημένη υπηρεσία σε πολλούς κόμβους, που χρησιμοποιείται για τη δημιουργία νέων μπλοκ του κατανεμημένου μητρώου και τη δημιουργία μιας ουράς για την εκτέλεση συναλλαγών. Η Υπηρεσία Παραγγελιών δεν προσθέτει νέα μπλοκ στο μητρώο (Αυτή η δυνατότητα έχει μετακινηθεί στο Committing Peers για βελτίωση της απόδοσης).
  • Το Committing Peer είναι ένας κόμβος που περιέχει ένα κατανεμημένο μητρώο και προσθέτει νέα μπλοκ στο μητρώο (τα οποία δημιουργήθηκαν από την υπηρεσία παραγγελίας). Όλοι οι ομότιμοι δεσμεύσεις περιέχουν ένα τοπικό αντίγραφο του κατανεμημένου καθολικού. Η δέσμευση Peer ελέγχει όλες τις συναλλαγές εντός του μπλοκ για εγκυρότητα πριν προσθέσει ένα νέο μπλοκ τοπικά.

Πολιτική έγκρισης είναι η πολιτική για τον έλεγχο της εγκυρότητας μιας συναλλαγής. Αυτές οι πολιτικές ορίζουν το απαιτούμενο σύνολο κόμβων στους οποίους πρέπει να εκτελεστεί το έξυπνο συμβόλαιο προκειμένου η συναλλαγή να αναγνωριστεί ως έγκυρη.

Το κατανεμημένο μητρώο - Lerger - αποτελείται από δύο μέρη: WolrldState (ονομάζεται επίσης State DataBase) και BlockChain.

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

Το WolrldState είναι ένα κατανεμημένο συστατικό καθολικού που αποθηκεύει τις τρέχουσες τιμές (αιχμής) όλων των κατανεμημένων αντικειμένων του καθολικού.

Το WorldState είναι μια βάση δεδομένων, στη βασική έκδοση - LevelDB ή πιο σύνθετη - CouchDB, η οποία περιέχει ζεύγη κλειδιών-τιμών, για παράδειγμα: Όνομα - Ivan, Επώνυμο - Ivanov, ημερομηνία εγγραφής στο σύστημα - 12.12.21/17.12.1961/XNUMX , ημερομηνία γέννησης - XNUMX/XNUMX/XNUMX κ.λπ. Το WorldState και το κατανεμημένο μητρώο πρέπει να είναι συνεπή μεταξύ όλων των συμμετεχόντων σε ένα δεδομένο κανάλι.

Δεδομένου ότι το Hyperledger Fabric είναι ένα δίκτυο στο οποίο όλοι οι συμμετέχοντες είναι γνωστοί και πιστοποιημένοι, χρησιμοποιεί μια αποκλειστική αρχή πιστοποίησης - CA (Certification Authority). Η CA λειτουργεί με βάση το πρότυπο X.509 και την υποδομή δημόσιου κλειδιού - PKI.

Η υπηρεσία μέλους είναι μια υπηρεσία μέσω της οποίας τα μέλη επαληθεύουν ότι ένα αντικείμενο ανήκει σε έναν συγκεκριμένο οργανισμό ή κανάλι.

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

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

Τυπικό σενάριο εκτέλεσης συναλλαγής

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

Ως μέρος του εσωτερικού μας έργου, δημιουργήσαμε το δίκτυο Hyperledger Fabric, το οποίο έχει σχεδιαστεί για να εγγραφεί και να λογοδοτεί για φοιτητές που εισέρχονται σε πανεπιστήμια. Το δίκτυό μας αποτελείται από δύο οργανισμούς που ανήκουν στο Πανεπιστήμιο Α και στο Πανεπιστήμιο Β. Κάθε οργανισμός περιέχει μια εφαρμογή πελάτη, καθώς και τη δική του ομότιμη δέσμευση και υποστήριξη. Χρησιμοποιούμε επίσης τις κοινές υπηρεσίες Υπηρεσία Παραγγελιών, Υπηρεσία Μέλους και Αρχή Πιστοποίησης.

1) Έναρξη Συναλλαγής

Μια εφαρμογή χρήστη, χρησιμοποιώντας το Hyperledger Fabric SDK, εκκινεί ένα αίτημα συναλλαγής και στέλνει το αίτημα σε κόμβους με έξυπνα συμβόλαια. Το αίτημα μπορεί να είναι αλλαγή ή ανάγνωση από ένα κατανεμημένο μητρώο (Ledger). Αν εξετάσουμε ένα παράδειγμα της διαμόρφωσης του συστήματος δοκιμών μας για τη λογιστική για φοιτητές πανεπιστημίου, η εφαρμογή πελάτη στέλνει ένα αίτημα συναλλαγής στους κόμβους των πανεπιστημίων Α και Β, οι οποίοι περιλαμβάνονται στην πολιτική έγκρισης του καλούμενου έξυπνου συμβολαίου. Ο κόμβος Α είναι ένας κόμβος που βρίσκεται στο πανεπιστήμιο που καταγράφει τον εισερχόμενο φοιτητή και ο κόμβος Β είναι ένας κόμβος που βρίσκεται σε άλλο πανεπιστήμιο. Για να αποθηκευτεί μια συναλλαγή σε ένα κατανεμημένο μητρώο, είναι απαραίτητο όλοι οι κόμβοι που, σύμφωνα με την επιχειρηματική λογική, πρέπει να εγκρίνουν τη συναλλαγή, να εκτελούν με επιτυχία έξυπνες συμβάσεις με το ίδιο αποτέλεσμα. Ο κόμβος Μια εφαρμογή χρήστη, χρησιμοποιώντας τα εργαλεία Hyperledger Fabric SDK, αποκτά την πολιτική έγκρισης και μαθαίνει σε ποιους κόμβους πρέπει να στείλει ένα αίτημα συναλλαγής. Αυτό είναι ένα αίτημα για την επίκληση ενός συγκεκριμένου έξυπνου συμβολαίου (συνάρτηση αλυσιδωτών κωδικών) για την ανάγνωση ή την εγγραφή ορισμένων δεδομένων σε ένα κατανεμημένο μητρώο. Τεχνικά, το SDK πελάτη χρησιμοποιεί την αντίστοιχη συνάρτηση, στο API της οποίας μεταβιβάζεται ένα συγκεκριμένο αντικείμενο με παραμέτρους συναλλαγής, και προσθέτει επίσης μια υπογραφή πελάτη και στέλνει αυτά τα δεδομένα μέσω της προσωρινής μνήμης πρωτοκόλλου μέσω gRPC στους κατάλληλους κόμβους (υπογραφή ομοτίμων).

Ύφασμα Hyperledger για Ανδρείκελα
Εικόνα 2. Έναρξη Συναλλαγής

2) Εκτέλεση έξυπνου συμβολαίου

Οι κόμβοι (Endosing Peers), έχοντας λάβει αίτημα για διεξαγωγή μιας συναλλαγής, ελέγχουν την υπογραφή του πελάτη και αν όλα είναι εντάξει, παίρνουν ένα αντικείμενο με τα δεδομένα αιτήματος και εκτελούν μια προσομοίωση της εκτέλεσης ενός έξυπνου συμβολαίου (συνάρτηση αλυσιδωτών κωδικών) με αυτά τα δεδομένα. Ένα έξυπνο συμβόλαιο είναι η επιχειρηματική λογική μιας συναλλαγής, ένα συγκεκριμένο σύνολο όρων και οδηγιών (στην περίπτωσή μας, πρόκειται για επαλήθευση μαθητή, είναι νέος φοιτητής ή είναι ήδη εγγεγραμμένος, επαλήθευση ηλικίας κ.λπ.). Για να εκτελέσετε το έξυπνο συμβόλαιο, θα χρειαστείτε επίσης δεδομένα από το WorldState. Ως αποτέλεσμα της προσομοίωσης ενός έξυπνου συμβολαίου στο ομότιμο Endoring, λαμβάνονται δύο σύνολα δεδομένων – Read Set και Write Set. Το σύνολο Read και Write Set είναι οι αρχικές και νέες τιμές WorldState. (νέο – με την έννοια που προκύπτει κατά την προσομοίωση ενός έξυπνου συμβολαίου).

Ύφασμα Hyperledger για Ανδρείκελα
Εικόνα 3. Εκτέλεση έξυπνου συμβολαίου

3) Επιστροφή δεδομένων στην εφαρμογή πελάτη

Μετά τη διεξαγωγή μιας προσομοίωσης του έξυπνου συμβολαίου, το Endorsing Peers επιστρέφει τα αρχικά δεδομένα και το αποτέλεσμα της προσομοίωσης, καθώς και το RW Set, υπογεγραμμένο από το πιστοποιητικό τους στην εφαρμογή πελάτη. Σε αυτό το στάδιο, δεν πραγματοποιούνται αλλαγές στο κατανεμημένο μητρώο. Η εφαρμογή πελάτη ελέγχει την υπογραφή Endorsing Peer και επίσης συγκρίνει τα αρχικά δεδομένα συναλλαγής που στάλθηκαν και τα δεδομένα που επιστράφηκαν (δηλαδή, ελέγχει εάν τα αρχικά δεδομένα στα οποία προσομοιώθηκε η συναλλαγή έχουν παραμορφωθεί). Εάν η συναλλαγή αφορούσε μόνο την ανάγνωση δεδομένων από το μητρώο, τότε η εφαρμογή πελάτη λαμβάνει ανάλογα το απαραίτητο σύνολο ανάγνωσης και αυτό συνήθως ολοκληρώνει τη συναλλαγή με επιτυχία χωρίς να αλλάξει το κατανεμημένο μητρώο. Σε περίπτωση συναλλαγής που πρέπει να αλλάξει δεδομένα στο μητρώο, η εφαρμογή πελάτη ελέγχει επιπλέον την εφαρμογή της Πολιτικής Εγκρίσεως. Είναι πιθανό μια εφαρμογή πελάτη να μην ελέγχει το αποτέλεσμα της εκτέλεσης της Πολιτικής Εγκρίσεως, αλλά η πλατφόρμα Hyperledger Fabric σε αυτήν την περίπτωση προβλέπει τον έλεγχο πολιτικών σε κόμβους (Committing Peers) στο στάδιο της προσθήκης μιας συναλλαγής στο μητρώο.

Ύφασμα Hyperledger για Ανδρείκελα
Εικόνα 4. Επιστροφή δεδομένων στην εφαρμογή πελάτη

4) Αποστολή συνόλων RW στο Ordering Peers

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

Υπηρεσία παραγγελιών – με βάση το όνομα, η κύρια λειτουργία αυτής της υπηρεσίας είναι να οργανώνει τις εισερχόμενες συναλλαγές με τη σωστή σειρά. Καθώς και ο σχηματισμός ενός νέου μπλοκ του κατανεμημένου μητρώου και η εγγυημένη παράδοση νέων δημιουργημένων μπλοκ σε όλους τους κόμβους δέσμευσης, διασφαλίζοντας έτσι τη συνέπεια δεδομένων σε όλους τους κόμβους που περιέχουν το κατανεμημένο μητρώο (Committing peers). Ταυτόχρονα, η ίδια η υπηρεσία Παραγγελίας δεν αλλάζει το μητρώο με κανέναν τρόπο. Η υπηρεσία παραγγελιών είναι ένα ζωτικό στοιχείο του συστήματος, επομένως είναι ένα σύμπλεγμα πολλών κόμβων. Η Υπηρεσία Παραγγελιών δεν ελέγχει την εγκυρότητα της συναλλαγής, απλώς αποδέχεται μια συναλλαγή με ένα συγκεκριμένο αναγνωριστικό καναλιού, οργανώνει τις εισερχόμενες συναλλαγές με μια συγκεκριμένη σειρά και σχηματίζει νέα μπλοκ του κατανεμημένου μητρώου από αυτά. Μία Υπηρεσία Παραγγελίας μπορεί να εξυπηρετήσει πολλά κανάλια ταυτόχρονα. Η Υπηρεσία Παραγγελίας περιλαμβάνει ένα σύμπλεγμα Kafka, το οποίο διατηρεί τη σωστή (αμετάβλητη) ουρά συναλλαγών (βλ. Σημείο 7).

Ύφασμα Hyperledger για Ανδρείκελα
Εικόνα 5. Αποστολή συνόλων RW στο Ordering Peers

5) Αποστολή δημιουργημένων μπλοκ στο Committing Peer

Τα μπλοκ που δημιουργούνται στην Υπηρεσία Παραγγελιών μεταδίδονται (μεταδίδονται) σε όλους τους κόμβους δικτύου. Κάθε κόμβος, έχοντας λάβει ένα νέο μπλοκ, τον ελέγχει για συμμόρφωση με την Πολιτική Εγκρίσεως, ελέγχει ότι όλοι οι Ομότιμοι Έγγραφοι έλαβαν το ίδιο αποτέλεσμα (Σύνολο Εγγραφής) ως αποτέλεσμα της προσομοίωσης έξυπνου συμβολαίου και επίσης ελέγχει εάν οι αρχικές τιμές έχουν άλλαξε (δηλαδή, Read Set - δεδομένα που διαβάζονται από το έξυπνο συμβόλαιο από την WorldState) από τη στιγμή που ξεκίνησε η συναλλαγή. Εάν πληρούνται όλες οι προϋποθέσεις, η συναλλαγή επισημαίνεται ως έγκυρη, διαφορετικά, η συναλλαγή λαμβάνει την κατάσταση μη έγκυρη.

Ύφασμα Hyperledger για Ανδρείκελα
Εικόνα 6. Αποστολή δημιουργημένων μπλοκ στο Committing Peer

6) Προσθήκη μπλοκ στο μητρώο

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

Ύφασμα Hyperledger για Ανδρείκελα
Εικόνα 7. Προσθήκη μπλοκ στο μητρώο

ΥΠΗΡΕΣΙΑ ΠΑΡΑΓΓΕΛΙΩΝ

Η Υπηρεσία Παραγγελίας αποτελείται από ένα σύμπλεγμα Kafka με αντίστοιχους κόμβους ZooKeeper και Κόμβους Υπηρεσίας Παραγγελίας (OSN), οι οποίοι βρίσκονται μεταξύ των πελατών της υπηρεσίας παραγγελίας και του συμπλέγματος Kafka. Το σύμπλεγμα Kafka είναι μια κατανεμημένη, ανεκτική σε σφάλματα πλατφόρμα διαχείρισης ροής (μηνυμάτων). Κάθε κανάλι (θέμα) στον Κάφκα είναι μια αμετάβλητη ακολουθία εγγραφών που υποστηρίζει μόνο την προσθήκη μιας νέας εγγραφής (δεν είναι δυνατή η διαγραφή μιας υπάρχουσας). Μια απεικόνιση της δομής του θέματος φαίνεται παρακάτω. Είναι αυτή η ιδιότητα του Κάφκα που χρησιμοποιείται για την κατασκευή μιας πλατφόρμας blockchain.

Ύφασμα Hyperledger για Ανδρείκελα
λαμβάνονται από το kafka.apache.org

  • Εικόνα 8. Δομή θέματος υπηρεσίας παραγγελίας*

Χρήσιμοι σύνδεσμοι

Youtube – Δημιουργία blockchain για επιχειρήσεις με το Hyperledger Project
Έγγραφα Hyperledger Fabric
Hyperledger ύφασμα: ένα κατανεμημένο λειτουργικό σύστημα για επιτρεπόμενες αλυσίδες μπλοκ

Ευχαριστώ

Θα ήθελα να εκφράσω τη βαθιά μου ευγνωμοσύνη στους συναδέλφους μου για τη βοήθειά τους στην προετοιμασία αυτού του άρθρου:
Νικολάι Μάριν
Ιγκόρ Χάποφ
Ντμίτρι Γκορμπατσόφ
Αλεξάντερ Ζέμτσοφ
Ekaterina Guseva

Πηγή: www.habr.com

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