So erstellen Sie ein Blockchain-Netzwerk mit Hyperledger Fabric und Composer

Ein Tutorial für neue Blockchain-Entwickler

Bevor ich anfange, läuft Hyperledger Fabric nur auf Unix-basierten Betriebssystemen. Infolgedessen kann es unter Windows nicht ausgeführt werden, und Sie haben Einschränkungen hinsichtlich Ihrer Möglichkeiten. Ich empfehle, eine virtuelle Maschine einzurichten, wenn Sie Windows ausführen, bevor Sie fortfahren.

Dieser Artikel setzt einige Kenntnisse in Javascript voraus. Es ist kein Tutorial für Programmiereranfänger, sondern für Programmierer, die Anfänger im Blockchain-Bereich sind.

Was bauen wir?

Sie möchten eine Blockchain-Anwendung erstellen, haben aber keine Ahnung, wo Sie anfangen sollen? Mach dir keine Sorgen. In diesem Tutorial werden wir ein Sammelkartennetzwerk einrichten. Verschiedene Traders , die eigen TradingCards von Baseball, Football und Cricket - Spieler, wird in der Lage sein , Karten untereinander zu handeln.

Wir werden auch einen REST-API-Server einrichten, damit clientseitige Software mit unserem Unternehmensnetzwerk interagieren kann. Schließlich werden wir auch eine Angular 4-Anwendung generieren, die die REST-API verwendet, um eine Schnittstelle zu unserem Netzwerk herzustellen.

Sie finden den vollständigen endgültigen Code dessen, was wir auf diesem Github-Repo aufbauen werden

Bist du bereit loszulegen?

Inhaltsverzeichnis

  • Einführung in Hyperledger Fabric und verwandte Anwendungen
  • Installieren der Voraussetzungen, Tools und einer Fabric-Laufzeit
  • Erstellen und Bereitstellen unseres Unternehmensnetzwerks
  • Testen Sie unser Geschäftsnetzwerk
  • Generieren eines REST-API-Servers
  • Generieren einer Angular-Anwendung, die die REST-API verwendet

Einführung in Hyperledger Fabric und verwandte Anwendungen

Hyperledger Fabric ist ein Open Source-Framework zum Erstellen privater ( autorisierter ) Blockchain-Unternehmensnetzwerke, in denen Identitäten und Rollen von Mitgliedern anderen Mitgliedern bekannt sind. Das auf Fabric basierende Netzwerk dient als Back-End mit einem clientseitigen Anwendungs-Front-End. Für Nodejs und Java stehen SDKs zum Erstellen von Clientanwendungen zur Verfügung. Python- und Golang-Unterstützung wird in Kürze verfügbar sein.

Hyperledger Composer ist eine Reihe von Javascript-basierten Tools und Skripten, die die Erstellung von Hyperledger Fabric-Netzwerken vereinfachen. Mit diesen Tools können wir ein Business Network Archive (BNA) für unser Netzwerk erstellen . Der Komponist deckt diese Komponenten weitgehend ab:

  • Business Network Archive (BNA)
  • Komponistenspielplatz
  • Composer REST Server

Business Network Archive - Mit Composer können wir einige verschiedene Dateien verpacken und ein Archiv erstellen, das dann in einem Fabric-Netzwerk bereitgestellt werden kann. Um dieses Archiv zu generieren, benötigen wir:

  • Netzwerkmodell - Eine Definition der im Netzwerk vorhandenen Ressourcen. Diese Ressourcen umfassen Vermögenswerte, Teilnehmer und Transaktionen. Wir werden später darauf zurückkommen.
  • Geschäftslogik - Logik für die Transaktionsfunktionen
  • Zugriffssteuerungsbeschränkungen - Enthält verschiedene Regeln, die die Rechte verschiedener Teilnehmer im Netzwerk definieren. Dies beinhaltet, ohne darauf beschränkt zu sein, die Definition, welche Assets die Teilnehmer steuern können.
  • Abfragedatei (optional) - Eine Reihe von Abfragen, die im Netzwerk ausgeführt werden können. Diese können als ähnlich wie SQL-Abfragen angesehen werden. Weitere Informationen zu Fragen finden Sie hier.

