Close

Kontaktieren Sie uns

Brauchen Sie IT-Service oder Support? Schicken Sie uns Ihre Online-Anfrage, und wir finden eine Lösung!

Your request was succesfully accepted!

Bitcoin und Ethereum: Zukunft der nicht am Mining beteiligten Knoten

Einführung

In letzter Zeit wurde viel über die Zukunft von Blockchain-Systemen gesprochen. Es besteht die gemeinsame Meinung, dass Blockchain bald traditionelle Zahlungssysteme wie Visa und Mastercard ersetzen und sogar das Rechtsgebiet durch seine Smart-Verträge verändern könnte. Doch trotz aller Erwartungen haben wir immer noch kein vollwertiges auf Blockchain basierendes Zahlungssystem. Die Menschen bezahlen die Waren und die Dienstleistungen nur dann mit Kryptowährungen, wenn die herkömmlichen Zahlungsmethoden aus irgendeinem Grund nicht verfügbar sind. Kryptotransaktionen sind heutzutage meist spekulativer Natur.

Es gibt eine Menge von einschränkenden Faktoren – wirtschaftliche, politische, technische und sogar psychologische -, die Blockchain-Systemen im Weg stehen. In diesem Beitrag werden wir einige der technischen Einschränkungen für Bitcoin und Ethereum, die zwei größten Blockchainsysteme, besprechen.

Wir gehen davon aus, dass Sie die Grundlagen für die Funktionsweise dieser Systeme bereits kennen. Wenn Sie sich auf unbekannte Begriffe stoßen, können Sie das Buch Mastering Bitcoin von Andreas Antonopoulos und diesen Geektimes-Artikel über Ethereum lesen.

Mit zunehmender Popularität der Blockchain werden bestimmte verteilte Datenlager fälschlicherweise als Blockchain-Systeme bezeichnet. Allerdings hat kein verteiltes Datenlager das erforderliche Maß an Sicherheit, Offenheit und Unabhängigkeit, um als Blockchain-System bezeichnet zu werden. In diesem Artikel muss ein verteiltes Datenlager die folgenden Anforderungen erfüllen, um als Blockchain-System betrachtet zu werden:

  • Die Daten werden in einer einzigen Blockchain gespeichert. Am Ende der Kette können sich mehrere Gabeln für kurze Zeiträume bilden, aber nur eine davon kann validiert werden.
  • Die Daten werden zentral gespeichert, wobei alle Knoten gleich und unabhängig sind. Das System ist weder im Besitz noch unter der Kontrolle von Dritten. Die Änderungen im System erfolgen nur dann, wenn sie von der Mehrheit der Knoten genehmigt werden.
  • Der Benutzer kann alle im System gespeicherten Daten einsehen und die Richtigkeit der hinzugefügten Blöcke und damit die Richtigkeit der Daten selbst überprüfen.

Schnelleres Block-Mining?

Im Vergleich zu traditionellen Zahlungssystemen werden die Transaktionen in Blockchain-Systemen wesentlich langsamer durchgeführt. Bitcoin und Ethereum, die zwei führenden Blockchain-Systeme, funktionieren nach dem Proof-of-Work-Prinzip. Bevor eine Transaktion validiert wird, muss sie zunächst in einer bestimmten Anzahl von Blöcken registriert werden. Dann müssen Sie warten, bis das System eine bestimmte Menge Rechenarbeit leistet, als Garantie gegen die Änderung der hinzugefügten Daten durch Dritte. Im Bitcoin-System, um validiert zu werden, muss eine Transaktion, zu 6 Blöcken hinzugefügt werden, mit Ausnahme des Blocks, der diese Transaktion enthält. Dies dauert etwa eine Stunde. Was Ethereum betrifft, so gibt es keinen einzigen Validierungsmechanismus. Für einige Ethereum-Geldbörsen muss eine Transaktion zu 5 Blöcken hinzugefügt werden, was nur eine Minute dauert. Gleichzeitig erfordern bestimmte Börsen, dass eine Transaktion zu mehreren hundert Blöcken hinzugefügt ist.

Einige Börsen führen interne Kryptotransaktionen innerhalb einer Sekunde durch. Da diese Transaktionen innerhalb des Systems ausgeführt werden, sind sie nicht in der öffentlichen Blockchain registriert, sondern in der Börse-Datenbank gespeichert.  Wenn Sie jedoch das Geld auf die Börse deponieren oder daraus abheben, werden solche Transaktionen der öffentlichen Blockchain hinzugefügt. Allerdings werden wir uns nicht auf interne Börsentransaktionen als Blockchain-Transaktionen beziehen.

