Die Augen haben Angst und die Hände jucken!In früheren Artikeln haben wir herausgefunden, auf welchen Technologien Blockchains basieren (wofür
sollten wir eine Blockchain erstellen? ) Und welche Fälle mit ihrer Hilfe implementiert werden können (
wofür sollten wir einen Fall erstellen? ). Es ist Zeit, mit Ihren Händen zu arbeiten! Für die Implementierung von Piloten und PoC (Proof of Concept) bevorzuge ich Clouds, weil Auf sie kann von überall auf der Welt zugegriffen werden, und oft müssen Sie keine Zeit für die mühsame Installation der Umgebung aufwenden, weil Es gibt vordefinierte Konfigurationen. Machen wir also etwas Einfaches, zum Beispiel ein Netzwerk zum Übertragen von Münzen zwischen Teilnehmern, und nennen es bescheiden Citcoin. Dazu verwenden wir die IBM Cloud und die universelle Blockchain Hyperledger Fabric. Lassen Sie uns zunächst sehen, warum Hyperledger Fabric als universelle Blockchain bezeichnet wird.

Hyperledger Fabric - eine universelle Blockchain
Im Allgemeinen lautet das universelle Informationssystem:
- Eine Reihe von Servern und ein Softwarekern, der die Geschäftslogik ausführt.
- Schnittstellen für die Interaktion mit dem System;
- Mittel zur Registrierung, Authentifizierung und Autorisierung von Geräten / Personen;
- Datenbank zum Speichern von Betriebs- und Archivdaten:

Die offizielle Version von Hyperledger Fabric kann auf der
Website gelesen werden. Kurz gesagt, Hyperledger Fabric ist eine OpenSource-Plattform, mit der Sie geschlossene Blockchains erstellen und beliebige intelligente Verträge ausführen können, die in den Programmiersprachen JS und Go geschrieben sind. Schauen wir uns die Architektur des Hyperledger Fabric im Detail an und stellen sicher, dass es sich um ein universelles System handelt, das nur die Besonderheiten des Speicherns und Aufzeichnens von Daten aufweist. Die Besonderheit besteht darin, dass die Daten wie in allen Blockchains nur dann in Blöcken gespeichert werden, die in der Blockchain platziert werden, wenn die Teilnehmer einen Konsens erreicht haben und die Daten nach der Aufzeichnung nicht diskret korrigiert oder gelöscht werden können.
Hyperledger Fabric-Architektur
Das Diagramm zeigt die Architektur des Hyperledger Fabric:
Organisationen - Organisationen enthalten Peers, d. H. Blockchain existiert aufgrund der Unterstützung von Organisationen. Verschiedene Organisationen können Mitglieder desselben Kanals sein.
Kanal - eine logische Struktur, die Peers in Gruppen vereint, d. H. Blockchain ist gesetzt. Hyperledger Fabric kann gleichzeitig mehrere Blockchains mit unterschiedlicher Geschäftslogik verarbeiten.
Der Membership Services Provider (MSP) ist eine Zertifizierungsstelle (Certificate Authority) für die Ausstellung von Identitäten und die Zuweisung von Rollen. Um einen Knoten zu erstellen, müssen Sie mit MSP interagieren.
Peer-Knoten - Überprüfen Sie Transaktionen, speichern Sie die Blockchain, führen Sie intelligente Verträge aus und interagieren Sie mit Anwendungen. Peers haben eine Identität (digitales Zertifikat), die einen MSP ausstellt. Im Gegensatz zum Bitcoin- oder Etherium-Netzwerk, in dem alle Knoten gleich sind, spielen die Hyperledger Fabric-Knoten unterschiedliche Rollen:
- Peer kann Peer (EP) unterstützen und intelligente Verträge ausführen.
- Committing Peer (CP) - Speichern Sie nur Daten in der Blockchain und aktualisieren Sie den „Weltzustand“.
- Anchor Peer (AP) - Wenn mehrere Organisationen an der Blockchain teilnehmen, werden Anchor Peers verwendet, um zwischen ihnen zu kommunizieren. Jede Organisation muss einen oder mehrere Anker-Peers haben. Mit Hilfe von AP kann jeder Peer in der Organisation Informationen über alle Peers in anderen Organisationen erhalten. Das Klatschprotokoll wird verwendet, um Informationen zwischen APs zu synchronisieren.
- Leader Peer - Wenn die Organisation mehrere Peers hat, erhält nur der Peer Leader Blöcke vom Bestellservice und gibt sie an die anderen Peers weiter. Ein Leiter kann entweder statisch festgelegt oder von Kollegen in einer Organisation dynamisch ausgewählt werden. Das Klatschprotokoll wird auch verwendet, um Führungsinformationen zu synchronisieren.
Assets sind Wertentitäten, die in der Blockchain gespeichert sind. Dies sind insbesondere Schlüsselwertdaten im JSON-Format. Es sind diese Daten, die in der Blockchain aufgezeichnet werden. Sie haben eine Geschichte, die in der Blockchain gespeichert ist, und den aktuellen Status, der in der Weltstatusdatenbank gespeichert ist. Datenstrukturen werden je nach Geschäftsaufgabe zufällig gefüllt. Es gibt keine erforderlichen Felder. Die einzige Empfehlung lautet, dass Vermögenswerte einen Eigentümer haben und wertvoll sein sollten.
Ledger - besteht aus der Blockchain "Blockchain" und der Datenbank "Word state", in der der aktuelle Status der Assets gespeichert ist. Der Weltstaat verwendet LevelDB oder CouchDB.
Intelligenter Vertrag - Mit intelligenten Verträgen wird die Geschäftslogik des Systems implementiert. In Hyperledger Fabric werden intelligente Verträge als Kettencode bezeichnet. Mit Hilfe von Chaincode werden Assets und Transaktionen darüber definiert. In technischer Sprache sind Smart Contracts Softwaremodule, die in den Programmiersprachen JS oder Go implementiert sind.
Endorsement-Richtlinie - Für jeden Chaincode können Sie angeben, wie viele Richtlinien und von wem Sie Bestätigungen für die Transaktion erwarten möchten. Wenn die Richtlinie nicht festgelegt ist, wird standardmäßig Folgendes verwendet: "Die Transaktion muss von jedem Mitglied einer Organisation im Kanal bestätigt werden." Beispiele für Richtlinien:
- Jeder Administrator der Organisation muss die Transaktion bestätigen.
- Jedes Mitglied oder jeder Kunde der Organisation muss dies bestätigen.
- Muss jede Peer-Organisation bestätigen.
Bestellservice - packt Transaktionen in Blöcke und sendet Peers an den Kanal. Garantiert die Zustellung von Nachrichten an alle Peers im Netzwerk. Für industrielle Systeme wird der
Kafka Message Broker verwendet, um
Solo zu entwickeln und zu testen.
Anrufverlauf

