Die gesamte Geschichte der Menschheit ist ein kontinuierliches Befreien von Ketten und das Schaffen neuer, noch stärkeren Ketten. (Anonymer Autor)
Wenn ich die zahlreichen Blockchain-Projekte (Bitshares, Hyperledger, Exonum, Ethereum, Bitcoin usw.) analysiere, erkenne ich, dass sie aus technischer Sicht alle nach denselben Prinzipien aufgebaut sind. Blockchains erinnern an Häuser, die, trotz aller Vielfalt in Konstruktionen, Dekorationen und Verwendungen, Fundament, Wände, Dach, Fenster, Türen haben, die auf bestimmte Weise miteinander verbunden sind. Wenn man die grundlegenden Prinzipien des Entwurfs von Gebäuden versteht und die Eigenschaften der verwendeten Materialien kennt, kann man den Verwendungszweck eines bestimmten Hauses bestimmen. Momentan gibt es im Zusammenhang mit Blockchain das Phänomen, dass zwar jeder davon gehört hat, aber nur wenige die Architektur und Funktionsweisen verstehen. Daher führt dies zu Unverständnis darüber, warum und wie es sinnvoll ist, Blockchain-Technologien zu nutzen.
In diesem Artikel werden wir die gemeinsamen Eigenschaften und Prinzipien aller Blockchains untersuchen. Danach schauen wir uns die Aufgaben an, die mit Hilfe von Blockchain gelöst werden können, und um das Material zu festigen, werden wir eine kleine, aber echte Blockchain auf unserem virtuellen Grundstück aufbauen!
Lassen Sie uns also daran denken, welche Probleme die Blockchain ursprünglich gelöst hat.
Ich bin mir sicher, dass viele von einer verteilten, dezentralen, öffentlichen und unveränderlichen Datenbank sprechen werden. Aber wozu war das alles nötig?
Ich bevorzuge es, das Studium jeder Technologie mit dem Lesen von Standards zu beginnen, da genau auf ihnen alle Artikel und Bücher zum jeweiligen Thema basieren. Aber im Moment gibt es keine Blockchain-Standards, im ISO wurden nur zu ihrer Entwicklung gegründet. Derzeit hat jedes öffentliche Blockchain-Projekt sein eigenes Whitepaper, das im Grunde eine technische Spezifikation ist. Das erste allgemein bekannte Blockchain-Projekt ist das Bitcoin-Netzwerk. Lassen Sie uns die offizielle Website des Netzwerks besuchen und wo alles begonnen hat.
Die Aufgabe der Blockchain
Die Aufgabe, die die Blockchain im Pioniernetz Bitcoin gelöst hat, besteht darin, einen vertrauensvollen Eigentumsübergang von digitalen Vermögenswerten in einer untrusted Umgebung ohne Vermittler zu ermöglichen. Zum Beispiel sind im Bitcoin-Netzwerk digitale Vermögenswerte digitale Münzen, die Bitcoin repräsentieren. Alle technischen Lösungen von Bitcoin und anderen Blockchains konzentrieren sich darauf, dieses Problem zu lösen.
Probleme, die die Blockchain löst
Angenommen, eine Finanzorganisation sagt, dass sie ein Netzwerk auf der ganzen Welt aufgebaut hat, mit dem man Geld an jede Person überweisen kann. Würden Sie ihr glauben? Wenn diese Organisation Visa oder MasterCard ist, würden Sie wahrscheinlich glauben, aber wenn es, sagen wir mal, AnonymousWorldMoney ist, wahrscheinlich nicht. Warum? Weil wir genau wissen, wie verteilte Systeme von privaten Unternehmen erstellt werden, mit welchen Zielen und wohin das führen kann. Lassen Sie uns die Probleme solcher Systeme näher betrachten und wie sie durch den Einsatz von Blockchain-Technologien gelöst werden können.
Nehmen wir an, bei der hypothetischen AnonymousWorldMoney gibt es Server mit Datenbanken, und es wäre gut, wenn es mehrere in verschiedenen Rechenzentren gäbe. Wenn der Sender Geld überweist, wird eine Transaktion registriert, die auf allen Servern repliziert wird, und das Geld gelangt zum Empfänger.