Wenn Sie einen kleinen Kauf machen, müssen Sie in der Regel nicht auf die Validierung warten, da das Risiko des Verkäufers gering ist. In diesem Fall genügt es zu wissen, dass die Transaktion im System ist und darauf wartet, dem Block hinzugefügt zu werden. Wenn man das System als Ganzes betrachtet, ist das Block-Mining der Hauptfaktor, der die Blockchain-Performance einschränkt, da alle Transaktionen schließlich zu Blöcken hinzugefügt werden müssen. Das Mining ist aus Sicherheitsgründen sehr schwierig. Im Bitcoin-System wird die Komplexität des Block-Minings angepasst, so dass das Hinzufügen eines neuen Blocks durchschnittlich 10 Minuten dauert. Wenn die Blöcke schneller erstellt werden, erhöht sich die Komplexität. Wenn es mehr als 10 Minuten dauert, einen neuen Block zu erstellen, wird die Komplexität reduziert. In Ethereum wird alle 15 Sekunden ein neuer Block hinzugefügt.

Bei Bedarf kann die Häufigkeit des Hinzufügens neuer Blöcke erhöht werden, indem die Komplexität des Minings reduziert oder das Mining überhaupt aufgegeben wird. Anstelle des Minings kann das Proof-of-Stake-Prinzip eingesetzt werden. Die beiden Ansätze erhöhen jedoch die Wahrscheinlichkeit, dass die Benutzer gleichzeitig die gleichen Blöcke erstellen, was zu einer erhöhten Anzahl von Gabeln und Unannehmlichkeiten führt. Die kritische Zeit für das Hinzufügen eines Blocks entspricht der Zeit für die Verteilung eines Blocks im Netzwerk. Sobald diese Schwellengrenze überschritten ist, erhalten die Miner häufige Benachrichtigungen über einen neu erstellten Block, nachdem sie ihn selbst (und wahrscheinlich auch die anderen darin aufgenommen Transaktionen) erstellt und an das Netzwerk gesendet haben. Auf diese Weise wird das Hinzufügen eines neuen Blocks mit Gabelung verbunden, was den Systembetrieb sabotiert. Die Zeit, die für die weltweite Verteilung von Daten benötigt wird, beträgt etwa 100 µs. Auf diese Weise kann die Geschwindigkeit, mit der die Blöcke zur Blockchain hinzugefügt werden, um 10⋅60⋅1000/100=6.000 Mal in Bitcoin und 15⋅1000/100=150 Mal in Ethereum erhöht werden.

Wie die Transaktionsbasis auf vollständigen Knoten gespeichert wird

Eine weitere Möglichkeit, die Anzahl der verarbeiteten Transaktionen aufzubauen, besteht darin, die Größe einer Transaktion zu erhöhen. Diese Methode hat jedoch ihre Grenzen.  Zum Beispiel, begrenzter Festplattenspeicher. Da die Datenverarbeitung in Bitcoin und Ethereum unterschiedlich ist, werden wir diese Systeme nacheinander betrachten.

Bitcoin

Die Bitcoin-Blockchain speichert keine Informationen über den Kontostand. Sie speichert nur die Informationen über die Transaktionen. Wenn ein Benutzer bereit ist, die Informationen über seinen aktuellen Kontostand zu erhalten oder einfach sicherzustellen, dass er über genügend Guthaben verfügt, um eine bestimmte Transaktion durchzuführen, müssen Sie auf die Datenbank zugreifen, Eingabetransaktionen finden (wenn der Benutzer die Kryptowährung erhalten hat) und sicherstellen, dass der Benutzer diese Guthaben nicht ausgegeben hat. Um die Transaktionen in Bitcoin überprüfen zu können, müssen Sie auf Ihrem Gerät die Geschichte der Transaktionen seit dem Systemstart speichern.

Bitcoin und Ethereum: Zukunft der nicht am Mining beteiligten Knoten

Abbildung 1. Bitcoin-Blockchain speichert nur Ein- und Auszahlungen. Es werden keine Informationen über den aktuellen Kontostand gespeichert. Um den aktuellen Saldo zu überprüfen, müssen Sie alle Transaktionen mit Ausgaben für nicht ausgegebene Transaktionen summieren.

