Blockchain: Wie sollen wir einen PoC aufbauen?

Deine Augen haben Angst und deine Hände jucken!

In früheren Artikeln haben wir uns mit den Technologien befasst, auf denen Blockchains basieren (Was sollen wir eine Blockchain aufbauen?) und Fälle, die mit ihrer Hilfe umgesetzt werden können (Was kostet uns der Aufbau eines Gehäuses?). Es ist Zeit, mit Ihren Händen zu arbeiten! Zur Umsetzung von Piloten und PoC (Proof of Concept) nutze ich am liebsten die Clouds, weil... Sie haben von überall auf der Welt Zugriff und oft ist es nicht nötig, Zeit für die mühsame Installation der Umgebung aufzuwenden, denn. Es gibt voreingestellte Konfigurationen. Machen wir also etwas Einfaches, wie ein Netzwerk zum Transfer von Münzen zwischen Teilnehmern, und nennen wir es bescheiden Citcoin. Hierzu nutzen wir die IBM Cloud und die universelle Blockchain Hyperledger Fabric. Lassen Sie uns zunächst herausfinden, warum Hyperledger Fabric als universelle Blockchain bezeichnet wird.

Blockchain: Wie sollen wir einen PoC aufbauen?

Hyperledger Fabric – Universelle Blockchain

Im Allgemeinen ist ein universelles Informationssystem:

  • Eine Reihe von Servern und ein Softwarekern, der die Geschäftslogik ausführt;
  • Schnittstellen zur Interaktion mit dem System;
  • Mittel zur Registrierung, Authentifizierung und Autorisierung von Geräten/Personen;
  • Datenbank zur Speicherung von Betriebs- und Archivdaten:

Blockchain: Wie sollen wir einen PoC aufbauen?

Die offizielle Version von Hyperledger Fabric kann unter gelesen werden Webseite, und kurz gesagt, Hyperledger Fabric ist eine Open-Source-Plattform, die es Ihnen ermöglicht, private Blockchains zu erstellen und beliebige Smart Contracts auszuführen, die in den Programmiersprachen JS und Go geschrieben sind. Schauen wir uns die Hyperledger Fabric-Architektur genauer an und stellen wir sicher, dass es sich um ein universelles System handelt, das nur Besonderheiten zum Speichern und Aufzeichnen von Daten aufweist. Die Besonderheit liegt darin, dass Daten, wie in allen Blockchains, in Blöcken gespeichert werden, die nur dann in der Blockchain platziert werden, wenn die Teilnehmer einen Konsens erzielt haben und nach der Aufzeichnung die Daten nicht stillschweigend korrigiert oder gelöscht werden können.

Hyperledger Fabric-Architektur

Das Diagramm zeigt die Hyperledger Fabric-Architektur:

Blockchain: Wie sollen wir einen PoC aufbauen?

Organisationen — Organisationen enthalten Peers, d. h. Blockchain existiert aufgrund der Unterstützung von Organisationen. Verschiedene Organisationen können Teil desselben Kanals sein.

Kanal - eine logische Struktur, die Gleichaltrige in Gruppen vereint. Blockchain ist eingestellt. Hyperledger Fabric kann mehrere Blockchains mit unterschiedlicher Geschäftslogik gleichzeitig verarbeiten.

Mitgliedschaftsdienstleister (MSP) ist eine CA (Certificate Authority) für die Ausstellung von Identitäten und die Zuweisung von Rollen. Um einen Knoten zu erstellen, müssen Sie mit dem MSP interagieren.

Peer-Knoten — Transaktionen überprüfen, die Blockchain speichern, Smart Contracts ausführen und mit Anwendungen interagieren. Peers verfügen über eine vom MSP ausgestellte Identität (digitales Zertifikat). Im Gegensatz zum Bitcoin- oder Etherium-Netzwerk, wo alle Knoten gleich sind, spielen Knoten in Hyperledger Fabric unterschiedliche Rollen:

  • Peer kann sein unterstützender Peer (EP) und führen Sie intelligente Verträge aus.
  • Engagierter Peer (CP) – Nur Daten in der Blockchain speichern und den „Weltstatus“ aktualisieren.
  • Anker-Peer (AP) – Wenn mehrere Organisationen an der Blockchain teilnehmen, werden Anker-Peers für die Kommunikation zwischen ihnen verwendet. Jede Organisation muss einen oder mehrere Anker-Peers haben. Mit Hilfe des AP kann jeder Peer einer Organisation Informationen über alle Peers anderer Organisationen erhalten. Wird zum Synchronisieren von Informationen zwischen APs verwendet. Klatschprotokoll.
  • Führungskollege - Wenn die Organisation mehrere Peers hat, erhält nur der Leiter des Peers Blöcke vom Bestelldienst und gibt sie an die übrigen Peers weiter. Der Leiter kann statisch festgelegt oder dynamisch von Kollegen in der Organisation ausgewählt werden. Das Klatschprotokoll wird auch verwendet, um Informationen über Führungskräfte zu synchronisieren.

