Substrate in Kürze

von Dimitiy Kashitsyn

Heute wird der Autor über Substrate sprechen, eine Bibliothek, mit der Sie Ihre eigene Blockchain erstellen können. Substrate wurde von Parity Technologies entwickelt und bildet die Grundlage für Polkadot.

Was ist Substrate?

A substance or layer that underlies something, or on which some process occurs (Oxford Dictionary).

Eine Substanz oder Schicht, die unter etwas liegt oder auf der ein Prozess stattfindet.

Wie der Name schon sagt, kann Substrate verwendet werden, um etwas darauf wachsen zu lassen oder aufzubauen. In unserem Fall können wir Blockchains aufbauen, oder, im Fall von Polkadot, eine ganze Familie von Blockchains.

Warum brauche ich Substrate?

Bei Software dreht sich alles um Abstraktionen.

Die Geschichte der Informatik zeigt, dass wir immer abstrakter werden: von diskreter Logik zu integrierten Schaltkreisen und CPUs; von Maschinencode zu Assembler, von Assembler zu C, dann zu C++, Rust, Haskell und so weiter.

Dasselbe geschieht mit Programmier-APIs. Heutzutage schreibt zum Beispiel fast niemand mehr für das Web in einfachem HTML.

“Every problem may be solved by introducing yet another layer of abstraction. Except for a problem of too many abstraction layers… for that we invent frameworks.” — rephrasing of Andrew Koenig’s FTSE.

"Jedes Problem kann durch die Einführung einer weiteren Abstraktionsebene gelöst werden. Bis auf das Problem der zu vielen Abstraktionsschichten... dafür erfinden wir Frameworks." - Umformulierung von Andrew Koenig's FTSE.

Jede Abstraktionsebene versucht, ein bestimmtes Problem zu lösen. Welches Problem wurde also mit Substrate gelöst? Es stellt sich heraus, dass Sie, bevor Sie mit der Implementierung Ihrer brandneuen Blockchain-Lösung beginnen, über eine Menge Themen nachdenken müssen:

  • Warum um alles in der Welt braucht man noch eine weitere Blockchain?!
  • Verschiedene Krypto-Primitive: Verschlüsselung, Signaturen, RNG¹, usw.
  • Konsensalgorithmen und Fehlertoleranzabstimmung.
  • Proof of Waste, Proof of Staking, Proof of Authority? Oder vielleicht etwas ganz anderes?
  • Blockstruktur und effiziente Speicherung, Serialisierung von Nachrichten.
  • P2P Vernetzung, Peer Discovery, Block- und Transaktionsklatsch.
  • Zustandsmaschine, Runtime für die Ausführung, Smart Contracts.
  • Light-Client-Unterstützung

Obwohl Substrate sich nicht mit dem ersten Punkt befasst, kann Substrate Ihnen bei den restlichen Aufgaben helfen, indem es vorhandene Implementierungen bereitstellt, die mit großer Sorgfalt entworfen, geschrieben und getestet wurden und auf unserer jahrelangen Erfahrung mit der Implementierung von Blockchains basieren.

Sicherlich können Sie all diese Aufgaben auch von Hand implementieren, aber dann würden Sie wahrscheinlich mit einer ad-hoc, schlecht getesteten und nicht sehr gut dokumentierten Lösung enden, um es gelinde auszudrücken². Ganz zu schweigen davon, dass es in der Regel keine gute Idee ist, kryptografische Algorithmen selbst zu entwerfen oder zu implementieren, es sei denn, Sie sind ein Kryptografie-Experte und wissen wirklich, was Sie tun.

Durch die Bereitstellung generischer Implementierungen typischer Algorithmen ermöglicht Substrate Ihnen also, sich auf das Wesentliche Ihres Projekts zu konzentrieren: die Geschäftslogik der Chain, d.h. ihren Zustandsautomaten.

Gehen wir die wichtigsten Teile einer Blockchain durch und sehen wir uns an, was Substrate bieten kann.

Blockchain als widerstandsfähiger Speicher

Der einzige Zweck einer Blockchain besteht darin, eine Möglichkeit zu bieten, Daten nachprüfbar und global beständig zu speichern und zu verändern. Das bedeutet, dass alle Parteien eine vertrauensfreie Möglichkeit haben, zu überprüfen und zu vereinbaren, welche Werte zu einem bestimmten Zeitpunkt als aktuell gelten sollen. Außerdem sollten solche Daten, sobald sie versiegelt sind, resistent sein und je nach Konsens nicht mehr verändert werden können.

Diese Eigenschaft ist bei Kryptowährungen weit verbreitet, wo die resistente Speicherung Kontoschlüssel und deren aktuelle Guthaben enthält. Es sei jedoch darauf hingewiesen, dass Kryptowährungen nicht die einzige mögliche Blockchain-Anwendung sind. Im Grunde kann fast jedes System, das eine global kohärente, dauerhafte Speicherung und eine überprüfbare Transaktionshistorie erfordert, auf die eine oder andere Weise mit Blockchain implementiert werden.

