Was sollen wir eine Blockchain bauen?

Die gesamte Geschichte der Menschheit ist eine kontinuierliche Befreiung von Ketten und die Schaffung neuer, noch stärkerer Ketten. (Anonymer Autor)

Wenn ich zahlreiche Blockchain-Projekte (Bitshares, Hyperledger, Exonum, Ethereum, Bitcoin usw.) analysiere, verstehe ich, dass sie aus technischer Sicht alle auf denselben Prinzipien basieren. Blockchains ähneln Häusern, die trotz ihrer Vielfalt an Designs, Dekorationen und Bezeichnungen ein Fundament, Wände, Dach, Fenster und Türen haben, die auf bestimmte Weise miteinander verbunden sind. Und wenn Sie die Grundprinzipien der Gebäudeplanung verstehen, die Eigenschaften der verwendeten Materialien kennen, können Sie den Zweck eines bestimmten Hauses bestimmen. Gegenwärtig ist mit der Blockchain eine Situation entstanden, von der jeder gehört hat, aber nur wenige verstehen die Architektur und die Prinzipien der Arbeit. Daher entsteht ein Missverständnis darüber, was und wie es sinnvoll ist, Blockchain-Technologien zu verwenden.

In diesem Artikel analysieren wir die Eigenschaften und Prinzipien, die allen Blockchains gemeinsam sind. Als nächstes schauen wir uns die Aufgaben an , die mit der Blockchain gelöst werden können, und um das Material zu konsolidieren, werden wir auf unserer virtuellen Site eine kleine , aber echte Blockchain erstellen !

Denken wir also daran, welche Probleme die Blockchain ursprünglich gelöst hat.

Ich bin sicher, dass viele über eine verteilte, dezentrale, öffentliche und unveränderliche Datenbank sprechen werden. Aber warum wurde das alles gebraucht?

Ich bevorzuge es, jede Technologie durch das Lesen von Standards zu studieren, da alle Artikel und Bücher zum untersuchten Thema darauf basieren. Derzeit fehlen jedoch Blockchain-Standards, für deren Entwicklung wurden nur Komitees in ISO eingerichtet. Derzeit hat jedes öffentliche Blockchain-Projekt ein eigenes Weißbuch, was im Wesentlichen eine technische Aufgabe ist. Das erste bekannte Blockchain-Projekt ist das Bitcoin-Netzwerk. Wir gehen auf die offizielle Website des Netzwerks und sehen, wie alles begann.

Blockchain-Herausforderung


Die Aufgabe, die die Blockchain im Bitcoin-Pioniernetzwerk gelöst hat, besteht darin, eine vertrauenswürdige Übertragung des Eigentums an digitalen Assets in einer nicht vertrauenswürdigen Umgebung ohne Zwischenhändler durchzuführen. In einem Bitcoin-Netzwerk ist ein digitaler Vermögenswert beispielsweise eine digitale Bitcoin-Münze. Bei allen technischen Lösungen von Bitcoin und anderen Blockchains geht es darum, dieses Problem zu lösen.

Blockchain-Probleme


Angenommen, eine bestimmte Finanzorganisation gibt an, weltweit ein Netzwerk aufgebaut zu haben, mit dem Sie Geld an jede Person überweisen können. Würdest du ihr glauben? Wenn es sich bei dieser Organisation um Visa oder MasterCard handelt, glauben Sie es höchstwahrscheinlich, aber wenn relativ gesehen AnonymousWorldMoney, wahrscheinlich nicht. Warum so? Aber weil wir sehr gut wissen, wie verteilte Systeme von privaten Unternehmen hergestellt werden, zu welchen Zwecken und wozu dies führen kann. Lassen Sie uns die Probleme solcher Systeme genauer betrachten und wie sie mit Blockchain-Technologien gelöst werden können.

Angenommen, im bedingten AnonymousWorldMoney gibt es Server mit Datenbanken, und es ist gut, wenn sich mehrere davon in verschiedenen Rechenzentren befinden. Wenn der Absender das Geld überweist, wird eine Transaktion aufgezeichnet, die auf alle Server repliziert wird, und das Geld erreicht den Empfänger.

Bild