Details – Werteinheiten, die in der Blockchain gespeichert sind. Genauer gesagt handelt es sich dabei um Schlüsselwertdaten im JSON-Format. Es sind diese Daten, die in der Blockchain-Blockchain aufgezeichnet werden. Sie verfügen über eine Historie, die auf der Blockchain gespeichert ist, und einen aktuellen Zustand, der in der Datenbank „World State“ gespeichert ist. Datenstrukturen werden je nach Geschäftsaufgabe willkürlich gefüllt. Es gibt keine Pflichtfelder, die einzige Empfehlung besteht darin, dass Vermögenswerte einen Eigentümer haben und einen Wert haben müssen.

Ledger - besteht aus der Blockchain-Blockchain und der Word-Statusdatenbank, die den aktuellen Status der Vermögenswerte speichert. Der Weltstaat verwendet LevelDB oder CouchDB.

Intelligenter Vertrag — Mithilfe intelligenter Verträge wird die Geschäftslogik des Systems implementiert. In Hyperledger Fabric werden Smart Contracts Chaincode genannt. Mithilfe von Chaincode werden Vermögenswerte und Transaktionen darüber spezifiziert. In der Fachsprache sind Smart Contracts Softwaremodule, die in den Programmiersprachen JS oder Go implementiert sind.

Befürwortungsrichtlinie - Für jeden Chaincode können Sie Richtlinien festlegen, wie viele und von wem Sie Bestätigungen für die Transaktion erwarten müssen. Wenn die Richtlinie nicht festgelegt ist, lautet die Standardeinstellung: „Die Transaktion muss von jedem Mitglied einer beliebigen Organisation im Kanal bestätigt werden.“ Richtlinienbeispiele:

  • Die Transaktion muss von jedem Administrator der Organisation bestätigt werden;
  • Muss von jedem Mitglied oder Kunden der Organisation bestätigt werden;
  • Muss von jedem Kollegen der Organisation bestätigt werden.

Bestellservice – Packt Transaktionen in Blöcke und sendet sie an Peers im Kanal. Stellt die Nachrichtenübermittlung an alle Peers im Netzwerk sicher. Wird für Industrieanlagen verwendet Kafka-Nachrichtenbroker, für Entwicklung und Tests Solo.

Anrufverlauf

Blockchain: Wie sollen wir einen PoC aufbauen?

  • Die Anwendung interagiert mit Hyperledger Fabric über Go, Node.js oder Java SDK;
  • Der Client erstellt einen Transaktionsversand und sendet ihn an unterstützende Peers.
  • Der Peer überprüft die Signatur des Clients, schließt die Transaktion ab und sendet die Bestätigungssignatur an den Client zurück. Chaincode wird nur auf dem unterstützenden Peer ausgeführt und das Ergebnis seiner Ausführung wird an alle Peers gesendet. Ein solcher Arbeitsalgorithmus wird als PBFT-Konsens (Practical Byzantine Fault Tolerant) bezeichnet. Unterscheidet sich von klassischer BFT die Tatsache, dass die Nachricht gesendet und eine Bestätigung nicht von allen Teilnehmern, sondern nur von einer bestimmten Gruppe erwartet wird;
  • Nachdem der Kunde die der Empfehlungsrichtlinie entsprechende Anzahl von Antworten erhalten hat, sendet er die Transaktion an den Bestelldienst;
  • Der Bestelldienst bildet einen Block und sendet ihn an alle Commit-Peers. Der Bestelldienst stellt sicher, dass Blöcke nacheinander geschrieben werden, wodurch der sogenannte Ledger Fork (siehe Abschnitt „Gabeln“);
  • Peers erhalten den Block, überprüfen die Endorsement-Richtlinie erneut, schreiben den Block in die Blockchain und ändern den Status in der Datenbank „Weltstatus“.

