Sharding erklärt | Skalierung von Ethereum

Der Ethereum-Gründer Vitalik Buterin teilte in einer Reddit-Mitteilung mit: “Sharding is coming”. Es gibt ein Problem, das sowohl Bitcoin als auch Ethereum geplagt hat: Skalierbarkeit. Bitcoin hat dieses Problem durch die Aktivierung von Segwit und die harte Gabelung in Bitcoin Cash gelöst und natürlich durch das Bitcoin-Lightning-Network. Ethereum versucht jedoch, dieses Problem auf andere Weise zu lösen – mit Sharding.

 

ethereum-blockchain-ether-coin-620x348 Sharding erklärt | Skalierung von Ethereum
Ethereum – Ether Coin

 

Das Problem der Skalierbarkeit – Wozu Sharding ?

Ethereum nähert sich dem Einsatz neuer Technologien, die eine Skalierung des Netzwerks ermöglichen würden. Die Technologie, bekannt als Sharding, versucht, die Daten der Ethereum-Blockkette in überschaubare Teile aufzuteilen. Ethereum steht unter Druck, mit der steigenden Popularität der Plattform Schritt zu halten, was zu langsameren Transaktionszeiten und hohen Bearbeitungsgebühren geführt hat (siehe Ethereum Roadmap).

Derzeit speichert jeder Knoten in allen Blockchain-Protokollen alle Zustände (Kontostände, Vertragscode und Speicher, etc.) und verarbeitet alle Transaktionen. Dies bietet ein hohes Maß an Sicherheit, schränkt aber die Skalierbarkeit stark ein: Eine Blockchain kann nicht mehr Transaktionen verarbeiten als ein einzelner Knoten. Deshalb ist Bitcoin auf 3-7 Transaktionen pro Sekunde, Ethereum auf 7-15, etc. beschränkt. Dies wirft jedoch eine Frage auf: Gibt es Möglichkeiten, einen neuen Mechanismus zu erstellen, bei dem nur eine kleine Teilmenge von Knoten jede Transaktion überprüft?

 

 

Triviale, aber fehlerhafte Wege, um das Problem zu lösen

Es gibt drei Hauptkategorien von “einfachen Lösungen”:

Die erste besteht darin, einfach auf die Skalierung einzelner Blockketten zu verzichten und stattdessen davon auszugehen, dass die Benutzer viele verschiedene “Altcoins” verwenden werden. Dies erhöht den Durchsatz erheblich, geht aber zu Lasten der Sicherheit: Eine Erhöhung des Durchsatzes um den Faktor N bei dieser Methode führt zwangsläufig zu einer Verringerung der Sicherheit um den gleichen Faktor.

Die zweite Möglichkeit ist, einfach die Blockgröße zu erhöhen. Das kann funktionieren und kann in manchen Situationen durchaus das richtige Rezept sein, da Blockgrößen eher durch die Politik als durch realistische technische Überlegungen eingeschränkt werden können. Doch unabhängig davon, wie man im Einzelfall denkt, hat ein solcher Ansatz unweigerlich seine Grenzen: Wenn man zu weit geht, dann werden Knoten, die auf Consumer-Hardware laufen, ausfallen, das Netzwerk wird sich ausschließlich auf eine sehr kleine Anzahl von Supercomputern verlassen, die den Blockchain betreiben, was zu einem großen Zentralisierungsrisiko führen kann.

Die dritte Möglichkeit ist “Merge Mining“, eine Technik, bei der es viele Ketten gibt, aber alle Ketten die gleiche Miningkraft haben. Derzeit erhält Namecoin einen großen Teil seiner Sicherheit durch die Bitcoin-Blockkette. Wenn alle Miner teilnehmen, kann dies theoretisch den Durchsatz um den Faktor N erhöhen, ohne die Sicherheit zu gefährden. Dies hat aber auch das Problem, dass es die Rechen- und Speicherlast jedes Miners um den Faktor N erhöht, und so ist diese Lösung in der Tat einfach eine heimliche Form der Blockgrößenzunahme.

 

ethereum-sharding-skalierung-roadmap-620x445 Sharding erklärt | Skalierung von Ethereum
Ethereum Sharding (Skalierung) – Roadmap

 

Ethereum Sharding – Wie könnte ein Grunddesign einer gesplitterten Blockkette aussehen?

Ein klügerer Ansatz ist das Ethereum-Sharding, bei dem Nutzer den gesamten Zustand des Netzwerks in eine Reihe von Partitionen, sogenannte Shards, aufteilen, die ein eigenes, unabhängiges Stück Transaktionsgeschichte enthalten. In diesem System würden bestimmte Knoten Transaktionen nur für bestimmte Shards verarbeiten, so dass der Durchsatz von Transaktionen, die insgesamt über alle Shards hinweg verarbeitet werden, viel höher ist, als wenn ein einziger Shard die gesamte Arbeit erledigt, wie es die Hauptkette jetzt tut.

Beim Sharding gibt es Knoten, die Kollatoren genannt werden, die Transaktionen auf Shard k akzeptieren (je nach Protokoll wählen die Kollatoren entweder welches k oder werden zufällig mit einigen k belegt) und Kollationen erstellen. Ein Block muss dann für jeden Shard einen Kollationskopf enthalten. Ein Block ist beim Ethereum-Sharding gültig, wenn Folgendes gilt:

  1. Die in jeder Sortierung angegebene Wurzel stimmt mit der aktuellen Zustandswurzel des zugehörigen Shards überein
  2. Alle Transaktionen in allen Sortierungen sind gültig
  3. Die in der Sortierung angegebene Post-State-Wurzel entspricht dem Ergebnis der Ausführung der Transaktionen in der Sortierung über dem angegebenen Vorzustand
  4. Die Kollation wird von mindestens zwei Dritteln der für diesen Splitter registrierten Kollatoren unterzeichnet

Beim Ethereum-Sharding gibt es nun mehrere “Ebenen” von Knoten, die in einem solchen System existieren können:

  • Super-Full Node – verarbeitet alle Transaktionen in allen Sortierungen und behält den vollen Status für alle Shards bei
  • Top-Level-Knoten – verarbeitet alle Top-Level-Blöcke, aber verarbeitet oder versucht nicht, die Transaktionen in jeder Sortierung herunterzuladen
  • Single-Shard-Knoten – fungiert als oberster Knoten, verarbeitet aber auch alle Transaktionen und behält den vollen Status für einen bestimmten Shard bei
  • Light Node – lädt und verifiziert nur die Block-Header der Top-Level-Blöcke; verarbeitet keine Collation-Header oder Transaktionen, es sei denn, es muss ein bestimmter Eintrag im Zustand eines bestimmten Shards gelesen werden; in diesem Fall lädt es den Merkle-Zweig in den neuesten Collation-Header für diesen Shard und lädt von dort den Merkle-Nachweis des gewünschten Wertes im Zustand herunter