In einer idealen Welt funktioniert ein solches Schema großartig, aber in unserer eigenen treten die folgenden Probleme auf:

  1. Das Problem der Identifizierung von Teilnehmern einerseits und die Notwendigkeit der Anonymität von Transaktionen andererseits. Das heißt, Es ist notwendig, Geld an einen bestimmten Empfänger zu überweisen, damit niemand über diese Transaktion Bescheid weiß, außer den Teilnehmern an der Transaktion. Banken haben Kontonummern und Bankkarten, die mit einer bestimmten Person oder juristischen Person verknüpft sind, und das Bankgeheimnis schützt Transaktionsinformationen. Und wer garantiert, dass das bedingte AnonymousWorldMoney personenbezogene Daten und Transaktionsinformationen nicht für eigene Zwecke verwendet?
  2. Wie kann sichergestellt werden, dass der Empfänger genau den Betrag erhalten hat, der an ihn überwiesen wurde? Relativ gesehen überwies der Absender 100 USD und der Empfänger 10 USD. Der Absender kommt mit seiner Quittung im Büro von AnonymousWorldMoney an, und der Sachbearbeiter zeigt seine Version, in der steht, dass der Absender nur 10 US-Dollar überwiesen hat.
  3. Ein nicht vertrauenswürdiges Umweltproblem wie Betrug, der als doppelte Ausgaben bezeichnet wird. Ein skrupelloser Teilnehmer kann sein Guthaben mehrmals ausgeben, bis die Zahlung auf alle Server repliziert wird. Natürlich hat niemand das GAP-Theorem aufgehoben, und letztendlich wird Kohärenz erreicht, aber jemand wird kein Geld für die erbrachten Dienstleistungen oder Waren erhalten. Wenn daher kein vollständiges Vertrauen in die Zahlungsorganisation oder die Teilnehmer an Transaktionen besteht, muss ein Netzwerk aufgebaut werden, das nicht auf Vertrauen, sondern auf Kryptografie basiert.
  4. Das bedingte AnonymousWorldMoney verfügt über eine begrenzte Anzahl von Servern, die möglicherweise unbeabsichtigt oder in böswilliger Absicht nicht mehr verfügbar sind.
  5. AnonymousWorldMoney übernimmt seine konkrete Provision.
  6. Die Fähigkeit zu kontrollieren. Bei der Nutzung von Bitcoin stellte sich heraus, dass Benutzer nicht nur Münzen untereinander übertragen, sondern auch verschiedene Transaktionsbedingungen überprüfen, Arbeitsszenarien programmieren, Aktionen abhängig von den Bedingungen automatisch ausführen usw. möchten.

Wie Blockchain diese Probleme löst


  1. Die Teilnehmer werden anhand eines Schlüsselpaars identifiziert: privat und öffentlich. Der Algorithmus für die digitale Signatur identifiziert den Absender und den Empfänger eindeutig und lässt ihre Identität anonym.
  2. Transaktionen werden in Blöcken gesammelt, der Hash des Blocks wird berechnet, der im nächsten Block aufgezeichnet wird. Diese Abfolge des Schreibens von Hashes in Blöcken gab den Namen Blockchain-Technologie und macht es auch unmöglich, Blöcke oder einzelne Transaktionen diskret aus Blöcken zu ändern / löschen. Wenn eine Transaktion in die Blockchain fällt, können Sie sicher sein, dass ihre Daten unverändert bleiben.
  3. Betrug mit doppelten Ausgaben wird verhindert, indem im Netzwerk ein Konsens darüber erzielt wird, welche Daten als korrekt angesehen und welche verworfen werden sollten. Im Bitcoin-Netzwerk wird ein Konsens durch den Nachweis von PoW (Proof-of-Work) erzielt.
  4. Die Zuverlässigkeit der Funktionsweise des Netzwerks wird durch die Tatsache erreicht, dass die Blockchain öffentlich ist, wobei jeder Teilnehmer seinen eigenen Knoten starten, eine vollständige Kopie der Blockchain erhalten und darüber hinaus unabhängig damit beginnen kann, Transaktionen auf Richtigkeit zu überprüfen. Es sollte beachtet werden, dass Sie mit modernen Blockchains nicht nur öffentliche (offene), sondern auch private (geschlossene) Blockchains erstellen und kombinierte Schemata verwenden können.
  5. Ich werde die Provision in der Blockchain nicht vollständig loswerden, weil Sie müssen Leute bezahlen, die das Netzwerk unterstützen, aber in der Blockchain wird die Notwendigkeit der Provision so überzeugend bewiesen, dass kein Zweifel an ihrer Notwendigkeit besteht.
  6. Moderne Blockchains können Geschäftslogik implementieren, die in der Blockchain als Smart Contracts bezeichnet wird. Die Logik intelligenter Verträge wird in verschiedenen Hochsprachen implementiert.

Als nächstes betrachten wir diese Lösungen genauer.

Blockchain-Architektur


Blockchain-Komponenten


Jeder Teilnehmer kann seinen Knoten mit einer vollständigen Kopie der Blockchain (vollständiger Knoten) ausführen. Vollständige Knoten, die Transaktionen in der Blockchain aufzeichnen können, werden als Konsensknoten (Zeugen) oder Miner bezeichnet. Vollständige Knoten, die nur die Richtigkeit von Transaktionen überprüfen, werden als Überwachungsknoten bezeichnet . Light Clients speichern keine vollständigen Kopien der Blockchain, sondern interagieren mit dem Netzwerk über vollständige Knoten.
Die meisten Benutzer verwenden Light Clients oder Web Wallets, um Transaktionen abzuschließen. Alle Knoten sind miteinander verbunden. Mit diesem Satz von Elementen wird die Netzwerkarchitektur stabiler:

Bild

Transaktionslebenszyklus


Schauen wir uns den Transaktionslebenszyklus an und analysieren ihn in Teilen:

Bild

Blockchain-Technologie


Lassen Sie uns näher auf technische Lösungen und ihre Beziehungen zueinander eingehen.

Identifizierung


Jede Blockchain-Transaktion muss digital signiert sein. Um die Transaktion abzuschließen, muss jeder Teilnehmer ein Schlüsselpaar haben: privat / öffentlich. Manchmal wird ein Schlüsselpaar als Brieftasche bezeichnet, weil Schlüssel sind eindeutig mit der eindeutigen digitalen Adresse und dem Kontostand des Teilnehmers verknüpft. In Wirklichkeit sind Schlüssel und Adressen nur Zahlenfolgen in verschiedenen Zahlensystemen. Beispiele für Schlüssel und Brieftaschenadressen:

Private key: 0a78194a8a893b8baac7c09b6a4a4b4b161b2f80a126cbb79bde231a4567420f Public key: 0579b478952214d7cddac32ac9dc522c821a4489bc10aac3a81b9d1cd7a92e57ba Address: 0x3814JnJpGnt5tB2GD1qfKP709W3KbRdfb27V 

Um eine digitale Signatur auf Blockchains zu erstellen, wird ein Algorithmus verwendet, der auf elliptischen Kurven basiert: Elliptic Curve Digital Signature Algorithm (ECDSA). Für seinen Betrieb wird der private Schlüssel (256-Bit-Nummer) normalerweise zufällig verwendet. Die Anzahl der Schlüsseloptionen beträgt 2 hoch 256, sodass wir über die praktische Unmöglichkeit sprechen können, private Schlüsselwerte abzugleichen.

Ferner wird der öffentliche Schlüssel aus dem privaten Schlüssel erhalten, indem sein Wert mit den Koordinaten des Punktes multipliziert wird, der sich auf der elliptischen Kurve befindet, wodurch die Koordinaten des neuen Punkts derselben Kurve erhalten werden. Diese Aktion stellt sicher, dass Sie ein Schlüsselpaar erhalten, das zum digitalen Signieren von Transaktionen geeignet ist. Schließlich wird die Brieftaschenadresse eindeutig aus dem öffentlichen Schlüssel berechnet.

Es gibt viele Artikel mit Details zur in der Blockchain verwendeten Kryptographie, zum Beispiel: Bitcoin auf den Punkt gebracht - Kryptographie

Der private Schlüssel muss geheim gehalten und sicher aufbewahrt werden. Der öffentliche Schlüssel ist allen bekannt. Wenn der private Schlüssel verloren geht, kann der Zugriff auf das Asset (Münzen) nicht wiederhergestellt werden und Geld geht für immer verloren. Daher ist die Aufgabe der zuverlässigen Speicherung privater Schlüssel äußerst relevant, weil Dies ist keine Bank, bei der Sie immer mit einem Reisepass kommen und Ihr Konto wiederherstellen können. Es gibt eine ganze Branche für die Herstellung von sogenannten Cold Crypto Wallets, ähnlich wie bei Flash-Laufwerken:

Bild

Oder Sie können beispielsweise zuverlässigere Methoden verwenden, um den Wert des privaten Schlüssels auf den Token auszuschalten:

Bild

Transaktionen


Weitere Informationen zur Struktur der Transaktion finden Sie im Artikel Bitcoin auf den Punkt gebracht - Transaktion . Für uns ist es wichtig zu verstehen, dass jede Transaktion mindestens die folgenden Daten enthält:

 From: 0x48C89c341C5960Ca2Bf3732D6D8a0F4f89Cc4368 -    To: 0x367adb7894334678b90fe7882a5b06f7fbc783a -    Value: 0.0001 -   Transaction Hash: 0x617ede331e8a99f46a363b32b239542bb4006e4fa9a2727a6636ffe3eb095cef -   

Als nächstes wird die Transaktion mit einem privaten Schlüssel signiert und an alle Knoten in der Blockchain gesendet, die die Gültigkeit von Transaktionen überprüfen (siehe Details zum Betrieb des Bitcoin in einem kurzen Protokoll ). Der Transaktionsüberprüfungsalgorithmus ist nicht trivial und umfasst zwei Dutzend Schritte .

Transaktionsblöcke