- Die Anwendung interagiert mit Hyperledger Fabric über das SDK Go, Node.js oder Java.
- Der Client erstellt eine TX-Transaktion und sendet sie an unterstützende Peers.
- Peer überprüft die Signatur des Kunden, schließt die Transaktion ab und sendet die Endorsement-Signatur an den Kunden zurück. Der Kettencode wird nur auf dem unterstützenden Peer ausgeführt, und das Ergebnis seiner Ausführung wird an alle Peers gesendet. Dieser Arbeitsalgorithmus wird als PBFT-Konsens (Practical Byzantine Fault Tolerant) bezeichnet. Es unterscheidet sich von der klassischen BFT darin, dass die Nachricht gesendet wird und eine Bestätigung nicht von allen Teilnehmern erwartet wird, sondern nur von einem bestimmten Satz;
- Nachdem der Kunde die Anzahl der Antworten erhalten hat, die der Endorsement-Richtlinie entsprechen, sendet er die Transaktion an den Bestellservice.
- Der Bestellservice bildet einen Block und sendet ihn an alle festschreibenden Peers. Der Bestellservice ermöglicht das sequentielle Schreiben von Blöcken, wobei die sogenannte Hauptbuchgabel ausgeschlossen ist ( siehe Abschnitt "Gabeln" ).
- Peers erhalten einen Block, überprüfen die Endorsement-Richtlinie erneut, schreiben den Block in die Blockchain und ändern den Status in der Datenbank "World State".
Das heißt, Es stellt sich heraus, dass die Rollen zwischen den Knoten getrennt sind. Dies bietet Skalierbarkeit und Blockchain-Sicherheit:
- Intelligente Verträge (Chaincode) führen die Unterstützung von Peers durch. Dies gewährleistet die Vertraulichkeit intelligenter Verträge Es wird nicht von allen Teilnehmern gespeichert, sondern nur von unterstützenden Kollegen.
- Die Bestellung sollte schnell gehen. Dies wird durch die Tatsache sichergestellt, dass die Bestellung nur einen Block bildet und ihn an eine feste Gruppe von Führungskollegen sendet.
- Das Festschreiben von Peers speichert nur die Blockchain - es kann viele von ihnen geben, und sie erfordern nicht viel Leistung und sofortige Arbeit.
Weitere Informationen zu den Architekturlösungen von Hyperledger Fabric und warum dies so funktioniert, finden Sie hier:
Ursprünge der Architektur oder hier:
Hyperledger Fabric: Ein verteiltes Betriebssystem für zulässige Blockchains .
Hyperledger Fabric ist also ein wirklich universelles System, mit dem Sie:
- Implementieren Sie eine beliebige Geschäftslogik mithilfe des intelligenten Vertragsmechanismus.
- Schreiben und Empfangen von Daten aus einer Blockchain-Datenbank im JSON-Format;
- Bereitstellen und Überprüfen des Zugriffs auf die API mithilfe der Zertifizierungsstelle.
Nachdem wir die Besonderheiten des Hyperledger Fabric herausgefunden haben, wollen wir endlich etwas Nützliches tun!
Erweitern Sie Blockchain
Erklärung des Problems
Die Aufgabe besteht darin, das Citcoin-Netzwerk mit den folgenden Funktionen zu implementieren: Konto erstellen, Guthaben abrufen, Konto auffüllen, Münzen von einem Konto auf ein anderes übertragen. Zeichnen wir ein Objektmodell, das wir in einem intelligenten Vertrag weiter implementieren werden. Wir werden also Konten haben, die durch Namen identifiziert werden und einen Saldo und eine Liste von Konten enthalten. Konten und eine Liste von Konten beziehen sich auf Hyperledger Fabric-Assets. Dementsprechend haben sie eine Geschichte und einen aktuellen Status. Ich werde versuchen, es klar zu zeichnen:

Die oberen Zahlen sind der aktuelle Status, der in der World State-Datenbank gespeichert ist. Darunter befinden sich Abbildungen, die die Geschichte zeigen, die in der Blockchain gespeichert ist. Der aktuelle Status der Vermögenswerte wird durch Transaktionen geändert. Das Asset ändert sich nur in seiner Gesamtheit. Daher wird infolge der Transaktion ein neues Objekt erstellt und der aktuelle Wert des Assets wird in die Historie aufgenommen.
IBM Cloud
Wir erstellen ein Konto in
der IBM Cloud . Um die Blockchain-Plattform nutzen zu können, müssen Sie sie auf Pay-As-You-Go aktualisieren. Dieser Vorgang ist möglicherweise nicht schnell, weil IBM fordert zusätzliche Informationen an und überprüft diese manuell. Positiv kann ich sagen, dass IBM über gute Schulungsmaterialien verfügt, mit denen Sie Hyperledger Fabric in der Cloud bereitstellen können. Ich mochte die folgende Reihe von Artikeln und Beispielen:
Im Folgenden finden Sie Screenshots der IBM Blockchain-Plattform. Dies ist keine Anweisung zum Erstellen einer Blockchain, sondern lediglich eine Demonstration des Umfangs der Aufgabe. Für unsere Zwecke bilden wir eine Organisation:

Darin erstellen wir Knoten: Orderer CA, Org1 CA, Orderer Peer:

Wir starten Benutzer:

Erstellen Sie einen Kanal und nennen Sie ihn citcoin:

Im Wesentlichen ist Channel eine Blockchain, daher beginnt es mit einem Nullblock (Genesis-Block):