Substrate bietet einen effizienten Speicher, der sehr einfach zu verwenden ist und eng mit der WebAssembly (Wasm) Runtime integriert ist.

Blockchain als Funktion

Um den Zustand der Chain zu aktualisieren und ihre Speicherung entsprechend der anstehenden Operationen zu ändern, benötigen wir einen Punkt, an dem Entscheidungen getroffen werden.

Solche Entscheidungspunkte können als Funktion ausgedrückt werden, die den aktuellen Zustand und eine Reihe anstehender Operationen annimmt und einen anderen Zustand liefert, der als der neue tatsächliche Zustand der Chain angesehen werden sollte. In der Blockchain-Welt wird eine solche Funktion als State- Transition-Funktion oder kurz STF bezeichnet.

Mit Substrate können Sie eine solche Funktion auf eine sehr überschaubare und portable Weise definieren. Ähnlich wie bei JavaScript, das auf einer Webseite ausgeführt wird, können Sie eine Reihe von Funktionen schreiben, die gemeinsam Runtime genannt werden und als STF fungieren. Darüber hinaus wäre eine solche Implementierung portabel und würde nicht von der Prozessorarchitektur, dem Betriebssystem, dem Browser oder in anderer Weise von der Plattform abhängen.

Tatsächlich sind sogar die Substrate zugrunde liegenden Technologien eng miteinander verwandt. Substrate verwendet WebAssembly als Lingua Franca für seine Runtime, dieselbe Technologie, die jetzt von großen Unternehmen wie Mozilla, Google und Apple als schnellere und dennoch kompatible Alternative zu JavaScript für das Web integriert wird.

Sicherheit und Geschwindigkeit

Wenn Sie Ihre Chain-Logik und Smart Contracts in Wasm schreiben, haben Sie die besten Werkzeuge, um Ihre Logik schnell und zuverlässig auszuführen. Aber Substrate bietet eine Möglichkeit, Ihren Code noch schneller auszuführen - und zwar ohne den Overhead einer virtuellen Maschine.

Einer der revolutionärsten Aspekte von Substrate ist, dass das Runtime-Bild, das den STF enthält, neben anderen Nutzdaten direkt auf der Chain gespeichert ist. Das bedeutet, dass die Runtime und die gesamte Geschäftslogik der Chain auf sichere und überprüfbare Weise aktualisiert werden können. Mehr noch: Da Substrate und seine Runtime Module Library³ in der Programmiersprache Rust geschrieben sind, können sie sowohl in nativen Code als auch in Wasm übersetzt werden.

Zu jedem Zeitpunkt verfügt die Client-Software über zwei Kopien der kompilierten Runtime: eine, die in der Software nativ kompiliert ist, und eine, die ein Wasm-Bild ist, das in einer VM ausgeführt werden soll. Bei der Ausführung von Runtime-Funktionen prüft die Client-Software, ob die in der Kette befindliche Wasm-Version der Runtime mit der kompilierten, nativen, integrierten Version übereinstimmt. Wenn dies der Fall ist, delegiert die Client-Software die Ausführung der Runtime-Funktionen an die native Code-Version.

Forkless Upgrades

Wenn das Runtime-Bild auf der Chain aktualisiert wird, werden einige Clients ihre Software noch nicht aktualisiert haben. In diesem Fall würde ihr Node die korrekte Version der Runtime ausführen, indem er sie auf der in Substrate integrierten virtuellen Maschine Wasm interpretiert. In jedem Fall sind also alle Nodes im Netzwerk immer in der Lage, die Chain korrekt zu synchronisieren (wenn auch mit unterschiedlicher Effizienz), wodurch ein Chain Fork verhindert wird.

Vernetzung

Blockchain ist darauf angewiesen, dass viele Teilnehmer über ein Netzwerk kommunizieren. Die typische Lösung ist die Verwendung von Peer-to-Peer-Technologien für diese Kommunikation, und Substrate ist hier keine Ausnahme. P2P ist ein gebräuchlicher Name für eine Reihe von Technologien, die zur Erstellung dezentraler Vernetzungsanwendungen verwendet werden.

Die Grundidee ist eine sich selbst erhaltende Netzwerkumgebung, in der jeder Teilnehmer (in der Regel als Node bezeichnet) in der Lage ist, innerhalb eines Netzwerks ohne vorherige Konfiguration oder Interaktion mit einer Autorität zu arbeiten.