Nach Überprüfung der Gültigkeit von Transaktionen bilden Knoten daraus Blöcke. Zusätzlich zu den Transaktionen wird der Hash des vorherigen Blocks, eine Zahl (Nonce-Zähler) in den Block geschrieben und der Hash des aktuellen Blocks wird unter Verwendung des SHA-256-Algorithmus berechnet. Ein Hash muss Komplexitätsbedingungen festgelegt haben. In einem Bitcoin-Netzwerk ändert sich die Hash-Komplexität beispielsweise automatisch alle 2 Wochen, abhängig von der Netzwerkkapazität, sodass der Block ungefähr alle 10 Minuten generiert wird. Die Komplexität wird durch die folgende Bedingung bestimmt: Der gefundene Hash muss kleiner als eine vorgegebene Zahl sein. Wenn diese Bedingung nicht erfüllt ist, wird 1 zu Nonce hinzugefügt und die Hash-Berechnung wird wiederholt. Zur Auswahl des Hashs wird das Feld Nonce verwendet, weil Dies sind die einzigen Daten im Block, die geändert werden können. Der Rest sollte unverändert bleiben. Der richtige Hash muss am Anfang eine bestimmte Anzahl von Nullen haben, zum Beispiel einen der echten Hashes:

 000000000000000000000bf03212e7dd1176f52f816fa395fc9b93c44bc11f91 

Das erfolgreiche Finden eines Hash ist ein Beweis für die geleistete Arbeit (Proof-of-Work, PoW) für Bitcoin- oder Ethereum-Netzwerke. Der Prozess des Findens von Hashes wird in Analogie zum Goldabbau als Bergbau bezeichnet. Der Name bestimmt genau das Wesentliche des Prozesses, weil Es gibt eine einfache Aufzählung von Optionen, und wenn jemand einen geeigneten Hash gefunden hat, ist dies wirklich viel Glück. So finden Sie ein echtes Goldnugget in Tonnen von Gangart. Die Belohnung für den Block beträgt jetzt 12,5 BTC. Wenn Sie 3900 USD mit dem aktuellen Bitcoin-Wechselkurs multiplizieren, erhalten Sie mehr als ein Kilogramm reines Gold. Es gibt etwas zu kämpfen!

Nachdem der Hash erfolgreich gefunden wurde, werden der Block und der gefundene Hash selbst vom nächsten Block in die Blockchain geschrieben. Weitere Details zur Struktur von Blöcken finden Sie im Artikel Bitcoin in einer kurzen Blockchain . Im Folgenden werde ich ein vereinfachtes Diagramm geben:

Bild

Die Blockchain beginnt mit einem Block, der noch keinen Hash des vorherigen Blocks enthält. Es gibt nur einen solchen Block in der Blockchain und hat seinen eigenen Genesis-Block. Die übrigen Blöcke haben die gleiche Struktur und unterscheiden sich nur in der Anzahl der Transaktionen. Echte Transaktionen und Blöcke, die derzeit in Bitcoin oder Ethereum erstellt werden, können im Block-Explorer angezeigt werden.

Die Größe der Blöcke in Bitcoin ist auf 1 MB begrenzt. Bei einer minimalen Informationsmenge in einer Transaktion von etwa 200 Byte kann die maximale Größe in einem Block etwa 6.000 Transaktionen betragen. Von hier aus ist übrigens die Leistung von Bitcoin, über die alle lachen: Etwa alle 10 Minuten * 60 Sekunden = 600 Sekunden wird ein Block generiert, was eine formale Leistung von etwa 10 TPS ergibt. Obwohl in Wirklichkeit - dies ist keine Leistung, sondern ein bewusst implementierter Arbeitsalgorithmus. Ethereum hat gerade die Blockgenerierungszeit von 15 Sekunden für den Wettbewerb erreicht. und Produktivität nahm offiziell ab. Daher ist es in Blockchains, die PoW als Konsens verwenden, im Allgemeinen sinnlos, die Leistung zu vergleichen, weil Dies hängt direkt von der Komplexität der Berechnung des Caches ab, der jedem zugewiesen werden kann.

Gabeln


Und was passiert, wenn beispielsweise mehrere Knoten Hashes finden, die Komplexitätsbedingungen erfüllen, aber unterschiedliche Bedeutungen haben (mit anderen Worten zu unterschiedlichem Konsens kommen) und Blöcke in die Blockchain schreiben? Mal sehen, wie sich die Blockchain vor dieser Situation schützt. In diesem Fall tritt die sogenannte Gabel ('Gabel') auf, und die Blockchain hat zwei Versionen der Kette:

Bild

Was passiert als nächstes? Ferner beginnt ein Teil des Netzwerks von einer Kette aus an dem N + 2-Block zu arbeiten, und ein Teil von einer anderen:

Bild

Einige dieser Blöcke werden früher gefunden und an die Blockchain gesendet. Anschließend muss die Blockchain gemäß den Regeln zu einer längeren Kette wechseln und alle Transaktionen aus dem alternativen Block abbrechen:

Bild

Gleichzeitig kann es vorkommen, dass sich die Transaktion des Teilnehmers nur in einem der Blöcke der Gabelung befand, die storniert wurden. Um sicherzustellen, dass die gewünschte Transaktion in der Blockchain aufgezeichnet wird, gibt es eine allgemeine Empfehlung. Bevor Sie der Transaktion vertrauen, müssen Sie warten, bis die nächsten Blöcke zur Blockchain hinzugefügt werden. Die Empfehlungen, wie viele Blöcke auf verschiedene Blockchains warten sollen, variieren. Für ein Bitcoin-Netzwerk beträgt das Minimum beispielsweise 2 Blöcke, das Maximum 6.