Derzeit bildet die Größe der Bitcoin-Blockchain 150 Gb. Diese Zahl wächst um etwa 50 Gb pro Jahr. Es ist erwähnenswert, dass der Hauptgrund für das Wachstum der Blockchain nicht der Zustrom neuer Benutzer ist, sondern die Transaktionen der bestehenden Benutzer. Da die neuen Transaktionen täglich in das System aufgenommen werden und die älteren Transaktionen nicht gelöscht werden, wird Bitcoin-Blockchain wachsen

Bitcoin und Ethereum: Zukunft der nicht am Mining beteiligten Knoten

Abbildung 1. Größe der Bitcoin-Blockchain im Laufe der Zeit.

Nicht jeder Benutzer kann auf seinem PC mehrere hundert Gigabyte Festplattenspeicher für die Speicherung der Blockchain bereitstellen. Blockchain ist nicht nur Dateien, die auf der Festplatte gespeichert sind, sondern eine Datenbank, die, wenn die neuen Blöcke hinzugefügt werden, einen Teil der Daten neu erstellt, um sie effizienter zu speichern.  Bitcoin-Clients verwenden in der Regel LevelDB auf Basis von LSM-Baumstrukturen.

Zur Optimierung der Transaktionsvalidierung kann eine separate Transaktionsdatenbank mit nicht verbrauchten Transaktionsausgaben (UTXO) verwendet werden. Theoretisch können Sie, wenn Sie UTXO validieren, die Informationen über die alten Transaktionen aus der Hauptdatenbank zu Optimierungszwecken löschen. Die verbleibende Datenbank benötigt jedoch noch viel Speicherplatz. Die Intensität der Festplattenzugriffe wird sich unwesentlich verringern. Während sich die Datenbank verkleinert, müssen die Transaktionen mit verbrauchten Ausgaben gelöscht werden. Auf diese Weise bringt der Betrieb eines vollständigen Knotens einige Unannehmlichkeiten für normale Benutzer mit sich. Es gibt die Meinung, dass sich ein großer Teil der vollen Bitcoin-Knoten bereits in Rechenzentren befindet.

Damit eine Bitcoin-Software-Geldbörse ordnungsgemäß funktioniert, ist es nicht erforderlich, eine vollständige Datenbank zu speichern. Normalerweise benötigen Sie nur einen „leichten“ Knoten, der die Daten von den anderen Netzwerkknoten anfordert. Auf diese Weise funktionieren viele Bitcoin-Geldbörsen und mobile Clients. Dieser Ansatz ist jedoch nicht völlig sicher, da Sie auf über das Netzwerk empfangene Daten vertrauen müssen. Die zusätzliche Anforderung, d.h. übermäßige Daten aus verschiedenen Quellen, ist ein guter Weg, um die Sicherheit zu erhöhen, aber immer noch nicht die beste Lösung. Das Gleiche gilt für die Anonymität: bei der Abfrage von Daten zu bestimmten Transaktionen enthüllt ein Benutzer seine Interessenbereiche. Natürlich können Sie Ihren Interessenbereich verbergen, indem Sie die zusätzlichen Informationen anfordern, aber es funktioniert nicht immer. Wenn die Benutzer aufhören, die Vollknoten auszuführen, wirkt sich das negativ auf das Netzwerk aus. Warum? In diesem Fall wird es einfacher, die kritische Anzahl von Vollknoten zu erreichen, was die Transaktionsverarbeitung beeinflussen kann.

Ethereum