Composer Playground ist eine webbasierte Benutzeroberfläche, mit der wir unser Unternehmensnetzwerk modellieren und testen können. Playground eignet sich gut zum Modellieren einfacher Proofs of Concept, da der lokale Speicher des Browsers zur Simulation des Blockchain-Netzwerks verwendet wird. Wenn wir jedoch eine lokale Fabric-Laufzeit ausführen und ein Netzwerk dafür bereitgestellt haben, können wir auch über Playground darauf zugreifen. In diesem Fall simuliert Playground nicht das Netzwerk, sondern kommuniziert direkt mit der lokalen Fabric-Laufzeit.

Composer REST Server ist ein Tool, mit dem wir einen REST-API-Server basierend auf unserer Unternehmensnetzwerkdefinition generieren können. Diese API kann von Clientanwendungen verwendet werden und ermöglicht es uns, Nicht-Blockchain-Anwendungen in das Netzwerk zu integrieren.

Installieren der Voraussetzungen, Tools und einer Fabric-Laufzeit

1. Voraussetzungen installieren

Nachdem wir ein umfassendes Verständnis dafür haben, was zum Aufbau dieser Netzwerke erforderlich ist, können wir mit der Entwicklung beginnen. Bevor wir dies tun, müssen wir jedoch sicherstellen, dass die Voraussetzungen auf unserem System installiert sind. Eine aktualisierte Liste finden Sie hier.

  • Docker Engine und Docker Compose
  • Nodejs und NPM
  • Git
  • Python 2.7.x.

Für Ubuntu-Benutzer steht Hyperledger ein Bash-Skript zur Verfügung, um diesen Vorgang extrem einfach zu gestalten. Führen Sie die folgenden Befehle in Ihrem Terminal aus:

Leider müssen Mac-Benutzer die oben genannten Tools manuell installieren und sicherstellen, dass sie alle Voraussetzungen auf ihrem System haben. Diese Seite wird mit Installationsanweisungen auf dem neuesten Stand gehalten.

2. Installieren von Tools zur Erleichterung der Entwicklung

Führen Sie die folgenden Befehle in Ihrem Terminal aus und stellen Sie sicher, dass Sie sudo NICHT verwenden, wenn Sie npm-Befehle ausführen.

Composer-Cli ist das einzige wesentliche Paket. Der Rest sind keine Kernkomponenten, wird sich aber im Laufe der Zeit als äußerst nützlich herausstellen. Wir werden mehr darüber erfahren, was diese tun, wenn wir auf sie stoßen.

3. Installieren einer lokalen Hyperledger Fabric-Laufzeit

Lassen Sie uns die Befehle durchgehen und sehen, was sie bedeuten. Zuerst erstellen wir ein neues Verzeichnis und geben es ein. Anschließend laden wir die zur Installation von Hyperledger Fabric erforderlichen Tools herunter und extrahieren sie.

Wir geben dann die gewünschte Fabric-Version an . Zum Zeitpunkt des Schreibens benötigen wir 1.2, daher hlfv12 . Dann laden wir die Fabric-Laufzeit herunter und starten sie.

Schließlich generieren wir eine PeerAdminKarte. Teilnehmer an einem Fabric-Netzwerk können Geschäftsnetzwerkkarten haben, analog zu echten Visitenkarten. Wie bereits erwähnt, ist Fabric eine Basisschicht, auf der private Blockchains aufbauen können. Der Inhaber der PeerAdmin-Visitenkarte hat die Berechtigung, Geschäftsnetzwerke in dieser Fabric-Laufzeit bereitzustellen, zu löschen und zu verwalten (auch bekannt als YOU!).

Wenn alles gut gegangen ist, sollten Sie eine Ausgabe wie diese sehen:

Wenn Sie eingeben ls, wird Folgendes angezeigt:

Grundsätzlich haben wir hier nur ein lokales Fabric-Netzwerk heruntergeladen und gestartet. Wir können aufhören zu benutzen, ./stopFabric.shwenn wir wollen. Am Ende unserer Entwicklungssitzung sollten wir laufen./teardownFabric.sh

ANMERKUNG: Diese lokale Laufzeit soll häufig gestartet, gestoppt und für Entwicklungszwecke heruntergefahren werden. Für eine Laufzeit mit einem dauerhafteren Status möchten Sie das Netzwerk außerhalb der Entwicklungsumgebung bereitstellen. Sie können dies tun, indem Sie das Netzwerk auf Kubernetes oder auf verwalteten Plattformen wie IBM Blockchain ausführen. Trotzdem sollten Sie zuerst dieses Tutorial durchgehen, um sich ein Bild zu machen.

Erstellen und Bereitstellen unseres Unternehmensnetzwerks

Erinnerst du dich an die Pakete yound generator-hyperledger-composerwir haben sie früher installiert?

yobietet uns ein Generator-Ökosystem, in dem Generatoren Plugins sind, die mit dem Befehl yo ausgeführt werden können. Hiermit werden Beispielanwendungen für Boilerplate für verschiedene Projekte eingerichtet. generator-hyperledger-composerist der Yo-Generator, den wir verwenden werden, da er Spezifikationen enthält, um unter anderem Geschäftsnetzwerke mit Boilerplate zu generieren.

1. Generieren eines Unternehmensnetzwerks

Öffnen Sie das Terminal in einem Verzeichnis Ihrer Wahl und Ihres Typs yo hyperledger-composer

Sie werden mit etwas Ähnlichem wie oben begrüßt. Wählen Sie es aus Business Networkund benennen Sie es cards-trading-networkwie folgt:

2. Modellierung unseres Geschäftsnetzwerks

Der erste und wichtigste Schritt zum Aufbau eines Unternehmensnetzwerks ist die Identifizierung der vorhandenen Ressourcen. Wir haben vier Ressourcentypen in der Modellierungssprache:

  • Vermögenswerte
  • Teilnehmer
  • Transaktionen
  • Veranstaltungen

Für unsere cards-trading-networkdefinieren wir einen Asset-Typ TradingCard, einen Teilnehmer-Typ Trader, eine Transaktion TradeCardund ein Ereignis TradeNotification.

Öffnen Sie die generierten Dateien in einem Code-Editor Ihrer Wahl. Öffnen Sie org.example.biznet.ctodie Modellierungsdatei. Löschen Sie den gesamten darin enthaltenen Code, während wir ihn neu schreiben (mit Ausnahme der Namespace-Deklaration).

Dies enthält die Spezifikation für unseren Vermögenswert TradingCard. Alle Assets und Teilnehmer müssen eine eindeutige Kennung haben, die wir im Code angeben. In unserem Fall ist dies der FallcardId

Außerdem verfügt unser Vermögenswert über eine GameType cardTypeEigenschaft, die auf dem unten definierten Enumerator basiert. Aufzählungen werden verwendet, um einen Typ anzugeben, der bis zu N mögliche Werte haben kann, aber sonst nichts. In unserem Beispiel nicht TradingCardkönnen haben cardTypeaußer Baseball, FootballoderCricket

Fügen TraderSie nun den folgenden Code in die Modellierungsdatei ein , um unseren Ressourcentyp für Teilnehmer anzugeben

Dies ist relativ einfach und leicht zu verstehen. Wir haben einen Teilnehmertyp Traderund sie werden durch ihre traderIds eindeutig identifiziert .

Jetzt müssen wir einen Verweis auf unseren TradingCards hinzufügen , damit ein Verweis auf ihren Besitzer verweist, damit wir wissen, wem die Karte gehört. Fügen Sie dazu die folgende Zeile in Ihr TradingCardAsset ein:

--> Trader owner

so dass der Code so aussieht:

Dies ist das erste Mal, dass wir --&gt verwenden. und Sie müssen sich fragen, was das ist. Dies ist ein Beziehungspunkt r. oa nd -> unterscheiden wir zwischen den Eigenschaften einer Ressource und einer Beziehung zu einem anderen Ressourcentyp. Da der Eigentümer is a Trader ein Teilnehmer am Netzwerk ist, möchten wir einen that direkten Verweis auf Trader, und das ist genau whbei ->.

Fügen Sie abschließend diesen Code in die Modellierungsdatei ein, in der angegeben ist, welche Parameter erforderlich sind, um eine Transaktion durchzuführen und ein Ereignis auszugeben.

3. Hinzufügen von Logik für unsere Transaktionen

Um der TradeCardFunktion Logik hinzuzufügen , benötigen wir eine Javascript-Logikdatei. Erstellen Sie ein neues Verzeichnis mit dem Namen libim Ordner Ihres Projekts und erstellen Sie eine neue Datei logic.jsmit dem folgenden Code:

HINWEIS: Der Dekorateur in den Kommentaren über der Funktion ist sehr wichtig. Ohne das @param {org.example.biznet.TradingCard} tradehat die Funktion keine Ahnung, auf was sich Transactionder Code aus der Modellierungssprache bezieht. Stellen Sie außerdem sicher, dass der übergebene Parametername (dh trade) derjenige ist, den Sie direkt danach in der Funktionsdefinition weitergeben.

Dieser Code prüft grundsätzlich, ob die angegebene Karte vorhanden ist, forTrade == trueund aktualisiert in diesem Fall den Kartenbesitzer. Dann wird das TradeNotificationEreignis für diese Karte ausgelöst.

4. Definieren von Berechtigungen und Zugriffsregeln

Fügen Sie eine neue Regel hinzu permissions.acl, um den Teilnehmern Zugriff auf ihre Ressourcen zu gewähren. In der Produktion möchten Sie diese Zugriffsregeln strenger einhalten. Mehr darüber können Sie hier lesen.

5. Generieren eines Business Network Archive (BNA)

Nachdem die gesamte Codierung abgeschlossen ist, ist es Zeit, eine Archivdatei für unser Unternehmensnetzwerk zu erstellen, damit wir sie auf unserer lokalen Fabric-Laufzeit bereitstellen können. Öffnen Sie dazu Terminal in Ihrem Projektverzeichnis und geben Sie Folgendes ein:

composer archive create --sourceType dir --sourceName .

Dieser Befehl teilt Hyperledger Composer mit, dass wir eine BNA aus einem Verzeichnis erstellen möchten, das unser aktueller Stammordner ist.

HINWEIS: Der BNA-Name und die Version stammen aus der package.jsonDatei. Wenn Sie mehr Code hinzufügen, sollten Sie dort die Versionsnummer ändern, um eindeutige Archive bereitzustellen, mit denen vorhandene Unternehmensnetzwerke aktualisiert werden können.

6. Installieren und implementieren Sie die BNA-Datei

Wir können das Netzwerk mithilfe des PeerAdminBenutzers installieren und für unsere lokale Fabric-Laufzeit bereitstellen . Geben Sie ein, um das Unternehmensnetzwerk zu installieren

composer network install --archiveFile [email protected] --card [email protected]

Geben Sie ein, um das Unternehmensnetzwerk bereitzustellen

composer network start --networkName cards-trading-network --networkVersion 0.0.1 --networkAdmin admin --networkAdminEnrollSecret adminpw --card [email protected] --file cards-trading-admin.card

Das networkNameund networkVersionmuss das gleiche sein wie in Ihrem angegeben, package.jsonsonst funktioniert es nicht.

--fileNimmt den Namen der Datei, die für die Visitenkarte DIESES Netzwerks erstellt werden soll. Diese Karte muss dann importiert werden, damit sie durch Eingabe verwendet werden kann

composer card import --file cards-trading-admin.card

Tolle. Wir können jetzt durch Eingabe bestätigen, dass unser Netzwerk funktioniert

composer network ping --card [email protected]

--card Diesmal wird die Administratorkarte des Netzwerks verwendet, das wir anpingen möchten.