Das gleiche Bild mit einer Gabelung von Blöcken wird auch beim sogenannten 51% -Angriff beobachtet. In diesem Fall wird eine Gruppe von Bergleuten versuchen, eine alternative Blockkette aufzubauen, um die Kette mit ihren betrügerischen Transaktionen abzubrechen. Obwohl es derzeit rentabler ist, anstelle von Betrug Ihre Macht für ehrlichen Bergbau auszugeben.

Konsens


Um einen Block in die Blockchain zu schreiben, muss das Netzwerk zu einem Konsens kommen. Erinnern wir uns an die Aufgabe, einen Konsens in Computerkommunikationsnetzen zu erzielen. Das Problem wird als Aufgabe der byzantinischen Generäle BFT ( Byzantinische Fehlertoleranz ) formuliert. Ohne eine bildliche Beschreibung der Probleme der byzantinischen Armee kann das Problem wie folgt formuliert werden: Wie können Netzwerkknoten zu einem gemeinsamen Ergebnis kommen, wenn einige Netzwerkknoten sie bewusst verzerren können? Bestehende Algorithmen zur Lösung des BFT-Problems zeigen, dass das Netzwerk ordnungsgemäß funktionieren kann, wenn Betrüger weniger als 1/3 sind. Warum wurde der BFT-Konsens nicht auf das Bitcoin-Netzwerk angewendet? Warum PoW verwenden? Es gibt mehrere Gründe:

  • BFT funktioniert gut mit einem kleinen festen Satz von Knoten, und in der öffentlichen Blockchain ist die Anzahl der Knoten unvorhersehbar, und außerdem können die Knoten beliebig ein- und ausgeschaltet werden.
  • Es ist notwendig, Menschen zum Starten von Blockchain-Knoten zu motivieren. Dazu müssen die Menschen Belohnungen erhalten. In BFT gibt es formal nichts, wofür man eine Belohnung erhalten könnte, aber was eine Belohnung in PoW ist, ist für jeden auf einer intuitiven Ebene verständlich: für Strom, den der Prozessor beim Auffinden des Block-Hash verbraucht.

Neben PoW gibt es mehrere weitere Konsensprobleme, die in modernen Blockchains verwendet werden, zum Beispiel:

  • PoS (Proof-of-Stake) - in der Hyperledger- Blockchain
  • DPoS (Delegated Proof-of-Stake) - in der BitShares- Blockchain
  • BFT-Modifikationen: SBFT (Simplified BFT) und PBFT (Practical BFT), zum Beispiel in der Exonum- Blockchain

Lassen Sie uns auf den Konsens von PoS eingehen, weil Es ist PoS und seine Varianten, die in privaten Blockchains am häufigsten verwendet werden. Warum privat? Einerseits sind die Eigenschaften von PoS besser als von PoW, weil Um einen Konsens zu erzielen, werden weniger Rechenressourcen benötigt, was bedeutet, dass die Geschwindigkeit beim Schreiben von Daten in die Blockchain zunimmt. Auf der anderen Seite hat PoS mehr Möglichkeiten für Betrug. Um dies zu neutralisieren, müssen alle Teilnehmer an der Blockchain bekannt sein.

Der Konsens von PoS basiert auf der Wahl eines Knotens, der einen Block mit Transaktionen in der Blockchain aufzeichnen kann, abhängig von der Höhe des Geldbetrags auf dem Konto oder vielmehr nicht auf dem Konto, sondern in einem Versprechen, d. H. Je mehr Geld Sie in dem Versprechen haben, desto wahrscheinlicher wird das Netzwerk Ihren Knoten auswählen, um den Block aufzuzeichnen. Die Anzahlung wird nicht zurückerstattet, wenn das Gerät ungültig ist. Somit wird ein Betrugsschutz implementiert. Folgende PoS-Varianten stehen zur Verfügung:

  • Der Consensus Delegated PoS (DPoS) unterteilt die Teilnehmer in „Abstimmung“ und „Validierung“. Münzhalter (stimmberechtigte Teilnehmer) delegieren ihr Recht zur Überprüfung und Aufzeichnung von Transaktionen in der Blockchain an andere Teilnehmer. Somit erledigen die Validatoren die gesamte Computerarbeit und werden dafür belohnt, und die Anwesenheit von stimmberechtigten Teilnehmern garantiert die Ehrlichkeit der Validatoren, weil Sie können jederzeit geändert werden.
  • Mit dem Konsens-LPoS (Leased Proof-of-Stake) können Sie Ihre Gelder an andere Knoten leasen, damit diese die Blöcke besser überprüfen können. T.O. Sie können eine Provision für Transaktionen erhalten, ohne an der Transaktionsüberprüfung selbst teilzunehmen und das Mining zu blockieren.