In Ethereum gibt es den Begriff „Kontostand“. Ethereum-Knoten speichern die aktuellen Kontozustände. Wenn neue Blöcke hinzugefügt werden, wenden die Ethereum-Knoten die Änderungen auf die vorhandenen Zustände an und halten sie relevant. Aus Sicherheitsgründen ist es nicht erforderlich, die alten Zustände zu speichern. Es genügt, den aktuellen Zustand zu speichern (obwohl Sie sicherstellen müssen, dass es sich um einen korrekten Zustand handelt). Aus diesem Grund bietet Ethereum-Blockchain nicht zwei, sondern drei Arten von Knoten:

  • Die Archivierungsknoten verarbeiten alle Transaktionen seriell, speichern die Geschichte der Zustände und ermöglichen die jederzeitige Wiederherstellung der gesamten Geschichte von Transaktionen (z.B. Geschichte der Smart-Verträge). Solche Knoten werden für Debugging und statistische Analysen verwendet. Außerdem können die Archivierungsknoten dafür eingesetzt werden, um die Aktionen zu erklären und zu begründen, die durch Smart-Verträge Aufrufe entstanden sind. Darüber hinaus wird eine vollständige Datenbank für Mining-Zwecke benötigt.
  • Vollständige Knoten. Die vollständigen Knoten verarbeiten auch alle eingehenden Transaktionen, speichern aber nur die aktuellen Zustände. Die vollständigen Knoten speichern keine Geschichte der Transaktionen. Während vollständige Knoten die Transaktionssicherheit gewährleisten, indem sie sicherstellen, dass die die Saldeninformationen anderer Transaktionspartner korrekt sind, können Sie die Geschichte der Transaktionen nicht sehen. Diese Art von Knoten ist am besten für die Verwendung auf Desktop-Computern geeignet.
  • Leichte Knoten. Wie ihre Bitcoin-Gegenstücke speichern leichte Knoten von Ethereum die minimale Menge der Informationen und fordern Daten aus dem Netzwerk an. Die Verwendung von leichten Knoten ist nicht ganz sicher. Gleichzeitig haben die leichten Knoten geringere technische Anforderungen an das Gerät des Benutzers und können erfolgreich auf mobilen Geräten eingesetzt werden.

Die Archivierungsknoten von Ethereum weisen die gleichen Probleme wie die vollständigen Knoten von Bitcoin auf. Derzeit belegt die Datenbank Hunderte von Gigabyte an Speicherplatz. Wenn das Datenvolumen weiterhin mit gleichem Tempo wächst, wird Ende 2018 eine Standardfestplatte oder ein Solid-State-Laufwerk nicht in der Lage sein, eine vollständige Blockchain-Datenbank zu speichern.

Bitcoin und Ethereum: Zukunft der nicht am Mining beteiligten Knoten

Abbildung 3. Ethereum und Bitcoin Blockchain-Größe im Laufe der Zeit. 

Wie bereits erwähnt, können Sie aus Sicherheitsgründen einen vollständigen Ethereum-Knoten mit einer gekürzten Datenbank verwenden, die derzeit „nur“ 40 Gb Platz einnimmt.

Bitcoin und Ethereum: Zukunft der nicht am Mining beteiligten Knoten

Abbildung 4. Vollständige Datenbank des Ethereum-Knotens im Laufe der Zeit. 

Im realen Leben ist es jedoch nicht so einfach. Im Januar 2018 gab es ein Experiment mit Geth (Go Ethereum), einem beliebten Ethereum-Client. Innerhalb von zwei Wochen nach dem Geth-Betrieb wuchs die Datenbank von 40 auf 80 Gb. Weitere Untersuchungen zeigten, dass der Client nach Abschluss der Datenbanksynchronisation in den Archivknotenmodus wechselt. Da die Informationen über die alten Kontozustände nicht aus der Datenbank gelöscht werden, wächst die Datenbank auf mehrere hundert Gigabyte an (siehe Abb.3). Die Entwickler wissen von diesem Problem, haben aber bisher nichts getan. Die einzige praktische Empfehlung ist folgende: Sie müssen die Datenbank löschen und im Synchronisationsmodus „schnell“ erneut herunterladen. Dies kann bis zu mehreren Tagen dauern. Die heruntergeladene Datenbank wird kleiner sein. Das Problem ist, dass sobald die Synchronisation einmal abgeschlossen ist, wird der Client in den Vollsynchronisationsmodus wechselt und die Datenbank wieder schnell wächst.

Es stellt sich heraus, dass einer der populärsten Ethereum-Clients nicht lange im abgesicherten Modus verwendet werden kann. Dieses Tool wurde für Miner mit einer vollständigen Datenbank und Spekulanten entwickelt, die nur an Krypto-Preisen interessiert sind und sich nicht um die Sicherheit der Software kümmern.

Virtuelle Maschine von Ethereum

Ethereum ist nicht nur ein Zahlungsmittel, sondern auch eine verteilte virtuelle Maschine zur Ausführung von Programmen, die als Smart-Verträge bezeichnet werden. Da jeder vollständige oder Archivierungsknoten alle Smart-Vertrag Aufrufe seriell verarbeitet, ist es sinnvoll anzunehmen, dass die weitere Entwicklung von Ethereum durch die Kapazitäten moderner Computer begrenzt ist.