Um sicherzustellen, dass Nodes dem Netzwerk jederzeit beitreten oder es verlassen können, ohne die gesamte Vernetzung zu beeinträchtigen, verwendet Substrate die Rust-Implementierung von libp2p, einem vielversprechenden Netzwerkstack, der alles enthält, was für die Einrichtung einer dezentralen Netzwerkumgebung erforderlich ist.

Benutzerdefinierte Nachrichten

Im einfachsten Fall brauchen Sie nicht einmal an die Vernetzung zu denken, denn Substrate erledigt das alles für Sie. Sie stellen lediglich die State- Transition-Funktion Ihrer Blockchain bereit und überlassen Substrate die gesamte Netzwerkinteraktion. Wenn Ihre Blockchain jedoch das Versenden von benutzerdefinierten Nachrichten erfordert, können Sie das Netzwerk-Subsystem anpassen und erweitern, indem Sie eine Spezialisierung des Netzwerkprotokolls bereitstellen, die benutzerdefinierte Nachrichten und deren Verarbeitungslogik definiert.

Konsens

Eine State-Transition-Funktion, mit der Sie von einem Zustand in einen anderen wechseln können, ist gut, aber nicht genug. Sie brauchen auch eine Möglichkeit für alle Nodes, sich darauf zu einigen, was der nächste Zustand sein soll.

Als Inhaber eines Bankkontos ist es das Letzte, was Sie wollen, wenn Sie und Ihre Bank sich nicht einig sind, wie viel Geld Sie auf Ihrem Konto haben. Blockchain ermöglicht es den Parteien, einen Konsens zu erzielen, ohne sich gegenseitig zu vertrauen (daher Zero-Trust), selbst wenn böswillige Teilnehmer aktiv versuchen, das System zu knacken und Ihr Geld zu stehlen.

Dazu wird ein Konsensalgorithmus mit einer Eigenschaft namens Byzantinische Fehlertoleranz (BFT) verwendet. Wenn ein System BFT ist, bedeutet dies, dass die Knoten einen Konsens erreichen können, selbst wenn sich ein Teil von ihnen willkürlich schlecht verhält, z.B. durch geheime Absprachen, das Zurückhalten von Nachrichten oder durch Offline-Sein. BFT-Konsenssysteme sind in unterschiedlichem Maße resistent gegen Probleme bei der Vernetzung, bei denen Nachrichten umgeordnet oder verzögert werden können. Einige BFT-Konsenssysteme sind so konzipiert, dass Nodes, die sich falsch verhalten (z.B. für zwei Blöcke gleichzeitig abstimmen), bestraft werden können und ihr Staking auf der Chain gestrichen wird.

Für jede in Substrate unterstützte Konsens-Engine wird es ein Runtime-Modul geben, das für den Umgang mit Beweisen für Fehlverhalten entwickelt wurde. Die Auswirkungen der Auswertung eines Fehlverhaltensnachweises können von der Runtime bestimmt werden.

Es wurde mathematisch bewiesen, dass dieses Protokoll lebensfähig ist, solange zwei Drittel der Nodes im Netzwerk nicht böswillig sind und gemäß dem Protokoll arbeiten. Dies ist einer der Gründe, warum es wichtig ist, viele Nodes im Netzwerk zu haben.

Der Konsens ist ein wichtiger Bestandteil jeder Blockchain-Anwendung. Glücklicherweise bietet Substrate eine bestehende Implementierung des BFT-Konsenses, die fast sofort verwendet werden kann.

Je nach Anwendungsszenario können Sie entweder die vorhandene Logik zur Erstellung von Blöcken verwenden oder Ihre eigene erstellen. Im letzteren Fall können Sie die generische Implementierung der BFT verwenden und sie an Ihre Bedürfnisse anpassen.

Substrate wird sich weiter entwickeln und weitere Konsensalgorithmen in sein Repertoire aufnehmen. Dazu gehört auch das GHOST-basierte GRANDPA (Recursive Ancestor Deriving Prefix Agreement) Finality Gadget, das von der Web3 Foundation entwickelt wurde.

Da Substrate ein vollständig erweiterbares und anpassbares Framework ist, können Sie auch Ihren eigenen Konsensalgorithmus definieren. Substrate ist sogar so flexibel, dass es Lösungen unterstützen kann, die nicht auf der klassischen Blockchain-Architektur basieren. Wir erforschen zum Beispiel, wie man das Problem des Blockchain-Durchsatzes lösen kann, indem man einen Konsens entwickelt, der nicht auf dem traditionellen Blockkonzept basiert.

Light-Client-Unterstützung

Frühe Blockchain-Implementierungen waren so konzipiert, dass jeder Node im Netzwerk die komplette Blockchain-Datenbank lokal verwaltete. Dies wird heute als Full Client bezeichnet, was bedeutet, dass der Client über alles verfügt, was er für den Betrieb als Node im Netzwerk benötigt.