Diese. Es stellt sich heraus, dass die Rollen zwischen den Knoten aufgeteilt sind. Dies gewährleistet die Skalierbarkeit und Sicherheit der Blockchain:

  • Intelligente Verträge (Chaincode) führen die Unterstützung von Peers durch. Dies gewährleistet die Vertraulichkeit von Smart Contracts, as Es wird nicht von allen Teilnehmern gespeichert, sondern nur von unterstützenden Peers.
  • Die Bestellung sollte schnell funktionieren. Dies wird dadurch gewährleistet, dass Ordering lediglich einen Block bildet und diesen an eine feste Menge von Leader-Peers sendet.
  • Commit-Peers speichern nur die Blockchain – es kann viele davon geben und sie erfordern nicht viel Strom und sofortige Arbeit.

Weitere Architekturlösungen von Hyperledger Fabric und warum es so und nicht anders funktioniert, finden Sie hier: Ursprünge der Architektur oder hier: Hyperledger Fabric: Ein verteiltes Betriebssystem für autorisierte Blockchains.

Hyperledger Fabric ist also ein wirklich universelles System, mit dem Sie:

  • Implementieren Sie beliebige Geschäftslogik mithilfe des Smart-Contract-Mechanismus.
  • Daten aus der Blockchain-Datenbank im JSON-Format schreiben und empfangen;
  • Gewähren und validieren Sie den API-Zugriff mithilfe einer Zertifizierungsstelle.

Nachdem wir uns nun mit den Besonderheiten von Hyperledger Fabric vertraut gemacht haben, können wir endlich etwas Nützliches tun!

Bereitstellung der Blockchain

Formulierung 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. Lassen Sie uns ein Objektmodell zeichnen, das wir weiter in einem Smart Contract implementieren werden. Wir werden also Konten haben, die durch Namen (Name) identifiziert werden und einen Saldo (Saldo) sowie 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 Zustand. Ich werde versuchen, es visuell zu zeichnen:

Blockchain: Wie sollen wir einen PoC aufbauen?

Die obersten Zahlen stellen den aktuellen Stand dar, der in der Datenbank „Weltstaat“ gespeichert ist. Darunter sind Abbildungen zu sehen, die den Verlauf zeigen, der in der Blockchain gespeichert ist. Der aktuelle Vermögenszustand wird durch Transaktionen verändert. Der Vermögenswert wird nur als Ganzes verändert, daher wird als Ergebnis der Transaktion ein neues Objekt erstellt und der aktuelle Wert des Vermögenswerts geht in die Historie ein.

IBM Cloud

Wir erstellen ein Konto in IBM-Cloud. Um die Blockchain-Plattform nutzen zu können, muss diese auf Pay-As-You-Go aktualisiert werden. 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, die es Ihnen ermöglichen, Hyperledger Fabric in der Cloud bereitzustellen. Die folgende Artikel- und Beispielserie hat mir gefallen:

Im Folgenden finden Sie Screenshots der IBM Blockchain-Plattform. Dies ist keine Anleitung zum Erstellen einer Blockchain, sondern lediglich eine Demonstration des Umfangs der Aufgabe. Für unsere Zwecke erstellen wir also eine Organisation:

Blockchain: Wie sollen wir einen PoC aufbauen?

Wir erstellen darin Knoten: Orderer CA, Org1 CA, Orderer Peer:

Blockchain: Wie sollen wir einen PoC aufbauen?

Wir starten Benutzer:

Blockchain: Wie sollen wir einen PoC aufbauen?

Erstellen Sie einen Kanal und nennen Sie ihn „Citcoin“:

Blockchain: Wie sollen wir einen PoC aufbauen?

Im Wesentlichen ist Channel eine Blockchain, also beginnt es beim Nullblock (Genesis-Block):

Blockchain: Wie sollen wir einen PoC aufbauen?

Einen Smart Contract schreiben

/*
 * Citcoin smart-contract v1.5 for Hyperledger Fabric
 * (c) Alexey Sushkov, 2019
 */
 