Es gibt immer noch eine Reihe von Konsens, die noch nicht weit verbreitet sind. Ich werde sie hier nur zur Information auflisten . Eine Übersicht über die Konsensalgorithmen selbst finden Sie beispielsweise im Artikel: Konsensalgorithmen in der Blockchain .

  • PoET (Nachweis der verstrichenen Zeit)
  • PoC (Kapazitätsnachweis)
  • PoB (Proof-of-Burn)
  • PoWeight (Gewichtsnachweis)
  • PoA (Aktivitätsnachweis) - PoW + PoS
  • PoI (Proof-of-Importans)

Zuverlässigkeits- und Blockchain-Bereitstellungsmodelle


Öffentliche Blockchain

Die Stabilität von Public oder einem anderen Namen für Permissionless Blockchain wird durch die Tatsache erreicht, dass jeder eine Verbindung herstellen und Informationen anzeigen oder sogar seinen eigenen Knoten verbinden kann und das Vertrauen auf dem PoW-Konsens beruht.

Private Blockchain

Private oder Private Permissioned Blockchain . In diesen Blockchains hat nur eine bestimmte Gruppe von Teilnehmern (Organisationen oder Personen) Zugriff auf Informationen. Solche Blockchains werden von Organisationen erstellt, um den Gesamtgewinn oder die Effizienz zu steigern. Ihre Zuverlässigkeit wird durch die gemeinsamen Ziele der Teilnehmer und die Konsensalgorithmen von PoS und BFT sichergestellt.

Blockchain-Konsortium

Es gibt ein Konsortium oder eine Blockchain mit öffentlichen Berechtigungen . Dies sind solche Blockchains, mit denen sich jeder verbinden kann, um sie anzuzeigen, aber ein Teilnehmer kann Informationen hinzufügen oder seine Site nur mit Erlaubnis anderer Teilnehmer verbinden. Solche Blockchains werden von Organisationen erstellt, um das Vertrauen von Kunden oder Verbrauchern von Produkten oder der Gesellschaft insgesamt zu stärken. Hier wird Zuverlässigkeit auch durch das Vorhandensein von Vertrauen zwischen den Teilnehmern und denselben PoS- und BFT-Konsensalgorithmen erreicht.

Intelligente Verträge


Die nach Bitcoin implementierten Blockchains haben bis zu dem einen oder anderen Grad die Möglichkeit hinzugefügt, intelligente Verträge auszuführen. Im Wesentlichen ist ein intelligenter Vertrag eine Transaktion, bei der Programmcode zur Ausführung gestellt wird. Intelligente Verträge im Ethereum-Netzwerk werden in EVM (Ethereum Virtual Machine) ausgeführt. Um die Ausführung eines Smart-Vertrags zu starten, muss dieser explizit von einer anderen Transaktion gestartet werden, oder die Voraussetzungen für die Ausführung müssen erfüllt sein. Die Ergebnisse der Implementierung des Smart Contract werden ebenfalls in der Blockchain aufgezeichnet. Das Abrufen von Daten von außerhalb der Blockchain ist möglich, jedoch äußerst begrenzt.

Welche Geschäftslogik kann mit einem intelligenten Vertrag implementiert werden? Tatsächlich gibt es nicht so viele, die beispielsweise Bedingungen anhand von Daten aus der Blockchain überprüfen, die Eigentümer digitaler Assets in Abhängigkeit von diesen Bedingungen ändern und Daten in den permanenten Speicher innerhalb der Blockchain schreiben. Die Logik ist in einer speziellen Hochsprache, Solidity, implementiert.

Ein klassisches Beispiel für Funktionen, die mithilfe intelligenter Verträge implementiert werden, sind Token für ICOs. Zum Beispiel habe ich einen intelligenten Vertrag für die Veröffentlichung eines bescheidenen 500-Millionen-AlexToken implementiert. Der Link in Etherscan ist