Bitcoin und Ethereum: Zukunft der nicht am Mining beteiligten Knoten

Abbildung 5. Transaktionen in einem Ethereum-Block im Laufe der Zeit (Geschwindigkeit des Blockhinyufügens ist konstant und beträgt 4 Blöcken pro Minute).

Durch das Herunterladen einer vollständigen Datenbank können wir abschätzen, wie die Rechenkomplexität der Verarbeitung von Smart-Vertrag zugenommen hat. Die vollständige Datenbank speichert Vertragscodes, die vollständige Geschichte der Vertragszustände und die Steuerbefehle, mit denen sie aufgerufen wurden. All dies ermöglicht es, alle Vertragsaufrufe zu reproduzieren und ihre Ausführungswege in Transaktionen von EVM (Ethereum Virtuelle Maschine) zu kriegen. Unter GitHub finden Sie die Liste der Steuerbefehle.

Durch die Analyse dieser Wege können Sie abschätzen, wie viele Operationen durchgeführt werden, wenn ein neuer Block hinzugefügt wird. Hash-Berechnungen, Speicherzugriffsoperationen und Systemaufrufe erwiesen sich als die ressourcenintensivsten Aufgaben.

Bitcoin und Ethereum: Zukunft der nicht am Mining beteiligten Knoten

Abbildung 6. Anzahl der sha3 Berechnungsoperationen in Ethereum Verträge im Laufe der Zeit.

Bitcoin und Ethereum: Zukunft der nicht am Mining beteiligten Knoten

Abbildung 7. Speicherzugriffoperationen in Ethereum-Verträge im Laufe der Zeit kontrahiert.

Bitcoin und Ethereum: Zukunft der nicht am Mining beteiligten Knoten

Abbildung 8. Systemaufrufe in Ethereum-Verträge im Laufe der Zeit. 

Wie Sie aus den Diagrammen sehen können, benötigt EVM derzeit nicht viele Rechenressourcen. Pro 1 Sekunde verarbeitet es etwa 100 Hash-Funktionen (bei einer Mining-Geschwindigkeit von 4 Blöcken pro Minute), mehrere hundert Speicherzugriffe und 10 Systemaufrufe. Selbst wenn sich das System im Laufe eines Jahres verzehnfacht, werden die Probleme mit der Datenspeicherung früher auftauchen (siehe oben).

Ethereum Profilerstellung

Obwohl EVM nicht viele Rechenressourcen benötigt, zeichnet sich der Geth-Client durch eine hohe CPU-Belastung (fast 100%) und einen hohen Speicherverbrauch aus. Da die Ethereum-Datenbank mehrere Einträge enthält, kann es sein, dass sie viele Rechenressourcen benötigt. Wir können die Häufigkeit der Festplattenzugriffe grob abschätzen. Wenn eine Transaktion ausgeführt wird, müssen Sie sicherstellen, dass das Geld des Absenders in der Blockchain registriert ist. Um dies zu tun, müssen Sie nach der Datenbank auf Ihrer Festplatte suchen.  Unter Berücksichtigung der logarithmischen Suchzeit und dem mit der LSM-Baumstruktur verbundenen Aufwand entspricht eine Transaktion 100 zufälligen Festplattenzugriffen. Jeder Block enthält etwa 100 Transaktionen (siehe vorheriges Kapitel). Pro Minute werden 4 neue Blöcke hinzugefügt. Um eine Transaktion zu validieren, müssen Sie daher 4⋅100⋅100≈−  zufällige Plattenzugriffe ausführen.

Um diese Schätzung zu überprüfen und die ressourcenintensivste Client-Aufgabe zu identifizieren, wurde das Geth-Profil, das die Ausführungsweg-Registrierungsfunktion verwendet, durchgeführt. Um einen registrierten Weg zu analysieren, wurde Go Tool Trace verwendet.

Auf dem folgenden Diagramm sehen Sie die Ausführungszeiten verschiedener Geth-Goroutinen nach Abschluss der vollständigen Synchronisation. Die Messungen wurden während 60 Sekunden durchgeführt.

Bitcoin und Ethereum: Zukunft der nicht am Mining beteiligten Knoten