'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)));
    }
    // Get all accounts
    async GetAccounts(ctx) {
        // Get account list:
        let accounts = '{}'
        let accountsData = await ctx.stub.getState('accounts');
        if (accountsData) {
            accounts = JSON.parse(accountsData.toString());
        } else {
            throw new Error('accounts not found');
        }
        return accountsData.toString()
    }
     // add a account object to the blockchain state identifited by their name
    async AddAccount(ctx, name, balance) {
        // this is account data:
        let account = {
            name: name,
            balance: Number(balance),       
            type: 'account',
        };
        // create account:
        await ctx.stub.putState(name, Buffer.from(JSON.stringify(account)));
 
        // Add account to list:
        let accountsData = await ctx.stub.getState('accounts');
        if (accountsData) {
            let accounts = JSON.parse(accountsData.toString());
            if (accounts.length < maxAccounts)
            {
                accounts.push(name);
                await ctx.stub.putState('accounts', Buffer.from(JSON.stringify(accounts)));
            } else {
                throw new Error('Max accounts number reached');
            }
        } else {
            throw new Error('accounts not found');
        }
        // return  object
        return JSON.stringify(account);
    }
    // Sends money from Account to Account
    async SendFrom(ctx, fromAccount, toAccount, value) {
        // get Account from
        let fromData = await ctx.stub.getState(fromAccount);
        let from;
        if (fromData) {
            from = JSON.parse(fromData.toString());
            if (from.type !== 'account') {
                throw new Error('wrong from type');
            }   
        } else {
            throw new Error('Accout from not found');
        }
        // get Account to
        let toData = await ctx.stub.getState(toAccount);
        let to;
        if (toData) {
            to = JSON.parse(toData.toString());
            if (to.type !== 'account') {
                throw new Error('wrong to type');
            }  
        } else {
            throw new Error('Accout to not found');
        }
 
        // update the balances
        if ((from.balance - Number(value)) >= 0 ) {
            from.balance -= Number(value);
            to.balance += Number(value);
        } else {
            throw new Error('From Account: not enought balance');          
        }
 
        await ctx.stub.putState(from.name, Buffer.from(JSON.stringify(from)));
        await ctx.stub.putState(to.name, Buffer.from(JSON.stringify(to)));
                 
        // define and set Event
        let Event = {
            type: "SendFrom",
            from: from.name,
            to: to.name,
            balanceFrom: from.balance,
            balanceTo: to.balance,
            value: value
        };
        await ctx.stub.setEvent('SendFrom', Buffer.from(JSON.stringify(Event)));
 
        // return to object
        return JSON.stringify(from);
    }
 
    // get the state from key
    async GetState(ctx, key) {
        let data = await ctx.stub.getState(key);
        let jsonData = JSON.parse(data.toString());
        return JSON.stringify(jsonData);
    }
    // GetBalance   
    async GetBalance(ctx, accountName) {
        let data = await ctx.stub.getState(accountName);
        let jsonData = JSON.parse(data.toString());
        return JSON.stringify(jsonData);
    }
     
    // Refill own balance
    async RefillBalance(ctx, toAccount, value) {
        // get Account to
        let toData = await ctx.stub.getState(toAccount);
        let to;
        if (toData) {
            to = JSON.parse(toData.toString());
            if (to.type !== 'account') {
                throw new Error('wrong to type');
            }  
        } else {
            throw new Error('Accout to not found');
        }
 
        // update the balance
        to.balance += Number(value);
        await ctx.stub.putState(to.name, Buffer.from(JSON.stringify(to)));
                 
        // define and set Event
        let Event = {
            type: "RefillBalance",
            to: to.name,
            balanceTo: to.balance,
            value: value
        };
        await ctx.stub.setEvent('RefillBalance', Buffer.from(JSON.stringify(Event)));
 
        // return to object
        return JSON.stringify(from);
    }
}
module.exports = CitcoinEvents;