Solidity Smart Contract Quellcode
 pragma solidity ^0.4.23; library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. **/ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. **/ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (ie if subtrahend is greater than minuend). **/ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. **/ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". **/ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender account. **/ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. **/ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. **/ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } /** * @title ERC20Basic interface * @dev Basic ERC20 interface **/ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 **/ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. **/ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; /** * @dev total number of tokens in existence **/ function totalSupply() public view returns (uint256) { return totalSupply_; } /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. **/ function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. **/ function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } } contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred **/ function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. **/ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. **/ function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _addedValue The amount of tokens to increase the allowance by. **/ function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _subtractedValue The amount of tokens to decrease the allowance by. **/ function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } /** * @title Configurable * @dev Configurable varriables of the contract **/ contract Configurable { uint256 public constant cap = 1000000000*10**18; uint256 public constant basePrice = 100*10**18; // tokens per 1 ether uint256 public tokensSold = 0; uint256 public constant tokenReserve = 500000000*10**18; uint256 public remainingTokens = 0; } /** * @title CrowdsaleToken * @dev Contract to preform crowd sale with token **/ contract CrowdsaleToken is StandardToken, Configurable, Ownable { /** * @dev enum of current crowd sale state **/ enum Stages { none, icoStart, icoEnd } Stages currentStage; /** * @dev constructor of CrowdsaleToken **/ constructor() public { currentStage = Stages.none; balances[owner] = balances[owner].add(tokenReserve); totalSupply_ = totalSupply_.add(tokenReserve); remainingTokens = cap; emit Transfer(address(this), owner, tokenReserve); } /** * @dev fallback function to send ether to for Crowd sale **/ function () public payable { require(currentStage == Stages.icoStart); require(msg.value > 0); require(remainingTokens > 0); uint256 weiAmount = msg.value; // Calculate tokens to sell uint256 tokens = weiAmount.mul(basePrice).div(1 ether); uint256 returnWei = 0; if(tokensSold.add(tokens) > cap){ uint256 newTokens = cap.sub(tokensSold); uint256 newWei = newTokens.div(basePrice).mul(1 ether); returnWei = weiAmount.sub(newWei); weiAmount = newWei; tokens = newTokens; } tokensSold = tokensSold.add(tokens); // Increment raised amount remainingTokens = cap.sub(tokensSold); if(returnWei > 0){ msg.sender.transfer(returnWei); emit Transfer(address(this), msg.sender, returnWei); } balances[msg.sender] = balances[msg.sender].add(tokens); emit Transfer(address(this), msg.sender, tokens); totalSupply_ = totalSupply_.add(tokens); owner.transfer(weiAmount);// Send money to owner } /** * @dev startIco starts the public ICO **/ function startIco() public onlyOwner { require(currentStage != Stages.icoEnd); currentStage = Stages.icoStart; } /** * @dev endIco closes down the ICO **/ function endIco() internal { currentStage = Stages.icoEnd; // Transfer any remaining tokens if(remainingTokens > 0) balances[owner] = balances[owner].add(remainingTokens); // transfer any remaining ETH balance in the contract to the owner owner.transfer(address(this).balance); } /** * @dev finalizeIco closes down the ICO and sets needed varriables **/ function finalizeIco() public onlyOwner { require(currentStage != Stages.icoEnd); endIco(); } } /** * @title LavevelToken * @dev Contract to create the Lavevel Token **/ contract AlexToken is CrowdsaleToken { string public constant name = "AlexToken"; string public constant symbol = "ALT"; uint32 public constant decimals = 18; } 