Wenn alles gut gegangen ist, sollten Sie etwas Ähnliches sehen:

Testen Sie unser Business Network

Jetzt, da unser Netzwerk auf Fabric läuft, können wir Composer Playground starten, um mit ihm zu interagieren. Geben Sie dazu composer-playgroundTerminal ein und öffnen Sie es //localhost:8080/in Ihrem Browser. Sie sollten etwas Ähnliches sehen:

Drücken Sie Jetzt verbinden für [email protected]und Sie werden mit folgendem Bildschirm begrüßt:

Auf der Seite Definieren können wir Änderungen an unserem Code vornehmen, diese Änderungen bereitstellen, um unser Netzwerk zu aktualisieren, und Geschäftsnetzwerkarchive exportieren.

Gehen Sie zu der Test - Seite aus dem Hauptmenü, und Sie werden sehen:

Wählen Sie Traderaus den Teilnehmern aus, klicken Sie oben rechts auf Neuen Teilnehmer erstellen und erstellen Sie einen Traderähnlichen neuen :

Mach weiter und mach noch ein paar Traders. So sehen meine drei Händler mit den Namen Haardik, John und Tyrone aus.

Lassen Sie uns nun einige Assets erstellen. Klicken Sie TradingCardim linken Menü auf und klicken Sie auf Neues Asset erstellen . Beachten Sie, wie ownerinteressant das Feld hier ist und ungefähr so ​​aussieht:

Das ist eine Beziehung. Das ist was der --> meint. Wir geben den genauen Ressourcentyp an, gefolgt von ihrer eindeutigen Kennung und voila. Wir haben einen Beziehungszeiger.

Machen Sie weiter und machen Sie TradingCardetwas Ähnliches:

Beachten Sie, wie die ownerFelder für mich auf Trader#1aka Haardikverweisen. Machen Sie ein paar weitere Karten und lassen Sie ein Paar forTradeauf true setzen.

Beachten Sie, wie mein Card#2hat forTrade == true?

Versuchen wir es jetzt mit Sammelkarten: D.

Klicken Sie links auf " Transaktion senden" und cardzeigen Sie darauf TradingCard#2und newOwnerzeigen Sie Trader#3darauf:

Drücken Sie Senden und einen Blick auf Ihre nehmen TradingCards, werden Sie sehen , dass Card#2jetzt hat Inhaber Trader#3: D

Generieren eines REST-API-Servers

Transaktionen mit Playground durchzuführen ist nett, aber nicht optimal. Wir müssen clientseitige Software für Benutzer erstellen, um ihnen ein nahtloses Erlebnis zu bieten. Sie müssen nicht einmal unbedingt über die zugrunde liegende Blockchain-Technologie Bescheid wissen. Dazu benötigen wir eine bessere Art der Interaktion mit unserem Unternehmensnetzwerk. Zum Glück haben wir das composer-rest-serverModul, das uns dabei hilft.

Geben Sie composer-rest-serverIhr Terminal ein, geben Sie an [email protected], wählen Sie Nie Namespaces verwenden aus und fahren Sie mit den Standardoptionen für den Rest wie folgt fort:

Öffnen //localhost:3000/explorer/Sie und Sie werden mit einer dokumentierten Version einer automatisch generierten REST-API begrüßt: D.

Generieren einer Angular-Anwendung, die die REST-API verwendet

Erinnerst yo hyperledger-composerdu dich an den Generator? Es kann mehr als nur ein Geschäftsnetzwerk generieren. Es kann auch eine Angular 4-Anwendung erstellt werden, die mit der oben erstellten REST-API ausgeführt wird.

Um die Angular-Webanwendung zu erstellen, geben Sie yo hyperledger-composerIhr Terminal ein, wählen Sie Angular aus, stellen Sie mit der Karte eine Verbindung zu einem vorhandenen Unternehmensnetzwerk her [email protected]und stellen Sie auch eine Verbindung zu einer vorhandenen REST-API her. ( Bearbeiten: Neuere Versionen der Software fragen möglicherweise nach der Kartendatei anstatt nur nach dem Namen der Karte.)