Intuitiv sollte hier alles klar sein:

  • Es gibt mehrere Funktionen (AddAccount, GetAccounts, SendFrom, GetBalance, RefillBalance), die das Demoprogramm mithilfe der Hyperledger Fabric API aufruft.
  • Die Funktionen SendFrom und RefillBalance generieren Ereignisse (Event), die das Demoprogramm empfängt.
  • Die Instanziierungsfunktion wird einmal aufgerufen, wenn der Smart Contract instanziiert wird. Tatsächlich wird es nicht einmal aufgerufen, sondern jedes Mal, wenn sich die Version des Smart Contracts ändert. Daher ist es eine schlechte Idee, eine Liste mit einem leeren Array zu initialisieren, weil Wenn wir jetzt die Version des Smart Contracts ändern, verlieren wir die aktuelle Liste. Aber nichts, ich lerne nur).
  • Konten und die Liste der Konten (Konten) sind JSON-Datenstrukturen. JS wird zur Datenmanipulation verwendet.
  • Sie können den aktuellen Wert eines Vermögenswerts abrufen, indem Sie die Funktion getState aufrufen und ihn mit putState aktualisieren.
  • Beim Anlegen eines Accounts wird die AddAccount-Funktion aufgerufen, in der ein Vergleich für die maximale Anzahl von Accounts in der Blockchain (maxAccounts = 5) durchgeführt wird. Und hier gibt es einen Pfosten (haben Sie es bemerkt?), der zu einem endlosen Anstieg der Anzahl der Konten führt. Solche Fehler müssen vermieden werden)

Als nächstes laden wir den Smart Contract in den Channel und instanziieren ihn:

Blockchain: Wie sollen wir einen PoC aufbauen?

Wir schauen uns die Transaktion zur Installation des Smart Contracts an:

Blockchain: Wie sollen wir einen PoC aufbauen?

Sehen Sie sich Details zu unserem Kanal an:

Blockchain: Wie sollen wir einen PoC aufbauen?

Als Ergebnis erhalten wir das folgende Schema des Blockchain-Netzwerks in der IBM Cloud. Außerdem ist auf dem Diagramm ein Demoprogramm zu sehen, das in der Amazon-Cloud auf einem virtuellen Server läuft (Details dazu finden Sie im nächsten Abschnitt):

Blockchain: Wie sollen wir einen PoC aufbauen?

Erstellen einer GUI für Hyperledger Fabric-API-Aufrufe

Hyperledger Fabric verfügt über eine API, die verwendet werden kann:

  • Erstellen Sie einen Kanal.
  • Peer-Verbindungen zum Kanal;
  • Installation und Instanziierung von Smart Contracts im Kanal;
  • Aufrufen von Transaktionen;
  • Fordern Sie Informationen zur Blockchain an.

Anwendungsentwicklung

In unserem Demoprogramm werden wir die API nur zum Aufrufen von Transaktionen und zum Anfordern von Informationen verwenden, weil. Die restlichen Schritte haben wir bereits mit der IBM Blockchain-Plattform durchgeführt. Wir schreiben eine GUI mit dem 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 hinterlasse ich einen Link zu einer Vortragsreihe, die mir am besten gefallen hat: Full-Stack-Webanwendung mit Vue.js und Express.js. Das Ergebnis ist eine Client-Server-Anwendung mit einer vertrauten grafischen Oberfläche im Stil von Googles Material Design. Die REST-API zwischen Client und Server besteht aus mehreren Aufrufen:

  • HyperledgerDemo/v1/init – Blockchain initialisieren;
  • HyperledgerDemo/v1/accounts/list – eine Liste aller Konten abrufen;
  • HyperledgerDemo/v1/account?name=Bob&balance=100 – Bob-Konto erstellen;
  • HyperledgerDemo/v1/info?account=Bob – Informationen zum Bob-Konto abrufen;
  • HyperledgerDemo/v1/transaction?from=Bob&to=Alice&volume=2 – zwei Münzen von Bob an Alice übertragen;
  • HyperledgerDemo/v1/disconnect – Verbindung zur Blockchain schließen.

API-Beschreibung mit aufgesetzten Beispielen Website des Postboten - ein bekanntes Programm zum Testen der HTTP-API.

Demo-Anwendung in der Amazon-Cloud