und binäre Darstellung, wie das Netzwerk es sieht
60806040526000600355600060045533600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560146101000a81548160ff021916908360028111156200006f57fe5b0217905550620001036b019d971e4fe8401e74000000600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200024a6401000000000262000b1d179091906401000000009004565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620001986b019d971e4fe8401e740000006001546200024a6401000000000262000b1d179091906401000000009004565b6001819055506b033b2e3c9fd0803ce8000000600481905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6b019d971e4fe8401e740000006040518082815260200191505060405180910390a362000267565b600081830190508281101515156200025e57fe5b80905092915050565b611cb880620002776000396000f300608060405260043610610112576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146104c7578063095ea7b31461055757806318160ddd146105bc57806323b872dd146105e7578063313ce5671461066c578063355274ea146106a3578063518ab2a8146106ce57806366188463146106f957806370a082311461075e57806389311e6f146107b55780638da5cb5b146107cc578063903a3ef61461082357806395d89b411461083a578063a9059cbb146108ca578063bf5839031461092f578063c7876ea41461095a578063cbcb317114610985578063d73dd623146109b0578063dd62ed3e14610a15578063f2fde38b14610a8c575b60008060008060006001600281111561012757fe5b600560149054906101000a900460ff16600281111561014257fe5b14151561014e57600080fd5b60003411151561015d57600080fd5b600060045411151561016e57600080fd5b3494506101a7670de0b6b3a764000061019968056bc75e2d6310000088610acf90919063ffffffff16565b610b0790919063ffffffff16565b9350600092506b033b2e3c9fd0803ce80000006101cf85600354610b1d90919063ffffffff16565b111561024c576101f66003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b915061022e670de0b6b3a764000061022068056bc75e2d6310000085610b0790919063ffffffff16565b610acf90919063ffffffff16565b90506102438186610b3990919063ffffffff16565b92508094508193505b61026184600354610b1d90919063ffffffff16565b6003819055506102886003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b6004819055506000831115610344573373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156102dd573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35b610395846000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a361045184600154610b1d90919063ffffffff16565b600181905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f193505050501580156104bf573d6000803e3d6000fd5b505050505050005b3480156104d357600080fd5b506104dc610b52565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561051c578082015181840152602081019050610501565b50505050905090810190601f1680156105495780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561056357600080fd5b506105a2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b8b565b604051808215151515815260200191505060405180910390f35b3480156105c857600080fd5b506105d1610c7d565b6040518082815260200191505060405180910390f35b3480156105f357600080fd5b50610652600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c87565b604051808215151515815260200191505060405180910390f35b34801561067857600080fd5b50610681611041565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b3480156106af57600080fd5b506106b8611046565b6040518082815260200191505060405180910390f35b3480156106da57600080fd5b506106e3611056565b6040518082815260200191505060405180910390f35b34801561070557600080fd5b50610744600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061105c565b604051808215151515815260200191505060405180910390f35b34801561076a57600080fd5b5061079f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112ed565b6040518082815260200191505060405180910390f35b3480156107c157600080fd5b506107ca611335565b005b3480156107d857600080fd5b506107e16113eb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561082f57600080fd5b50610838611411565b005b34801561084657600080fd5b5061084f6114ab565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561088f578082015181840152602081019050610874565b50505050905090810190601f1680156108bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108d657600080fd5b50610915600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114e4565b604051808215151515815260200191505060405180910390f35b34801561093b57600080fd5b50610944611703565b6040518082815260200191505060405180910390f35b34801561096657600080fd5b5061096f611709565b6040518082815260200191505060405180910390f35b34801561099157600080fd5b5061099a611716565b6040518082815260200191505060405180910390f35b3480156109bc57600080fd5b506109fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611726565b604051808215151515815260200191505060405180910390f35b348015610a2157600080fd5b50610a76600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611922565b6040518082815260200191505060405180910390f35b348015610a9857600080fd5b50610acd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119a9565b005b600080831415610ae25760009050610b01565b8183029050818382811515610af357fe5b04141515610afd57fe5b8090505b92915050565b60008183811515610b1457fe5b04905092915050565b60008183019050828110151515610b3057fe5b80905092915050565b6000828211151515610b4757fe5b818303905092915050565b6040805190810160405280600981526020017f416c6578546f6b656e000000000000000000000000000000000000000000000081525081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600154905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610cc457600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d1157600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d9c57600080fd5b610ded826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e80826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f5182600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b601281565b6b033b2e3c9fd0803ce800000081565b60035481565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508083111561116d576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611201565b6111808382610b3990919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561139157600080fd5b60028081111561139d57fe5b600560149054906101000a900460ff1660028111156113b857fe5b141515156113c557600080fd5b6001600560146101000a81548160ff021916908360028111156113e457fe5b0217905550565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561146d57600080fd5b60028081111561147957fe5b600560149054906101000a900460ff16600281111561149457fe5b141515156114a157600080fd5b6114a9611b01565b565b6040805190810160405280600381526020017f414c54000000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561152157600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561156e57600080fd5b6115bf826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611652826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b60045481565b68056bc75e2d6310000081565b6b019d971e4fe8401e7400000081565b60006117b782600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a0557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611a4157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6002600560146101000a81548160ff02191690836002811115611b2057fe5b021790555060006004541115611c0a57611ba5600454600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015611c89573d6000803e3d6000fd5b505600a165627a7a723058205bbef016cc7699572f944871cb6f05e69915ada3a92a1d9f03a3fb434aac0c2b0029


Weitere Details über die Smart - Verträge finden Sie im Artikel: Was intelligente Verträge Astraleum ist .

Fazit


Wir haben die Technologien aufgelistet, auf denen moderne Blockchains aufgebaut sind und wie sie miteinander zusammenhängen. Formulieren wir nun, welche Aufgaben mit der Blockchain gelöst werden können und welche Lösungen im besten Fall ineffizient sind. Die Verwendung einer Blockchain ist daher nicht erforderlich, wenn:

  • Transaktionen werden in einer vertrauenswürdigen Umgebung ausgeführt.
  • Die Anwesenheit einer Kommission von Vermittlern verschlechtert das Leben der Teilnehmer nicht.
  • Die Teilnehmer haben kein Eigentum, das als digitales Gut dargestellt werden kann.
  • Es gibt keine Verteilung in digitalen Assets, d. H. Nur ein Mitglied besitzt oder liefert den Wert.

Was ist die Zukunft der Blockchain? Jetzt können wir nur noch über mögliche Wege zur Entwicklung von Blockchain-Technologien spekulieren:

  • Blockchain wird dieselbe konventionelle Datenbanktechnologie wie beispielsweise SQL oder NoSQL zur Lösung seiner spezifischen Aufgabenbereiche.
  • Blockchain wird zu einem weit verbreiteten Protokoll wie HTTP für das Internet.
  • Blockchain wird die Basis für das neue finanzielle und politische System des Planeten!

Im nächsten Teil werden wir sehen, welche Blockchains derzeit existieren und warum sie in verschiedenen Branchen verwendet werden.

Es ist nur der Anfang!

Alle drei Artikel:


Was sollen wir eine Blockchain bauen?
Blockchain: Was sollen wir einen Fall bauen?
Blockchain: Was sollen wir PoC bauen?

Source: https://habr.com/ru/post/de443282/


All Articles