Vollständige Clients, auch Full Nodes genannt, sind wichtig für die Sicherheit der Chain. Aber je größer die Blockchain wird, desto größer wird auch die Datenbank des Clients. Derzeit haben die wichtigsten Kryptowährungen Datenbanken von mehreren hundert Gigabyte.

Wenn der vollständige Node initialisiert wird, muss er sich als erstes mit dem Rest des Netzwerks synchronisieren. Aus Sicherheitsgründen kann ein solcher Node die Datenbank nicht einfach von einem beliebigen Node "so wie sie ist" herunterladen. Stattdessen muss er seine eigene Datenbank von Grund auf neu aufbauen, indem er alle Transaktionen seit der Entstehung (dem allerersten Block der Chain) erneut abspielt. Diese Aufgabe ist nicht nur rechenintensiv, sondern erfordert auch die Übertragung riesiger Datenmengen über das Netzwerk.

Ich denke, jeder würde zustimmen, dass es unpraktisch, wenn nicht sogar lächerlich ist, ein halbes Terabyte an Daten auf Ihr Mobiltelefon herunterzuladen, nur um ein Sandwich zu kaufen. Deshalb haben die Blockchain-Entwickler fast von Anfang an über eine Möglichkeit nachgedacht, die Kosten für den Unterhalt des Nodes zu senken, sowohl was den Speicherplatz als auch was den Netzwerkdurchsatz betrifft.

Am Ende wurde das Konzept des Light Client geboren. Kurz gesagt ist ein Light-Client ein Betriebsmodus eines Blockchain Nodes, bei dem nur die wichtigsten Daten lokal gespeichert werden und die Interaktion mit dem Netzwerk auf ein Minimum reduziert wird, während gleichzeitig ein akzeptables Maß an Sicherheit für fast alle Interaktionen erhalten bleibt, die jemand wahrscheinlich vornehmen wird.

Dank des geringen Ressourcenbedarfs können Light-Client Nodes schließlich problemlos gebootet und somit auf mobilen Geräten ausgeführt werden.

Leider ist es ein ernsthaftes Unterfangen, Light Client-Unterstützung in eine bestehende Blockchain zu integrieren. Es ist viel einfacher, Light Clients in das ursprüngliche Design einer Blockchain zu integrieren. Substrate wurde speziell mit Blick auf die Unterstützung von Light Clients entwickelt. Blockchains, die auf der Grundlage von Substrate entwickelt wurden, unterstützen Light-Clients bereits von Anfang an.

Fazit

In diesem Beitrag hat das Team die wichtigsten Ziele und Funktionen des Substrate-Frameworks kurz vorgestellt. Um alle Aspekte von Substrate zu behandeln, wäre ein viel längerer Artikel nötig, aber hoffentlich haben Sie jetzt ein allgemeines Verständnis der Konzepte. Das reicht zwar nicht aus, um mit dem Schreiben Ihres Codes zu beginnen, aber zumindest sollten Sie jetzt wissen, was Sie erwartet.

Weitere Informationen finden Sie in dem früheren Beitrag "Was ist Substrate?" von Jack Fransham. Wenn Sie mit der Implementierung Ihrer Blockchain beginnen möchten, ist das Parity Substrate Wiki die beste Anlaufstelle. Zögern Sie auch nicht, einen Blick in den Quellcode zu werfen, insbesondere in die ReadMe-Datei.

Fußnoten

  1. RNG steht für Zufallszahlengenerator. Nicht jeder RNG ist für Blockchain-Anwendungen geeignet.
  2. Substrate selbst befindet sich jetzt in der sehr aktiven Phase der Entwicklung. Die Codebasis ist sehr volatil und die Dokumentation ist noch in Arbeit. Wir arbeiten aktiv an der Ergänzung des Wikis, in dem Sie weitere Details nachlesen können.
  3. Die Runtime-Modulbibliothek ist ein optionaler Satz von Rust-Crates, der sich mit allgemeinen Aufgaben wie der Serialisierung von Parametern und der Abfertigung von Aufrufen befasst und Ihnen hilft, Ihre Runtime mit minimalen Kosten zu erstellen. Diese Bibliothek ist völlig optional. Sie können also Ihre eigene Runtime von Grund auf neu entwerfen oder eine beliebige Sprache verwenden, die nach Wasm kompiliert werden kann. Abgesehen von Rust unterstützen derzeit nur C und C++ Wasm als Zielarchitektur.
0

Das ist der offizielle WagMedia Space Germany! Hier werden interessante und lesenswerte DotSama-Artikel durch die Wag-Media community übersetzt und öffentlich zur Verfügung gestellt. Mitmachen? Trete unserem Discord bei und werde Teil der größten News Community im DotSama Universum.

0 comments

Das ist der offizielle WagMedia Space Germany! Hier werden interessante und lesenswerte DotSama-Artikel durch die... Show More