Abbildung 9. Ausführungszeiten von 10 Top ressource-verbrauchenden Geth-Goroutinen nach Abschluss der Vollsynchronisation (Datenbank wird auf Festplatte gespeichert). Die Messzeit beträgt 1 Minute.

Wie Sie aus dem Diagramm sehen können, wird die meiste Zeit fürs Herunterladen-Programm verbraucht, das die Blöcke importiert, die Transaktionen validiert, Sie Vertragsanrufe mit Hilfe der virtuellen Maschine ausführt und die Zustände in der Datenbank aktualisiert. Da es jedoch nicht viele Daten gibt (4 Blöcke mit ca. 100 Transaktionen pro Sekunde), sollte das Herunterladen nicht zeitaufwändig sein. Der Betrieb der virtuellen Maschine ist genauso. Eine detailliertere Analyse ergab, dass in 1 Minute etwa 100.000 Systemaufrufe erstellt wurden, von denen die meisten Zugriffe auf LevelDB-Dateien auf der Festplatte waren (was bedeutet, dass die obige Schätzung korrekt war). Die durchschnittliche Zeit zwischen aufeinanderfolgenden Dateizugriffen beträgt 60.000.000µs/100.000 Anrufe=600µs, was der zufälligen Zugriffszeit auf die Festplatte ungefähr entspricht. Die Schlussfolgerung besteht darin, dass die Festplattenzugriffe hier der Engpass sind. Eine konstant hohe Festplattenbelastung während des Client-Betriebs bestätigt diese Annahme.

Das gleiche Problem gilt für rpc.ServerRequest, die Aufgabe mit der zweithöchsten Ausführungszeit. Es gibt eine Reihe von Systemaufrufen, bei denen der obere Teil des Stapels so aussieht:

Der Datenbankservice (leveldb.tCompaction) hat die dritthöchste Ausführungszeit. Es folgt der Aufwand, der im Zusammenhang mit der Sammlung von Go’s Müll ist. Der Rest der Goroutinen braucht wenig Zeit.

Auf diese Weise, wenn die gesamte Datenbank auf der Festplatte statt auf SSD gespeichert ist, hat der einschränkende Faktor mit der Datei-Ein- und Ausgabe zu tun. Für einen effektiven Betrieb des vollständigen Knotens sollten Sie den Solid-State-Laufwerk verwenden, die die Datenbankleistung 2-3-fach erhöhen. Eine schnelle Synchronisation kann außerdem helfen, die Datenbank zu entlasten. Da die Datenbank jetzt kleiner ist (Dutzende von Gbs statt Hunderte von Gbs), werden die Daten schneller, auch dank weniger Festplattenzugriffe, aktualisiert. In der folgenden Tabelle sehen Sie die Ergebnisse der Geth-Profilerstellung beim Blockhinzufügen nach einer schnellen Synchronisation (wenn die Datenbank auf SSD gespeichert ist). Die Messungen wurden während 10 Minuten durchgeführt.

Bitcoin und Ethereum: Zukunft der nicht am Mining beteiligten Knoten

Abbildung 10. Ausführungszeit von 10 Top ressource-verbrauchenden Geth-Goroutinen nach schneller Synchronisation (wenn die Datenbank auf SSD gespeichert ist). Die Messzeit beträgt 10 Minuten.

Die Profilerstellung zeigte, dass der Goroutine Miner.(*worker).update mehr Zeit als die anderen Aufgaben benötigt. Auf den ersten Blick scheinen die Ergebnisse überraschend, denn vor dem Start der Profilerstellung wurde das Mining durch den Aufruf der jeweiligen API-Funktion abgeschaltet. Eine detailliertere Analyse der Profilergebnisse und des Geth-Quellcodes ergab, dass ein Miner trotz deaktiviertem Mining weiterhin eingehende Transaktionen verarbeitet und in seine Datenbank aufnimmt. Es gibt hier kein echtes Mining, da der Miner meistens mit der Datenbank und den Systemaufrufen arbeitet.

Der Datenbankservice ist die zweitgrößte zeitaufwändige Aufgabe. Es folgen auch die weiteren Aufgaben, die die Datenbank auf die eine oder andere Weise nutzen.

Es ist merkwürdig, dass das Hashing ((*hasher).hashChildren) 30 mal (im Durchschnitt) weniger Zeit als die Arbeit mit der Transaktionsdatenbank des Miners braucht. Wenn der Miner die ganze Zeit innerhalb derselben Goroutine arbeitet, werden mehrere hundert Goroutinen erstellt und pro Sekunde gelöscht, um Hashes zu berechnen. Wenn die Datenbankleistung verbessert oder die Anzahl der hinzugefügten Transaktionen erhöht wird, wird die Berechnung der Hash-Funktion wahrscheinlich zu einem Engpass.