Einen intelligenten Vertrag schreiben
'use strict'; const { Contract } = require('fabric-contract-api'); const maxAccounts = 5; class CitcoinEvents extends Contract { async instantiate(ctx) { console.info('instantiate'); let emptyList = []; await ctx.stub.putState('accounts', Buffer.from(JSON.stringify(emptyList))); }
Intuitiv sollte hier alles klar sein:
- Es gibt verschiedene Funktionen (AddAccount, GetAccounts, SendFrom, GetBalance, RefillBalance), die das Demo-Programm mithilfe der Hyperledger Fabric-API aufruft.
- Die Funktionen SendFrom und RefillBalance generieren Ereignisse (Event), die das Demo-Programm empfängt.
- Funktion instanziieren - wird einmal während der Instanziierung eines intelligenten Vertrags aufgerufen. Tatsächlich wird es nicht einmal aufgerufen, sondern jedes Mal, wenn eine Version eines intelligenten Vertrags geändert wird. Daher ist es eine schlechte Idee, die Liste mit einem leeren Array zu initialisieren, weil Wenn Sie jetzt die Version eines Smart-Vertrags ändern, verlieren wir die aktuelle Liste. Aber nichts, ich lerne nur).
- Konten und eine Liste von Konten (Konten) sind JSON-Datenstrukturen. Für die Datenmanipulation wird JS verwendet.
- Sie können den aktuellen Wert eines Assets abrufen, indem Sie die Funktion getState aufrufen und mit putState aktualisieren.
- Beim Erstellen eines Kontos wird die Funktion AddAccount aufgerufen, bei der die maximale Anzahl von Konten in der Blockchain verglichen wird (maxAccounts = 5). Und es gibt einen Pfosten (bemerkt?), Der zu einer unendlichen Zunahme der Anzahl der Konten führt. Solche Fehler müssen vermieden werden.
Laden Sie als Nächstes den Smart-Vertrag auf Channel hoch und installieren Sie ihn:

Wir sehen uns die Transaktion zur Installation von Smart Contract an:

Wir schauen uns die Details zu unserem Kanal an:

Als Ergebnis erhalten wir das folgende Blockchain-Netzwerkdiagramm in der IBM Cloud. Es gibt auch ein Demo-Programm, das in der Amazon Cloud auf einem virtuellen Server ausgeführt wird (Einzelheiten finden Sie im nächsten Abschnitt):

Erstellen einer GUI für Hyperledger Fabric-API-Aufrufe
Hyperledger Fabric verfügt über eine API, mit der:
- Kreationskanal;
- Peer-Verbindungen zum Kanal;
- Installation und Instanziierung intelligenter Verträge im Kanal;
- Transaktionsaufruf;
- Informationen zur Blockchain anfordern.
Anwendungsentwicklung
In unserem Demo-Programm verwenden wir die API nur, um Transaktionen aufzurufen und Informationen anzufordern, weil Die restlichen Schritte haben wir bereits mit der IBM Blockchain-Plattform unternommen. Wir schreiben eine GUI mit einem Standard-Technologie-Stack: Express.js + Vue.js + Node.js. Sie können einen separaten Artikel darüber schreiben, wie Sie mit der Erstellung moderner Webanwendungen beginnen. Hier werde ich einen Link zu der Vorlesungsreihe hinterlassen, die mir am besten gefallen hat:
Full Stack Web App mit Vue.js & Express.js . Das Ergebnis ist eine Client-Server-Anwendung mit einer vertrauten grafischen Oberfläche im Stil von Material Design von Google. Die REST-API zwischen Client und Server besteht aus mehreren Aufrufen:
- HyperledgerDemo / v1 / init - initialisiert die Blockchain;
- HyperledgerDemo / v1 / accounts / list - Ruft eine Liste aller Konten ab
- HyperledgerDemo / v1 / account? Name = Bob & balance = 100 - ein Bob-Konto erstellen;
- HyperledgerDemo / v1 / info? Account = Bob - Informationen zum Bob-Konto abrufen;
- HyperledgerDemo / v1 / transaction? Von = Bob & zu = Alice & Volumen = 2 - Übertragen Sie zwei Münzen von Bob zu Alice;
- HyperledgerDemo / v1 /connect - Schließen Sie die Verbindung zur Blockchain.
Ich habe die Beschreibung der API mit Beispielen auf
der Postman-Website veröffentlicht , einem bekannten Programm zum Testen der HTTP-API.
Amazon Cloud Demo-Anwendung
Die Anwendung wurde auf Amazon hochgeladen, weil IBM konnte mein Konto bisher nicht aktualisieren und die Erstellung virtueller Server nicht zulassen. Wie die Kirsche die Domain angehängt hat:
www.citcoin.info . Ich werde den Server für eine Weile eingeschaltet lassen und ihn dann ausschalten, weil Cent für Miete tropfen, und Citcoin-Münzen sind noch nicht an der Börse notiert.) Ich habe Screenshots der Demo in den Artikel eingefügt, damit die Logik der Arbeit klar ist. Demo-Anwendung kann:
- Initialisieren Sie die Blockchain.
- Erstellen Sie ein Konto (erstellen Sie jetzt jedoch kein neues Konto, da die im Smart-Vertrag vorgeschriebene maximale Anzahl von Konten in der Blockchain erreicht wurde).
- Holen Sie sich eine Liste der Konten;
- Übertragen Sie Citcoin-Münzen zwischen Alice, Bob und Alex;
- Ereignisse empfangen (aber jetzt gibt es keine Möglichkeit, Ereignisse anzuzeigen. Der Einfachheit halber gibt die Benutzeroberfläche an, dass Ereignisse nicht unterstützt werden).
- Aktionen protokollieren.
Initialisieren Sie zunächst die Blockchain:

Als nächstes starten Sie Ihr Konto, spielen Sie nicht mit Guthaben:

Wir erhalten eine Liste aller verfügbaren Konten:

Wir wählen den Absender und den Empfänger aus, wir erhalten deren Guthaben. Wenn der Absender und der Empfänger identisch sind, wird ihr Konto wieder aufgefüllt:

Im Protokoll überwachen wir die Ausführung von Transaktionen:

Mit einem Demo-Programm ist das eigentlich alles. Als nächstes können Sie unsere Transaktion in der Blockchain sehen:

Und die allgemeine Liste der Transaktionen:

Damit haben wir die Implementierung von PoC zum Aufbau des Citcoin-Netzwerks erfolgreich abgeschlossen. Was muss noch getan werden, damit Citcoin ein vollwertiges Münztransfer-Netzwerk wird? Wenig:
- Implementieren Sie beim Erstellen eines Kontos die Generierung eines privaten / öffentlichen Schlüssels. Der private Schlüssel muss im Kontonutzer gespeichert sein, öffentlich in der Blockchain.
- Führen Sie eine Münzübertragung durch, bei der ein öffentlicher Schlüssel verwendet wird, um den Benutzer zu identifizieren, nicht ein Name.
- Verschlüsseln Sie Transaktionen, die vom Benutzer zum Server gehen, mit seinem privaten Schlüssel.
Fazit
Wir haben das Citcoin-Netzwerk mit folgenden Funktionen implementiert: Konto hinzufügen, Guthaben abrufen, Konto auffüllen, Münzen von einem Konto auf ein anderes übertragen. Was hat uns der Bau von PoC gekostet?
- Wir müssen Blockchain im Allgemeinen und Hyperledger Fabric im Besonderen untersuchen.
- Erfahren Sie, wie Sie die IBM- oder Amazon-Clouds verwenden.
- Lernen Sie die Programmiersprache JS und einige Webframeworks.
- Wenn einige Daten nicht in der Blockchain, sondern in einer separaten Datenbank gespeichert werden müssen, lernen Sie, wie Sie beispielsweise PostgreSQL integrieren.
- Und zu guter Letzt - ohne Linux-Kenntnisse in der modernen Welt nirgendwo!)
Natürlich keine Raketenwissenschaft, aber man muss schwitzen!
GitHub-Quellen
Er hat den Quellcode auf
GitHub gestellt . Eine kurze Beschreibung des Repositorys:
Verzeichnis "
Server " - Node.js Server
Verzeichnis "
client " - Node.js Client
Das "
Blockchain " -Verzeichnis (Parameterwerte und Schlüssel sind natürlich nicht funktionsfähig und dienen nur als Beispiel):
- Vertrag - Quelle des intelligenten Vertrags
- Brieftasche - Benutzerschlüssel für die Verwendung der Hyperledger Fabric-API.
- * .cds - kompilierte Versionen von Smart Contracts
- * .json-Dateien - Beispielkonfigurationsdateien für die Verwendung der Hyperledger Fabric-API
Es ist nur der Anfang!