Dies wird fortgesetzt npm install, geben Sie ihm eine Minute Zeit, und wenn alles erledigt ist, können Sie es laden //localhost:4200/und mit einer ähnlichen Seite begrüßt werden:

Bearbeiten: Bei neueren Versionen der Software müssen Sie möglicherweise npm installselbst und dann ausführennpm start

Sie können jetzt über diese Anwendung direkt mit Ihrem Netzwerk spielen, das über den REST-Server auf Port 3000 mit dem Netzwerk kommuniziert.

Herzliche Glückwünsche! Sie haben gerade Ihr erstes Blockchain-Unternehmensnetzwerk mit Hyperledger Fabric und Hyperledger Composer eingerichtet: D.

Sie können dem Kartenhandelsnetzwerk weitere Funktionen hinzufügen, die Preise für die Karten festlegen und allen ein Gleichgewicht geben Trader. Sie können auch mehr Transaktionen haben, mit denen die Traders den Wert von umschalten können forTrade. Sie können dies in Nicht-Blockchain-Anwendungen integrieren und Benutzern ermöglichen, neue Karten zu kaufen, die ihrem Konto hinzugefügt werden, und diese dann im Netzwerk weiter zu handeln.

Die Möglichkeiten sind endlos, was werden Sie daraus machen? Lass es mich in den Kommentaren wissen: D.

BEKANNTER FEHLER: Behandelt Ihre Angular-Webanwendung Transaktionen nicht ordnungsgemäß?

Zum Zeitpunkt des Schreibens hat der Winkelgenerator ein Problem, bei dem die lila Schaltfläche "Aufrufen" auf der Seite "Transaktionen" nichts bewirkt. Um dies zu beheben, müssen wir einige Änderungen an der generierten Winkel-App vornehmen.

1. Öffnen Sie ein Modal, wenn Sie die Taste drücken

Die erste Änderung, die wir vornehmen müssen, ist, dass die Schaltfläche das modale Fenster öffnet. Der Code enthält bereits das erforderliche modale Fenster, der Schaltfläche fehlen nur die Attribute (click)und data-target.

Um dies zu beheben, öffnen Sie /cards-trading-angular-app/src/app/TradeCard/TradeCard.component.html

Der Dateiname kann je nach Name variieren transaction. Wenn Ihr Unternehmensnetzwerk mehrere transactions enthält, müssen Sie diese Änderung für alle HTML-Dateien des Transaktionsressourcentyps vornehmen.

Scrollen Sie bis zum Ende nach unten und Sie werden a sehen on> tag. Go ahead and add these two attributes to that tag:

(click)="resetForm();" data-target="#addTransactionModal"

so the line looks like this:

Invoke<;/button>

The (click) attribute calls resetForm(); which sets all the input fields to empty, and data-target specifies the modal window to be opened upon click.

Save the file, open your browser, and try pressing the invoke button. It should open this modal:

Original text


2. Removing unnecessary fields

Just getting the modal to open isn’t enough. We can see it requests transactionId and timestamp from us even though we didn’t add those fields in our modeling file. Our network stores these values which are intrinsic to all transactions. So, it should be able to figure out these values on it’s own. And as it turns out, it actually does. These are spare fields and we can just comment them out, the REST API will handle the rest for us.

In the same file, scroll up to find the input fields and comment out the divs responsible for those input fields inside addTransactionModal

Save your file, open your browser, and press Invoke. You should see this:

You can now create transactions here by passing data in these fields. Since card and newOwner are relationships to other resources, we can do a transaction like this:

Press Confirm, go back to the Assets page, and you will see that TradingCard#2 now belongs to Trader#1:

Congratulations! You have successfully built and deployed a blockchain business network on Hyperledger Fabric. You also generated a REST API server for that network and learnt how to make web apps which interact with that API.

If you have any questions or doubts, drop it in the comments and I will get back to you.

Email: [email protected]

LinkedIn: //www.linkedin.com/in/haardikkk