Die Validierung und Verifizierung von Blöcken in Proof-of-Work-Systemen ist nicht der einzige Zweck des Hashings.  Hashing ist auch der Schlüssel zur Speicherung von Daten in Blöcken und zur Überprüfung ihrer Integrität. Deshalb wird das Problem der Hash-Funktionsberechnung auch in Proof-of-Stake-Systemen auftreten. Eine mögliche Lösung ist der Einsatz von Beschleunigern auf Basis von Standard-Grafikkarten oder speziellen Coprozessoren oder Mikrochips, die fürs Mining in Bitcon-Blockchain schon eingesetzt werden.

Fazit

Wenn wir die künstlich geschaffenen Mining-Beschränkungen ignorieren, hat der Hauptfaktor, der die Leistung des heutigen Blockchain-Systems einschränkt, mit deren Datenbanken zu tun. Wenn sich das Wachstum des Transaktionsvolumens nicht verlangsamt, werden die vollständigen Blockketten von großen Blockchain-Systemen bis Ende 2018 nicht auf eine Festplatte passen. Sowohl Ethereum als auch Bitcoin fehlt es an der richtigen Funktionalität der Blockbescheidung.

Bei der Arbeit mit Datenbanken in Blockchain-Systemen sind sowohl der Speicherplatz als auch die Geschwindigkeit einer Festplatte wichtig. Heutzutage, wenn die Daten auf gängigen Festplatten gespeichert werden, brauchen die Operationen vom Lesen und Löschen der Daten die meiste Zeit. Es ist höchstwahrscheinlich, dass die vollständigen Knoten bald nur noch auf SSDs laufen werden. Später müssen wir auf SSDs und komplexere Datenbanken schalten, die eine hohe Leistung durch den Einsatz mehrerer Festplatten gewährleisten.

Was die technischen Einschränkungen betrifft, die nichts mit Datenbanken zu tun haben, ist die Berechnung der Hash-Funktion die größte davon. Dieses Problem kann durch die Verwendung von Grafikkarten oder anderen Spezialgeräten gelöst werden.

Viele Benutzer, die jetzt die vollständigen  Knoten auf ihren PCs speichern, werden bald auf „leichtere“ und weniger sichere Clients schalten müssen. Auf diese Weise wird die Anzahl der vollständigen Knoten im Netzwerk reduziert. Die vollständigen Knoten werden sich in Rechenzentren großer Unternehmen befinden, die über leistungsstarke Datenspeicher, Server mit hoher RAM-Speicherkapazität und spezielle Beschleuniger für die Berechnung von Hash-Funktionen verfügen. Es ist noch unklar, ob sich die großen Unternehmen zu einem einzigen Netzwerk zusammenschließen oder ihre Systeme unabhängig voneinander betreiben, und genau der Systembetrieb organisiert wird. Eines ist sicher: diese Systeme werden nicht so dezentral und unabhängig sein wie das heutige Bitcoin.

Es gibt noch eine weitere mögliche Lösung und zwar die verteilte Speicherung einzelner Blockchain-Teile auf Benutzergeräten. Das Gute daran ist, dass Sie viel weniger Festplattenspeicher benötigen. Gleichzeitig wird die Netzwerklast steigen, da der größte Teil der Daten von anderen Benutzern angefordert wird. Das erforderliche Sicherheitsniveau kann nur durch den Aufruf von übermäßigen Daten aus mehreren unabhängigen Quellen erreicht werden. Um die Interaktion zwischen den Knoten zu organisieren und die verschiedenen Teile der Datenbank zu speichern, werden möglicherweise spezielle Routerknoten (z.B. BitTorrent-Tracker) benötigt. Dies wird auch die Dezentralisierung der Netze untergraben.

Mit zunehmender Anzahl der Transaktionen werden Blockchain-Systeme jedoch große Veränderungen erfahren. Und die Zeit zeigt uns, wie sich die Systeme verändern werden und wie sich dies auf ihre Sicherheit und Unabhängigkeit auswirken wird.

 

Bitcoin und Ethereum: Zukunft der nicht am Mining beteiligten Knoten