Die Bewerbung wurde auf Amazon hochgeladen, weil IBM war immer noch nicht in der Lage, mein Konto zu aktualisieren und mir die Erstellung virtueller Server zu ermöglichen. Wie die Domain an die Kirsche angehängt wurde: www.citcoin.info. Ich lasse den Server eine Weile eingeschaltet und schalte ihn dann aus, weil (Cents für die Miete sinken und Citrcoin-Münzen sind noch nicht an der Börse gelistet.) Ich habe Demo-Screenshots in den Artikel eingefügt, damit die Logik der Arbeit klar ist. Die Demoanwendung kann:

  • Initialisieren Sie die Blockchain;
  • Erstellen Sie ein Konto (aber jetzt kann kein neues Konto erstellt werden, da die maximale Anzahl der im Smart Contract angegebenen Konten in der Blockchain erreicht wurde);
  • Holen Sie sich eine Liste der Konten;
  • Übertragen Sie Bitcoin-Münzen zwischen Alice, Bob und Alex.
  • Ereignisse empfangen (aber jetzt gibt es keine Möglichkeit, Ereignisse anzuzeigen, daher steht der Einfachheit halber in der Benutzeroberfläche, dass Ereignisse nicht unterstützt werden);
  • Aktionen protokollieren.

Zuerst initialisieren wir die Blockchain:

Blockchain: Wie sollen wir einen PoC aufbauen?

Als nächstes eröffnen wir unser Konto, spielen Sie nicht mit dem Kontostand:

Blockchain: Wie sollen wir einen PoC aufbauen?

Wir erhalten eine Liste aller verfügbaren Konten:

Blockchain: Wie sollen wir einen PoC aufbauen?

Wir wählen den Absender und den Empfänger aus und erhalten deren Guthaben. Sind Absender und Empfänger identisch, wird sein Konto aufgefüllt:

Blockchain: Wie sollen wir einen PoC aufbauen?

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

Blockchain: Wie sollen wir einen PoC aufbauen?

Eigentlich ist das mit einem Demoprogramm alles. Als nächstes können Sie unsere Transaktion in der Blockchain sehen:

Blockchain: Wie sollen wir einen PoC aufbauen?

Und die allgemeine Liste der Transaktionen:

Blockchain: Wie sollen wir einen PoC aufbauen?

Damit haben wir die Implementierung des PoC zur Schaffung des Citcoin-Netzwerks erfolgreich abgeschlossen. Was muss noch getan werden, um Citcoin zu einem vollwertigen Münztransfernetzwerk zu machen? Wenig:

  • Implementieren Sie in der Phase der Kontoerstellung die Generierung eines privaten/öffentlichen Schlüssels. Der private Schlüssel muss beim Kontobenutzer gespeichert werden, der öffentliche Schlüssel muss in der Blockchain gespeichert werden.
  • Machen Sie eine Übertragung von Coins, bei der nicht ein Name, sondern ein öffentlicher Schlüssel zur Identifizierung des Benutzers verwendet wird.
  • Verschlüsseln Sie Transaktionen, die vom Benutzer zum Server gehen, mit seinem privaten Schlüssel.

Abschluss

Wir haben das Citcoin-Netzwerk mit den folgenden Funktionen implementiert: Konto hinzufügen, Guthaben abrufen, Konto auffüllen, Münzen von einem Konto auf ein anderes übertragen. Was hat uns der Aufbau eines PoC gekostet?

  • Es ist notwendig, die Blockchain im Allgemeinen und Hyperledger Fabric im Besonderen zu studieren;
  • Erfahren Sie, wie Sie IBM- oder Amazon-Clouds nutzen.
  • Lernen Sie die Programmiersprache JS und einige Web-Frameworks.
  • Wenn einige Daten nicht in der Blockchain, sondern in einer separaten Datenbank gespeichert werden müssen, erfahren Sie, wie Sie sie beispielsweise mit PostgreSQL integrieren.
  • Und zu guter Letzt – ohne Linux-Kenntnisse in der modernen Welt nirgendwo!)

Natürlich kein Hexenwerk, aber man muss schwitzen!

Исходники auf GitHub

Quellenangabe GitHub. Kurzbeschreibung des Repositorys:
Katalog «Server» - Node.js-Server
Katalog «Auftraggeber» - Node.js-Client
Katalog «Blockchain» (Werte von Parametern und Schlüsseln sind natürlich nicht funktionsfähig und werden nur als Beispiel angegeben):

  • Vertrag – intelligente Vertragsquelle
  • Wallet – Benutzerschlüssel für die Verwendung der Hyperledger Fabric API.
  • *.cds – kompilierte Versionen von Smart Contracts
  • *.json-Dateien – Beispiele für Konfigurationsdateien für die Verwendung der Hyperledger Fabric API

Es ist nur der Anfang!

Source: habr.com

Kommentar hinzufügen