In einer idealen Welt funktioniert dieses Schema einwandfrei, in unserer jedoch gibt es folgende Probleme:
- Das Problem der Identifizierung der Teilnehmer auf der einen Seite und die Notwendigkeit der Anonymität der Transaktionen auf der anderen. Das heißt, man muss Geld an einen bestimmten Empfänger überweisen, und zwar so, dass niemand von dieser Transaktion weiß, außer den beteiligten Parteien. Banken haben Kontonummern und Kreditkartennummern, die an eine bestimmte natürliche oder juristische Person gebunden sind, und das Bankgeheimnis schützt Informationen über Transaktionen. Wer garantiert, dass die hypothetische AnonymousWorldMoney keine personenbezogenen Daten und Informationen über Transaktionen für eigene Zwecke verwendet?
- Wie kann man sicherstellen, dass der Empfänger genau den Betrag erhalten hat, der ihm überwiesen wurde? Angenommen, der Sender hat $100 überwiesen, und der Empfänger hat nur $10 erhalten. Der Sender kommt mit seinem Beleg ins Büro von AnonymousWorldMoney, und der Angestellte zeigt seine Version, in der vermerkt ist, dass der Sender nur $10 überwiesen hat.
- Das Problem eines vertrauenslosen Umfelds, zum Beispiel Betrug, der als Double-Spending bekannt ist. Ein unehrlicher Teilnehmer kann sein Guthaben mehrmals ausgeben, solange die Zahlung nicht auf allen Servern repliziert wurde. , natürlich, bleibt unberührt, und Konsistenz wird letztendlich erreicht, aber jemand wird kein Geld für die erbrachten Dienstleistungen oder Waren erhalten. Daher, wenn kein volles Vertrauen in die Zahlungsorganisation oder die Teilnehmer von Geschäften besteht, muss ein Netzwerk aufgebaut werden, das nicht auf Vertrauen, sondern auf Kryptographie basiert.
- Die bedingte AnonymousWorldMoney verfügt über eine endliche Anzahl an Servern, die unbeabsichtigt oder böswillig nicht verfügbar werden können.
- AnonymousWorldMoney wird seine merkliche Gebühr erheben.
- Möglichkeit der Verwaltung. Bei der Nutzung von Bitcoin wurde festgestellt, dass Menschen nicht nur Münzen untereinander überweisen, sondern auch die verschiedenen Bedingungen für den Verlauf von Transaktionen überprüfen, Arbeitsabläufe programmieren, automatisch Aktionen je nach Bedingungen ausführen und mehr möchten.
Wie die Blockchain diese Probleme löst
- Die Identifizierung der Teilnehmer erfolgt durch ein Paar Schlüssel: einen privaten und einen öffentlichen, wobei der Algorithmus der digitalen Signatur den Sender und Empfänger eindeutig identifiziert und ihre Identität anonym bleibt.
- Transaktionen werden in Blöcken gesammelt, der Hash des Blocks wird berechnet und im nächsten Block aufgezeichnet. Diese Reihenfolge der Aufzeichnung von Hashes in Blöcken hat der Technologie Blockchain ihren Namen gegeben und macht es unmöglich, Blöcke oder einzelne Transaktionen aus Blöcken unbemerkt zu verändern oder zu löschen. Somit kann man, wenn eine Transaktion in die Blockchain gelangt, sicher sein, dass ihre Daten unverändert bleiben.
- Betrug durch Double Spending wird durch Erreichung eines Konsenses im Netzwerk verhindert, welche Daten als korrekt betrachtet und welche verworfen werden. Im Bitcoin-Netzwerk wird der Konsens durch Proof-of-Work (PoW) erreicht.
- Die Zuverlässigkeit der Funktionsweise des Netzwerks wird dadurch gewährleistet, dass die Blockchain öffentlich ist, wobei jeder Teilnehmer seine Node starten, eine vollständige Kopie der Blockchain erhalten und mehr noch, selbst Transaktionen auf ihre Richtigkeit überprüfen kann. Es ist erwähnenswert, dass moderne Blockchains nicht nur öffentliche (offene), sondern auch private (geschlossene) Blockchains ermöglichen und kombinierte Ansätze verwendet werden können.
- Die vollständige Beseitigung von Gebühren in der Blockchain ist nicht möglich, da man den Menschen, die das Netzwerk unterstützen, bezahlen muss, aber in der Blockchain wird die Notwendigkeit von Gebühren so überzeugend bewiesen, dass es keine Zweifel an ihrer Notwendigkeit gibt.
- Moderne Blockchains haben die Möglichkeit, Geschäftslogik zu implementieren, die in der Blockchain als Smart Contracts bezeichnet wird. Die Logik der Smart Contracts wird in verschiedenen Hochsprachen umgesetzt.
Lassen Sie uns diese Lösungen näher betrachten.
Architektur der Blockchain
Bestandteile der Blockchain
Jeder Teilnehmer kann seinen eigenen Knoten mit einer vollständigen Kopie der Blockchain (Full Node) starten. Vollständige Knoten, die Transaktionen in die Blockchain schreiben können, werden genannt Konsensknoten (Witness) oder Miner (Miner). Vollständige Knoten, die nur die Richtigkeit von Transaktionen überprüfen, werden genannt Auditknoten (Audit). Leichte Clients (Light Clients) speichern keine vollständigen Kopien der Blockchain, sondern interagieren mit dem Netzwerk über vollständige Knoten.
Die meisten Benutzer verwenden für Transaktionen tatsächlich leichte Clients oder Web-Wallets. Alle Knoten sind miteinander verbunden. Mit dieser Reihe von Elementen wird die Architektur des Netzwerks stabiler:

Lebenszyklus einer Transaktion
Schauen wir uns den Lebenszyklus einer Transaktion an und zerlegen ihn in seine Teile:

Blockchain-Technologien
Lassen Sie uns genauer auf die technischen Lösungen und deren Verbindungen zueinander eingehen.
Identifikation
Jede Blockchain-Transaktion muss mit einer digitalen Signatur signiert werden. Daher muss jeder Teilnehmer für die Durchführung einer Transaktion über ein Schlüsselpaar verfügen: privat / öffentlich. Manchmal wird das Schlüsselpaar als Wallet bezeichnet, da die Schlüssel eindeutig mit einer einzigartigen digitalen Adresse und dem Kontostand des Teilnehmers verbunden sind. In Wirklichkeit sind Schlüssel und Adressen einfach Zahlenfolgen in verschiedenen Zahlensystemen. Beispiele für Schlüssel und Wallet-Adressen:
Privater Schlüssel: 0a78194a8a893b8baac7c09b6a4a4b4b161b2f80a126cbb79bde231a4567420f
Öffentlicher Schlüssel: 0579b478952214d7cddac32ac9dc522c821a4489bc10aac3a81b9d1cd7a92e57ba
Adresse: 0x3814JnJpGnt5tB2GD1qfKP709W3KbRdfb27VZur Erstellung einer digitalen Signatur in Blockchains wird ein Algorithmus verwendet, der auf elliptischen Kurven basiert: Elliptic Curve Digital Signature Algorithm (ECDSA). Für dessen Funktion wird der private Schlüssel (ein 256-Bit-Zahl) normalerweise zufällig ausgewählt. Die Anzahl der möglichen Schlüssel beträgt 2 hoch 256, daher kann man von einer praktischen Unmöglichkeit sprechen, dass private Schlüssel übereinstimmen.
Anschließend wird der öffentliche Schlüssel aus dem privaten durch Multiplikation seines Wertes mit den Koordinaten eines Punktes, der sich auf der elliptischen Kurve befindet, abgeleitet, wodurch die Koordinaten eines neuen Punktes auf der gleichen Kurve entstehen. Diese Aktion garantiert die Erhaltung eines Schlüsselpaares, das für digitale Signaturen von Transaktionen geeignet ist. Und schließlich wird die Wallet-Adresse eindeutig aus dem öffentlichen Schlüssel berechnet.
Es gibt viele Artikel mit Details zur Kryptografie, die in Blockchain verwendet wird, beispielsweise:
Der private Schlüssel muss streng 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 (Coins) nicht wiederhergestellt werden, und das Geld wird für immer verloren sein. Daher ist die Aufgabe, private Schlüssel sicher zu speichern, äußerst relevant, da es sich nicht um eine Bank handelt, bei der man immer mit einem Ausweis erscheinen und das Konto wiederherstellen kann. Es gibt eine ganze Industrie, die sogenannte kalte Kryptowallets produziert, die wie USB-Sticks aussehen:

oder man kann sicherere Methoden verwenden, wie zum Beispiel den privaten Schlüssel auf Tokens zu stanzen:

Transaktionen
Weitere Informationen zur Struktur einer Transaktion finden Sie im Artikel . Uns ist wichtig zu verstehen, dass jede Transaktion mindestens die folgenden Daten enthält:
Von: 0x48C89c341C5960Ca2Bf3732D6D8a0F4f89Cc4368 - digitale Adresse des Senders
An: 0x367adb7894334678b90аfe7882a5b06f7fbc783a - digitale Adresse des Empfängers
Wert: 0.0001 - Betrag der Transaktion
Transaktions-Hash: 0x617ede331e8a99f46a363b32b239542bb4006e4fa9a2727a6636ffe3eb095cef - Hash der TransaktionIm Anschluss wird die Transaktion mit dem privaten Schlüssel signiert und an alle Knoten im Blockchain-Netzwerk versendet (siehe Details zum Protokoll ) die die Transaktionen auf Gültigkeit überprüfen. Der Algorithmus zur Überprüfung der Transaktion ist nicht trivial und umfasst .
Transaktionsblöcke
Nachdem die Gültigkeit der Transaktionen überprüft wurde, bilden die Knoten daraus Blöcke. Neben den Transaktionen wird im Block der Hash des vorherigen Blocks, eine Zahl (Nonce-Zähler) aufgezeichnet, und der Hash des aktuellen Blocks wird gemäß dem SHA-256-Algorithmus berechnet. Der Hash muss bestimmten Schwierigkeitskriterien genügen. Zum Beispiel ändert sich in der Bitcoin-Netzwerk die Schwierigkeit des Hashs alle 2 Wochen automatisch, abhängig von der Netzwerkleistung, sodass ein Block ungefähr alle 10 Minuten generiert wird. Die Schwierigkeit wird durch die Bedingung bestimmt, dass der gefundene Hash kleiner als eine vorher festgelegte Zahl sein muss. Wenn diese Bedingung nicht erfüllt ist, wird 1 zur Nonce addiert und die Berechnung des Hashs wiederholt. Für die Suche nach dem Hash wird das Feld Nonce verwendet, da dies die einzigen Daten im Block sind, die geändert werden können; alle anderen müssen unverändert bleiben. Der gültige Hash muss eine bestimmte Anzahl von Nullen am Anfang aufweisen, beispielsweise ist einer der realen Hashes:
000000000000000000000bf03212e7dd1176f52f816fa395fc9b93c44bc11f91Das erfolgreiche Finden eines Hashes ist der Beweis für die geleistete Arbeit (Proof-of-Work, PoW) in Netzwerken wie Bitcoin oder Ethereum. Der Prozess des Hash-Findens wird Mining genannt, ähnlich wie das Goldschürfen. Der Name beschreibt den Prozess ziemlich gut, da es sich um einfaches Ausprobieren von Möglichkeiten handelt. Wenn jemand einen passenden Hash findet, ist das tatsächlich ein Glücksfall. Es ist, als würde man einen echten Goldnugget in Tonnen von Erdaushub finden. Die Belohnung für einen Block beträgt derzeit 12,5 BTC, und multipliziert man das mit dem aktuellen Bitcoin-Kurs von 3900 $, ergibt das mehr als ein Kilogramm reines Gold. Es gibt also viel zu kämpfen!
Nach dem erfolgreichen Finden des Hashes werden der Block und der gefundene Hash im folgenden Block der Blockchain aufgezeichnet. Weitere Informationen zur Struktur der Blöcke können im Artikel , und unten werde ich ein vereinfachtes Schema angeben:

Die Blockchain beginnt mit einem Block, der noch keinen Hash des vorherigen Blocks hat. Ein solcher Block ist in der Blockchain einzigartig und wird Genesis-Block genannt. Die anderen Blöcke haben dieselbe Struktur und unterscheiden sich nur in der Anzahl der Transaktionen. Aktuelle Transaktionen und in Echtzeit erzeugte Blöcke in Bitcoin oder Ethereum können in .
anzeigen. Die Größe der Blöcke in Bitcoin ist auf 1 MB begrenzt, und bei einem minimalen Transaktionsvolumen von etwa 200 Byte können in einem Block maximal rund 6000 Transaktionen untergebracht werden. Daher kommt auch die Performance von Bitcoin, über die alle lachen: Ein Block wird ungefähr alle 10 Minuten * 60 Sekunden = 600 Sekunden erzeugt, was eine formale Leistung von etwa 10 TPS ergibt. In Wirklichkeit ist dies jedoch keine Performance, sondern ein absichtlich umgesetzter Arbeitsalgorithmus. Bei Ethereum wurde zur Konkurrenz einfach die Blockgenerierungszeit auf 15 Sekunden gesetzt, was die Leistung förmlich ansteigen ließ. Daher ist es in Blockchains, die PoW als Konsens verwenden, völlig sinnlos, die Leistung zu vergleichen, da sie direkt von der Schwierigkeit der Berechnung des Hashes abhängt, die beliebig gesetzt werden kann.
Forks
Und was passiert, wenn zum Beispiel mehrere Knoten Hashes finden, die die Schwierigkeitsbedingungen erfüllen, aber unterschiedliche Werte haben (mit anderen Worten, sie zu unterschiedlichen Konsensergebnissen gelangen) und Blöcke in die Blockchain schreiben? Lassen Sie uns sehen, wie die Blockchain sich vor dieser Situation schützt. In diesem Fall spricht man von einem Fork und die Blockchain hat zwei Versionen der Kette:

Was passiert dann? Dann beginnt ein Teil des Netzwerks mit dem Block N+2 einer Kette zu arbeiten, während der andere Teil an der anderen arbeitet:

Einer dieser Blöcke wird früher gefunden und in die Blockchain gesendet und dann muss die Blockchain gemäß den Regeln auf die längere Kette umschalten und alle Transaktionen aus dem alternativen Block zurücksetzen:

In diesem Fall kann es zu einer Situation kommen, in der die Transaktion eines Teilnehmers nur in einem der Blöcke des Forks war, der zurückgesetzt wurde. Daher gibt es eine allgemeine Empfehlung, um sicherzustellen, dass die erforderliche Transaktion in die Blockchain eingetragen wurde: Man sollte warten, bis die nächsten Blöcke zur Blockchain hinzugefügt wurden, bevor man der Transaktion vertraut. Die Empfehlungen, wie viele Blöcke man für verschiedene Blockchains warten sollte, sind unterschiedlich. Zum Beispiel sind es für das Bitcoin-Netzwerk mindestens 2 Blöcke, maximal 6.
Das gleiche Bild eines Blockforks wird auch bei dem sogenannten 51%-Angriff zu beobachten sein – dabei versucht eine Gruppe von Minern, eine alternative Blockkette zu erzeugen, um die Kette mit ihren betrügerischen Transaktionen zurückzusetzen. Obwohl es derzeit profitabler ist, seine Ressourcen für ehrliches Mining zu nutzen, anstatt zu betrügen.
Konsens
Um einen Block in die Blockchain zu schreiben, muss das Netzwerk einen Konsens erreichen. Lassen Sie uns die Aufgabe des Konsens in Computerkommunikationsnetzwerken in Erinnerung rufen. Das Problem wird als das Problem der byzantinischen Generäle BFT formuliert (). Abgesehen von der farbenfrohen Beschreibung der Probleme der byzantinischen Armee kann die Aufgabe so formuliert werden: Wie können die Knoten im Netzwerk zu einem gemeinsamen Ergebnis gelangen, wenn ein Teil der Knoten im Netzwerk absichtlich ihre Daten verzerrt? Die bestehenden Algorithmen zur Lösung des BFT-Problems zeigen, dass das Netzwerk korrekt funktionieren kann, solange die Betrüger weniger als ein Drittel ausmachen. Warum wurde im Bitcoin-Netzwerk kein BFT-Konsens angewendet? Warum musste PoW verwendet werden? Es gibt mehrere Gründe:
- BFT funktioniert gut mit einer kleinen festen Anzahl von Knoten, während in einer öffentlichen Blockchain die Anzahl der Knoten unvorhersehbar ist und darüber hinaus Knoten willkürlich ein- und ausgeschaltet werden können.
- Es ist notwendig, die Menschen zu motivieren, Blockchain-Knoten zu starten. Zu diesem Zweck sollten die Menschen eine Belohnung erhalten. Im BFT gibt es formal keinen Grund für eine Belohnung, während die Belohnung im PoW auf intuitiver Ebene für alle verständlich ist: für den Stromverbrauch des Prozessors beim Finden des Hashes des Blocks.
Neben PoW gibt es noch mehrere Konsensmechanismen, die in modernen Blockchains verwendet werden, zum Beispiel:
- PoS (Proof-of-Stake) – in der Blockchain
- DPoS (Delegated Proof-of-Stake) – in der Blockchain
- Modifikationen von BFT: SBFT (Simplified BFT) und PBFT (Practical BFT), zum Beispiel in der Blockchain
Lassen Sie uns kurz über den Konsens PoS sprechen, da gerade PoS und seine Varianten die größte Verbreitung in privaten Blockchains gefunden haben. Warum ausgerechnet in privaten? Einerseits sind die Eigenschaften von PoS im Vergleich zu PoW besser, da für die Erreichung des Konsenses weniger Rechenressourcen benötigt werden, was bedeutet, dass die Geschwindigkeit der Datenaufzeichnung in der Blockchain steigt. Andererseits bietet PoS mehr Möglichkeiten für Betrug, weshalb zur Neutralisierung dies alle Teilnehmer der Blockchain bekannt sein müssen.
Der Konsens PoS basiert auf der Auswahl eines Knotens, der einen Block mit Transaktionen in die Blockchain aufzeichnen kann, abhängig von der Menge der Mittel auf dem Konto, genauer gesagt, nicht auf dem Konto, sondern in der Sicherheit. Das heißt, je mehr Mittel du in Sicherheit hast, desto wahrscheinlicher wird dein Knoten von dem Netzwerk für das Aufzeichnen des Blocks ausgewählt. Die Sicherheit wird nicht zurückgegeben, wenn der Block ungültig ist. So wird ein Betrugschutz realisiert. Es gibt folgende Varianten von PoS:
- Der Konsens Delegated PoS (DPoS) unterteilt die Teilnehmer in „abstimmende“ und „validierende“. Die Inhaber von Coins (abstimmende Teilnehmer) delegieren ihr Recht, Transaktionen zu prüfen und in die Blockchain aufzuzeichnen, an andere Teilnehmer. So führen die Validatoren die gesamte Rechenarbeit aus und erhalten dafür eine Belohnung, während die Anwesenheit von abstimmenden Teilnehmern die Ehrlichkeit der Validatoren garantiert, da sie jederzeit gewechselt werden können.
- Der LPoS-Konsens (Leased Proof-of-Stake) ermöglicht es, Mittel an andere Knoten zu verleihen, damit diese bessere Chancen haben, Blöcke zu validieren. So kann man eine Gebühr für Transaktionen erhalten, ohne selbst an der Validierung der Transaktionen und dem Mining von Blöcken teilzunehmen.
Es gibt noch eine Reihe anderer Konsensen, die bislang nicht weit verbreitet sind; hier werde ich sie einfach zur Information aufzählen, und einen Überblick über die Konsensalgorithmen kann man zum Beispiel im Artikel sehen: .
- PoET (Proof-of-Elapsed Time)
- PoC (Proof-of-Capacity)
- PoB (Proof-of-Burn)
- PoWeight (Proof-of-Weight)
- PoA (Proof-of-Activity) – PoW + PoS
- PoI (Proof-of-Importance)
Zuverlässigkeit und Modelle für die Bereitstellung von Blockchains
Öffentliche Blockchain
Beständigkeit Öffentlich oder eine andere Bezeichnung Erlaubnisonline-Blockchain wird erreicht, indem jeder sich verbinden und Informationen einsehen oder sogar seinen eigenen Knoten anschließen kann; das Vertrauen basiert auf dem PoW-Konsens.
Private Blockchain
Privat oder Private Permissioned Blockchain. In diesen Blockchains hat nur eine bestimmte Gruppe von Teilnehmern (Organisationen oder Personen) Zugang zu den Informationen. Solche Blockchains werden von Organisationen erstellt, um den gemeinsamen Nutzen oder die Effizienz zu erhöhen. Ihre Zuverlässigkeit wird durch die gemeinsamen Ziele der Teilnehmer und die Konsensalgorithmen PoS und BFT gewährleistet.
Blockchain-Konsortium
Es gibt Konsortium oder Öffentliche Permissioned Blockchain. Dies sind Blockchains, zu denen sich jeder verbinden kann, um Informationen einzusehen; aber das Hinzufügen von Informationen oder das Verbinden eines eigenen Knotens ist nur mit Genehmigung anderer Teilnehmer möglich. Solche Blockchains werden von Organisationen erstellt, um das Vertrauen von Kunden oder Verbrauchern von Produkten oder der Gesellschaft insgesamt zu erhöhen. Hier wird die Zuverlässigkeit ebenfalls durch das Vertrauen zwischen den Teilnehmern und denselben Konsensalgorithmen PoS und BFT erreicht.
Smart Contracts
In Blockchains, die nach Bitcoin umgesetzt wurden, wurde in gewissem Maße die Möglichkeit der Ausführung von Smart Contracts hinzugefügt. Im Wesentlichen ist ein Smart Contract eine Transaktion, die Programmierscode zur Ausführung enthält. Smart Contracts im Ethereum-Netzwerk werden in der EVM (Ethereum Virtual Machine) ausgeführt. Um einen Smart Contract auszuführen, muss er explizit durch eine andere Transaktion gestartet werden, oder es müssen Voraussetzungen für die Ausführung erfüllt werden. Die Ergebnisse der Ausführung des Smart Contracts werden ebenfalls in der Blockchain gespeichert. Der Zugang zu Daten von außerhalb der Blockchain ist möglich, jedoch stark limitiert.
Welche Geschäftslogik kann mit einem Smart Contract umgesetzt werden? Tatsächlich nicht allzu viel, zum Beispiel die Überprüfung von Bedingungen anhand von Daten aus der Blockchain, die Änderung von Eigentümern digitaler Vermögenswerte abhängig von diesen Bedingungen und die Speicherung von Daten in einem permanenten Speicher innerhalb der Blockchain. Die Logik wird in einer speziellen Hochsprache, Solidity, implementiert.
Ein klassisches Beispiel für die Funktionalität, die mit Smart Contracts realisiert wird, ist die Ausgabe von Token zur Durchführung von ICOs. Zum Beispiel habe ich einen Smart Contract zur Ausgabe von bescheidenen 500.000.000 AlexToken umgesetzt. Durch in einem Zustand, der bereits die Haupttests durch spezielle Qualitätssicherungsteams durchlaufen hat. Bevor das Produkt der breiten Öffentlichkeit zur Verfügung gestellt wird, erfolgt eine zusätzliche abschließende Überprüfung durch Mitarbeiter, die nicht an der Entwicklung beteiligt sind.
der Quellcode des Smart Contracts in der Sprache Solidity
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 (i.e. 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 die binäre Darstellung, wie sie vom Netzwerk gesehen wird
60806040526000600355600060045533600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560146101000a81548160ff021916908360028111156200006f57fe5b0217905550620001036b019d971e4fe8401e74000000600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200024a6401000000000262000b1d179091906401000000009004565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620001986b019d971e4fe8401e740000006001546200024a6401000000000262000b1d179091906401000000009004565b6001819055506b033b2e3c9fd0803ce8000000600481905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6b019d971e4fe8401e740000006040518082815260200191505060405180910390a362000267565b600081830190508281101515156200025e57fe5b80905092915050565b611cb880620002776000396000f300608060405260043610610112576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146104c7578063095ea7b31461055757806318160ddd146105bc57806323b872dd146105e7578063313ce5671461066c578063355274ea146106a3578063518ab2a8146106ce57806366188463146106f957806370a082311461075e57806389311e6f146107b55780638da5cb5b146107cc578063903a3ef61461082357806395d89b411461083a578063a9059cbb146108ca578063bf5839031461092f578063c7876ea41461095a578063cbcb317114610985578063d73dd623146109b0578063dd62ed3e14610a15578063f2fde38b14610a8c575b60008060008060006001600281111561012757fe5b600560149054906101000a900460ff16600281111561014257fe5b14151561014e57600080fd5b60003411151561015d57600080fd5b600060045411151561016e57600080fd5b3494506101a7670de0b6b3a764000061019968056bc75e2d6310000088610acf90919063ffffffff16565b610b0790919063ffffffff16565b9350600092506b033b2e3c9fd0803ce80000006101cf85600354610b1d90919063ffffffff16565b111561024c576101f66003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b915061022e670de0b6b3a764000061022068056bc75e2d6310000085610b0790919063ffffffff16565b610acf90919063ffffffff16565b90506102438186610b3990919063ffffffff16565b92508094508193505b61026184600354610b1d90919063ffffffff16565b6003819055506102886003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b6004819055506000831115610344573373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156102dd573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35b610395846000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a361045184600154610b1d90919063ffffffff16565b600181905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f193505050501580156104bf573d6000803e3d6000fd5b505050505050005b3480156104d357600080fd5b506104dc610b52565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561051c578082015181840152602081019050610501565b50505050905090810190601f1680156105495780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561056357600080fd5b506105a2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b8b565b604051808215151515815260200191505060405180910390f35b3480156105c857600080fd5b506105d1610c7d565b6040518082815260200191505060405180910390f35b3480156105f357600080fd5b50610652600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c87565b604051808215151515815260200191505060405180910390f35b34801561067857600080fd5b50610681611041565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b3480156106af57600080fd5b506106b8611046565b6040518082815260200191505060405180910390f35b3480156106da57600080fd5b506106e3611056565b6040518082815260200191505060405180910390f35b34801561070557600080fd5b50610744600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061105c565b604051808215151515815260200191505060405180910390f35b34801561076a57600080fd5b5061079f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112ed565b6040518082815260200191505060405180910390f35b3480156107c157600080fd5b506107ca611335565b005b3480156107d857600080fd5b506107e16113eb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561082f57600080fd5b50610838611411565b005b34801561084657600080fd5b5061084f6114ab565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561088f578082015181840152602081019050610874565b50505050905090810190601f1680156108bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108d657600080fd5b50610915600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114e4565b604051808215151515815260200191505060405180910390f35b34801561093b57600080fd5b50610944611703565b6040518082815260200191505060405180910390f35b34801561096657600080fd5b5061096f611709565b6040518082815260200191505060405180910390f35b34801561099157600080fd5b5061099a611716565b6040518082815260200191505060405180910390f35b3480156109bc57600080fd5b506109fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611726565b604051808215151515815260200191505060405180910390f35b348015610a2157600080fd5b50610a76600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611922565b6040518082815260200191505060405180910390f35b348015610a9857600080fd5b50610acd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119a9565b005b600080831415610ae25760009050610b01565b8183029050818382811515610af357fe5b04141515610afd57fe5b8090505b92915050565b60008183811515610b1457fe5b04905092915050565b60008183019050828110151515610b3057fe5b80905092915050565b6000828211151515610b4757fe5b818303905092915050565b6040805190810160405280600981526020017f416c6578546f6b656e000000000000000000000000000000000000000000000081525081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600154905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610cc457600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d1157600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d9c57600080fd5b610ded826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e80826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f5182600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b601281565b6b033b2e3c9fd0803ce800000081565b60035481565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508083111561116d576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611201565b6111808382610b3990919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561139157600080fd5b60028081111561139d57fe5b600560149054906101000a900460ff1660028111156113b857fe5b141515156113c557600080fd5b6001600560146101000a81548160ff021916908360028111156113e457fe5b0217905550565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561146d57600080fd5b60028081111561147957fe5b600560149054906101000a900460ff16600281111561149457fe5b141515156114a157600080fd5b6114a9611b01565b565b6040805190810160405280600381526020017f414c54000000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561152157600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561156e57600080fd5b6115bf826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611652826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b60045481565b68056bc75e2d6310000081565b6b019d971e4fe8401e7400000081565b60006117b782600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a0557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611a4157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6002600560146101000a81548160ff02191690836002811115611b2057fe5b021790555060006004541115611c0a57611ba5600454600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015611c89573d6000803e3d6000fd5b505600a165627a7a723058205bbef016cc7699572f944871cb6f05e69915ada3a92a1d9f03a3fb434aac0c2b0029Mehr Details zu Smart Contracts finden Sie in dem Artikel: .
Fazit
Wir haben die Technologien aufgelistet, auf denen moderne Blockchains basieren und wie sie miteinander verbunden sind. Lassen Sie uns nun formulieren, welche Aufgaben mit Blockchain gelöst werden können und bei welchen Lösungen diese im besten Fall ineffizient sein werden. Die Verwendung von Blockchain ist daher nicht notwendig, wenn:
- Transaktionen in einer vertrauenswürdigen Umgebung stattfinden;
- Die Vermittlungsgebühren das Leben der Teilnehmer nicht beeinträchtigen;
- Die Teilnehmer kein Eigentum haben, das als digitale Vermögenswerte präsentiert werden kann;
- Es gibt keine Verteilung digitaler Vermögenswerte, d.h. der Wert wird nur von einem Teilnehmer gehalten oder bereitgestellt.
Welche Zukunft erwartet die Blockchain? Derzeit kann man nur die möglichen Entwicklungspfade der Blockchain-Technologien erahnen:
- Blockchain wird eine genauso alltägliche Datenbanktechnologie sein wie SQL oder NoSQL für einen bestimmten Anwendungsbereich;
- Blockchain wird ein weit verbreitetes Protokoll werden, wie HTTP für das Internet;
- Blockchain wird die Grundlage für ein neues finanzielles und politisches System des Planeten sein!
Im nächsten Teil werden wir uns ansehen, welche Blockchains es derzeit gibt und wofür sie in verschiedenen Branchen eingesetzt werden.
Das ist erst der Anfang!
Quelle: habr.com
