Was ist das Spiel der Validierer oder "wie man ein Proof-of-Stake-Blockchain startet".

Ihr Team hat also die Alpha-Version Ihrer Blockchain abgeschlossen, und es ist an der Zeit, das Testnetz zu starten, gefolgt vom Mainnet. Sie haben eine echte Blockchain mit unabhängigen Teilnehmern, einem soliden Wirtschaftsmodell, Sicherheit, und Sie haben die Governance entworfen. Nun ist es an der Zeit, all dies in der Praxis auszuprobieren. In einer idealen kryptoanarchistischen Welt würden Sie den Genesis-Block, den endgültigen Node-Code, ins Netzwerk hochladen, und die Validatoren würden alles selbst starten, alle unterstützenden Dienste hochfahren, und alles würde von selbst geschehen. Aber das ist eine erfundene Welt; in der Realität muss das Team eine Vielzahl von unterstützenden Softwarelösungen und verschiedenen Manipulationen vorbereiten, um den Validatoren zu helfen, ein nachhaltiges Netzwerk zu starten. Darüber handelt dieser Artikel.

Der Start von Netzwerken, die auf Konsensmodellen wie "Proof-of-Stake" basieren, bei dem Validatoren durch Stimmen der Inhaber von Tokens des Systems bestimmt werden, ist eine recht spezifische Angelegenheit, da selbst der Start traditioneller, zentral gesteuerter Systeme mit Dutzenden und Hunderten Server eine an sich nicht einfache Aufgabe darstellt, wenn es darum geht, eine Blockchain mit den Bemühungen loyaler, aber unabhängiger Teilnehmer zu starten. Wenn in einem Unternehmen die Administratoren beim Start vollständigen Zugang zu allen Maschinen, Protokollen und dem allgemeinen Monitoring haben, lassen die Validatoren niemanden an ihre Server und ziehen es wahrscheinlich vor, ihre Infrastruktur selbst aufzubauen, da sie den Zugang zu den Hauptaktiva der Validatoren – den Stimmen – kontrolliert. Dieses Verhalten ermöglicht den Aufbau verteilter, sicherer Netze – die Unabhängigkeit der genutzten Cloud-Anbieter, virtuellen und „Bare-Metal“-Server, verschiedene Betriebssysteme; all dies macht Angriffe auf ein solches Netzwerk extrem ineffizient – es wird zu viel unterschiedliche Software verwendet. Zum Beispiel gibt es in Ethereum zwei Hauptimplementierungen des Nodes, in Go und in Rust, und ein Angriff, der für eine Implementierung wirksam ist, funktioniert nicht für die andere.

Daher müssen alle Prozesse zur Einführung und Betrieb von Blockchains so organisiert sein, dass jeder Validator oder sogar eine kleine Gruppe von Validatoren ihre Computer jederzeit einfach aus dem Fenster werfen und gehen kann, ohne dass etwas kaputt geht, und die verbleibenden Validatoren müssen weiterhin effektiv das Netzwerk unterstützen und neue Validatoren anschließen. Bei der Einführung eines Netzwerks, bei dem ein Validator in Europa, der zweite in Südamerika und der dritte in Asien ist, ist es ziemlich schwierig, die koordinierte Arbeit mehrerer Dutzend unabhängiger Gruppen zu erreichen und sie für das Ergebnis zu gewinnen.

Validatoren

Stellen wir uns den Start einer hypothetischen modernen Blockchain vor (der größte Teil des beschriebenen passt für Blockchains der modernen Familie wie Ethereum, EOS, Polkadot, Cosmos und andere, die Konsens durch proof-of-stake vorsehen). Die Hauptakteure solcher Blockchains sind Validator-Teams, die ihre eigenen unabhängigen Server installieren, die neue Blöcke validieren und erzeugen und die Belohnungen erhalten, die das Netzwerk für diejenigen vorsieht, die am Konsens teilnehmen. Um neue Netzwerke zu starten, sind mehrere Dutzend Validatoren erforderlich (so viele können derzeit mehr oder weniger effektiv in Sekunden Konsens erreichen), weshalb das Projekt die Registrierung ankündigt, bei der Validatoren öffentliche Informationen über sich selbst mit Nutzern teilen, um sie davon zu überzeugen, dass sie das eingeführte Netzwerk qualitativ betreuen werden.

Validatorentum ist ein Geschäft, das es ermöglicht, das potenzielle Einkommen eines Validators sehr genau zu bewerten, schnell Ressourcen zwischen Projekten zu verlagern, und im Falle des Erfolgs des gewählten Netzwerks kann der Validator als vollwertiges Mitglied der DAO und verantwortliche Person das Projekt weiterentwickeln oder einfach einen hervorragenden technischen Service für völlig transparente, redlich verdiente Gelder bereitstellen. Bei der Berechnung der Belohnung für Validatoren versuchen die Projekte, die Ausgaben der Validatoren zu berücksichtigen und die Belohnung für Blöcke so zu gestalten, dass dieses Geschäft profitabel ist, aber gleichzeitig die Validatoren nicht in die Lage versetzt, die Wirtschaft zu zerstören, indem sie sie mit Geld überhäufen und andere Nutzer des Netzwerks dadurch verlieren.

Das Geschäft mit Validatoren erfordert eine hohe Zuverlässigkeit der Dienste, was einen hohen Ausbildungsgrad von DevOps und Entwicklern sowie kostspielige Rechenressourcen bedeutet. Selbst ohne die Notwendigkeit, Hashes in Proof-of-Work-Netzwerken zu minen, ist ein Blockchain-Knoten ein großer Dienst, der viel Speicher benötigt, viele Berechnungen verbraucht, Daten validiert, auf die Festplatte schreibt und große Datenmengen ins Netzwerk überträgt. Zur Speicherung von Transaktionslogs und Blockchains für Blockchains mit mehreren Tausend kleinen Transaktionen pro Block sind derzeit Speicher von 50 GB und mehr erforderlich, wobei es sich um SSDs handeln muss. Die Zustandsdatenbanken von Blockchains, die Smart Contracts unterstützen, können bereits über 64 GB RAM überschreiten. Server mit den erforderlichen Spezifikationen sind ziemlich teuer, ein Ethereum- oder EOS-Knoten kann zwischen 100 und 200 $/Monat kosten. Fügen Sie dazu die steigenden Löhne für die rund um die Uhr arbeitenden Entwickler und DevOps hinzu, die während des Starts auch nachts Probleme beheben, da sich einige Validatoren leicht auf der anderen Hemisphäre befinden können. In guten Momenten kann der Besitz eines Validator-Knotens jedoch ein erhebliches Einkommen generieren (im Fall von EOS bis zu 10.000 $ pro Tag).

Das Validatorenwesen ist nur eine der neuen potenziellen IT-Rollen für Unternehmer und Unternehmen. Mit der Entwicklung immer raffinierterer Algorithmen durch Programmierer, die Ehrlichkeit belohnen und Betrug sowie Diebstahl bestrafen, entstehen Dienste, die wichtige Daten veröffentlichen (Orakel), die Aufsicht ausüben (Slash-Depots und Bestrafung von Betrügern durch die Veröffentlichung von Beweisen für Betrug), Streitbeilegungsdienste, Versicherungen und Optionen, sogar die Abfallentsorgung ist ein potenziell großer Markt in Systemen für Smart Contracts, in denen für die Speicherung von Daten gezahlt werden muss.

Probleme beim Starten von Blockchains

Die Offenheit der Blockchain, die eine freie Teilnahme am Betrieb von Netzwerken aus allen Ländern ermöglicht und die einfache Anbindung an das Netzwerk für jeden Script-Kiddie über Anleitungen auf GitHub, ist nicht immer ein Vorteil. Die Jagd nach einem neuen Token zwingt Validierer oft dazu, „eine neue Münze beim Start zu minen“, in der Hoffnung auf Kurssteigerungen und die Möglichkeit, schnell das Verdiente zu verkaufen. Das bedeutet auch, dass jeder Ihr Validierer sein kann, sogar anonym, für den ebenso wie für andere Validierer abgestimmt werden kann (allerdings wird es anonymen Personen schwerfallen, Stimmen von Stakeholdern zu sammeln, sodass wir die schrecklichen Geschichten über anonyme Kryptowährungen den Politikern überlassen). Dennoch

Das Team des Projekts hat die Aufgabe, irgendwie diejenigen in sein Netzwerk zu gewinnen, die in der Zukunft eine stabile Funktionalität der Nodes gewährleisten können, die sich mit Sicherheit auskennen, schnell Probleme lösen, mit anderen Validierern kooperieren und gemeinsam handeln können – von diesen Eigenschaften hängt die Qualität des Tokens, in den die Teilnehmer des Netzwerks ihre Zeit und Ressourcen investieren möchten, entscheidend ab. Angemessene Gründer sind sich der Risiken bewusst und verstehen gut, dass sie bei der Einführung einer Software in diesem Umfang unvermeidlich auf Fehler im Code und in der Konfiguration der Nodes stoßen werden und dass die Stabilität des Netzwerks davon abhängt, wie gut die Entwickler und Validierer solche Probleme gemeinsam lösen.

Das Team ist bereit, im Mainnet für beliebige Validierer abzustimmen, nur wüsste man gerne, für wen, welche sind gute? Mit dem größten Portfolio? Das hat momentan kaum jemand. Nach den Profilen des Teams auf LinkedIn? Erfahrene DevOps- oder Sicherheitsspezialisten werden Ihnen keine Profile auf LinkedIn zur Verfügung stellen. Nach Aussagen im Chat, Posts und der Unterstützung anderer in der Vorbereitungsphase? Gut, aber subjektiv und ungenau.

In solchen Bedingungen bleibt nur eines – das, was gut die Probleme aller löst – ein Spiel, in dem die besten Validierer ausgewählt werden können, vor allem, um die Blockchain auf ihre Widerstandsfähigkeit zu testen und einen umfassenden Stresstest der Blockchain unter Bedingungen aktiver Nutzung, Änderungen des Konsenses und dem Auftauchen und der Behebung von Fehlern durchzuführen. Diese Prozedur wurde erstmals als Spiel von den Jungs des Projekts Cosmos präsentiert, und diese Idee ist sicherlich eine hervorragende Möglichkeit, das Netzwerk auf den Start eines zuverlässigen und fehlertoleranten Mainnets vorzubereiten.

Spiel der Validierer

Ich werde das Spiel der Validatoren so beschreiben, wie wir es für die Blockchain DAO.Casino (DAOBet) entworfen haben, basierend auf dem Fork EOS, der Haya genannt wird und einen ähnlichen Governance-Mechanismus hat – Validatoren werden durch Abstimmungen von jedem Konto gewählt, wobei ein Teil des Balances, mit dem für den Validator abgestimmt wird, eingefroren wird. Jedes Konto, das das Haupttoken BET auf dem Balance hat, kann für den gewählten Validator mit beliebigem Teil seines Balances abstimmen. Die Stimmen werden summiert und auf dieser Grundlage wird eine Top-Liste der Validatoren erstellt. In verschiedenen Blockchains wird dieser Prozess unterschiedlich organisiert, und in der Regel unterscheidet sich genau an dieser Stelle die neue Blockchain vom Elternteil, und man muss sagen, dass in unserem Fall EOS das „OS“ in seinem Namen vollständig rechtfertigt, wir verwenden EOS tatsächlich als Grundbetriebssystem für die Bereitstellung einer modifizierten Version der Blockchain für die Aufgaben von DAOBet.

Ich werde einzelne Probleme beschreiben und wie sie im Rahmen des Spiels gelöst werden können. Stellen wir uns ein Netzwerk vor, in dem dein Server offen angegriffen werden kann, wo du, um die Position des Validators halten zu können, ständig mit dem Netzwerk interagieren musst, deinen Validator fördern und sicherstellen musst, dass er Blöcke produziert und diese rechtzeitig zu den anderen Validatoren geliefert werden, sonst wird der Validator aus der Liste geworfen.

Wie wählt man die besten Gewinner aus?

Die wichtigste technische Anforderung an das Spiel ist, dass seine Ergebnisse öffentlich überprüfbar sein müssen. Das bedeutet, dass die Ergebnisse des Spiels: TOP Gewinner, strikt auf der Grundlage von Daten gebildet werden müssen, die von jedem Teilnehmer überprüft werden können. In einem zentralisierten System könnten wir die „Uptime“ jedes Validators messen und diejenigen belohnen, die am längsten online waren oder den maximalen Netzverkehr durch sich geleitet haben. Man könnte Daten zur CPU- und Speicherauslastung sammeln und diejenigen belohnen, die sich verdient haben. Aber jede solche Datensammlung bedeutet die Existenz eines zentralen Sammelpunktes, zudem sind alle Knoten unabhängig und können sich verhalten, wie sie wollen, und beliebige Daten senden.

Deshalb ist es eine natürliche Lösung, dass die Gewinner anhand von Daten aus der Blockchain bestimmt werden, da man sehen kann, welche Validatoren welchen Block erzeugt haben und welche Transaktionen darin enthalten sind. Wir haben diese Zahl Validator Points (VP) genannt, und deren Erwirtschaftung ist das Hauptziel der Validatoren im Spiel. In unserem Fall ist die einfachste, leicht öffentlich überprüfbare und effektive Metrik für die „Nützlichkeit“ eines Validators VP = die Anzahl der vom Validator innerhalb eines bestimmten Zeitraums erzeugten Blöcke.

Diese einfache Wahl ist darauf zurückzuführen, dass die Governance in EOS bereits viele aufkommende Probleme berücksichtigt, da EOS der Nachfolger von drei Generationen funktionierender Blockchains mit umfangreicher Erfahrung in der komplexen Netzwerkverwaltung ist. Praktisch jedes Problem, das ein Validator mit dem Netzwerk, dem Prozessor oder der Festplatte hat, führt nur zu einem Problem — er signiert weniger Blöcke und erhält weniger Bezahlung für seine Arbeit, was uns wieder einfach zur Anzahl der signierten Blöcke führt — für EOS ist das eine hervorragende und einfache Lösung.

Bei anderen Blockchains kann die Methode zur Berechnung der Validator Points unterschiedlich sein, zum Beispiel für pBFT-basierte Konsensmechanismen (Tendermint/Cosmos, Aura-Konsens aus Parity Substrate), bei denen jeder Block von mehreren Validierern signiert werden muss. Es macht Sinn, separate Signaturen der Validierer und nicht die Blöcke zu zählen. Möglicherweise ist es auch sinnvoll, nicht abgeschlossene Konsensrunden zu berücksichtigen, die Ressourcen anderer Validierer beanspruchen. Insgesamt hängt dies stark vom Typ des Konsenses ab.

Wie man reale Betriebsbedingungen modelliert

Die Aufgabe der Gründer besteht darin, die Validatoren unter realitätsnahen Bedingungen zu überprüfen, ohne dabei eine zentrale Kontrolle zu haben. Dieses Problem kann mit einem Faucet-Vertrag gelöst werden, der gleichmäßige Mengen des Haupt-Tokens an die Validatoren und alle Interessierten verteilt. Um Tokens auf das Guthaben zu erhalten, muss eine Transaktion gebildet werden, und es muss sichergestellt werden, dass das Netzwerk sie in einen Block einfügt. Auf diese Weise muss der Validator seinen Saldo kontinuierlich mit neuen Tokens auffüllen und für sich selbst stimmen, um sich in den TOP zu bringen. Diese Tätigkeit erzeugt eine ständige Belastung für das Netzwerk, und die Parameter können so angepasst werden, dass der Anfragefluss ausreichend ernsthaft für einen vollständigen Netzwerktest ist. Daher sollten Sie den Faucet-Vertrag im Voraus planen, da er ein wichtiges Instrument für den Netzwerkstart darstellt, und beginnen Sie frühzeitig mit der Anpassung seiner Parameter.

Die Anforderung von Tokens über den Faucet und die Abstimmung der Validatoren simuliert dennoch nicht vollständig fair die Funktionsweise der Blockchain, insbesondere in stark ausgelasteten Modi. Daher wird das Blockchain-Team irgendwie zusätzliche Benchmarks erstellen müssen, um das Netzwerk zu belasten. Dabei spielen speziell im Voraus erstellte Smart Contracts eine besondere Rolle, die es ermöglichen, ein bestimmtes Teilsystem zu testen. Zum Testen des Speichers speichert der Vertrag zufällige Daten in der Blockchain, und um die Netzwerkressourcen zu überprüfen, erfordert der Testvertrag ein großes Volumen an Eingabedaten, wodurch das Transaktionsvolumen aufgebläht wird – indem das Team zu beliebigen Zeitpunkten solche Transaktionen initiiert, testet es gleichzeitig die Stabilität des Codes und die Widerstandsfähigkeit der Validatoren.

Ein separates Thema ist die Aktualisierung des Knotencodes und die Durchführung von Hardforks. Es ist erforderlich, dass Validatoren einen Aktionsplan haben, der bereits im Validatoren-Spiel getestet wurde, falls ein Fehler, eine Schwachstelle oder eine Verschwörung von böswilligen Validatoren auftritt. Man könnte Anreize für eine schnelle Anwendung des Hardforks schaffen, beispielsweise durch eine Strafe für alle Validatoren, die die neue Knoten-Code-Version noch nicht angewendet haben, aber das ist schwierig umzusetzen und kompliziert die Berechnung. Eine Notfallsituation für die Anwendung eines Hardforks kann künstlich simuliert werden, indem die Blockchain an einem bestimmten Block „unterbrochen“ wird. Die Blockproduktion wird gestoppt, und letztendlich profitieren diejenigen, die sich als Erste anschalten und beginnen, Blöcke zu signieren, sodass VP basierend auf der Anzahl der signierten Blöcke hier gut geeignet ist.

Wie man die Teilnehmer über den Zustand des Netzwerks informiert und Fehler behebt

Trotz des Misstrauens zwischen den Validatoren ist es für alle vorteilhaft, rechtzeitig aktuelle Informationen über den Zustand des Netzwerks zu erhalten, um Entscheidungen schneller zu treffen. Daher richtet das Projektteam einen Service zur Sammlung und Visualisierung zahlreicher Metriken von Validator-Servern ein, der es ermöglicht, die Situation gleichzeitig für das gesamte Netzwerk zu sehen und schnell zu bestimmen, was vor sich geht. Es ist auch für Validatoren und das Projekt vorteilhaft, wenn das Projektteam entdeckte Fehler zügig behebt. Daher macht es Sinn, neben der Sammlung von Metriken auch sofortige Protokoll- und Fehlerdaten von den Validatormaschinen auf eine dem Blockchain-Entwicklungsteam zugängliche Maschine zu sammeln. Niemand hat Interesse daran, Informationen zu verzerren, daher werden diese Dienste von dem Projektteam betrieben und sind vertrauenswürdig. Es lohnt sich, systemische Metriken von den Validatoren zu sammeln, insbesondere die wichtigsten Metriken der Blockchain selbst — für DAOBet sind das die Finalisierungszeit und das Abseits des letzten finalisierten Blocks. Dadurch sieht das Team den Anstieg des Speicherverbrauchs an den Knoten bei der Ausführung des Benchmarks sowie Probleme einzelner Validatoren.

Wichtige Punkte zur Durchführung des Validatorenspiels

Wie sich herausstellte, wenn Sie den Validatoren offiziell erlauben möchten, gegeneinander zu kämpfen (inoffiziell können sie das ohnehin tun) – müssen Sie dies gesondert rechtlich als Sicherheitstest formulieren, da im Gesetz einiger Länder DDoS- oder Netzwerkangriffe bestraft werden können. Ein weiteres wichtiges Thema ist, wie die Validatoren belohnt werden sollen. Die natürlichen Preise sind die Token des Projekts, die ins Mainnet übertragen werden, aber eine massenhafte Verteilung von Token an jeden, der einen Knoten starten kann, ist ebenfalls nicht die beste Lösung. Wahrscheinlich müssen Sie zwischen zwei extremen Optionen abwägen:

Den gesamten Preisfonds gemäß den verdienten VP zu verteilen
das ist sehr demokratisch und erlaubt es allen, die Zeit und Ressourcen in das Spiel der Validatoren investiert haben, etwas zu verdienen
aber zieht zufällige Menschen ohne die nötige Infrastruktur ins Spiel

Den Preisfonds an die besten N-Validatoren basierend auf den Ergebnissen des Spiels zu verteilen
Die Gewinner werden wahrscheinlich die Validatoren sein, die am stabilsten während des Spiels waren und sehr entschlossen auf den Sieg eingestellt sind
Einige Validatoren werden nicht teilnehmen wollen, da sie ihre Gewinnchancen niedrig einschätzen, insbesondere wenn erfahrene Validatoren unter den Teilnehmern sind

Welcher Option der Vorzug gegeben werden soll, liegt bei Ihnen

Es gibt noch einen weiteren Punkt – es ist keineswegs sicher, dass Dutzende von Validatoren Ihrem Aufruf zur Teilnahme an dem Spiel folgen werden, und von denen, die es versuchen, installieren und starten nicht alle einen Knoten – normalerweise ist die Dokumentation zu diesem Zeitpunkt bei Projekten recht spärlich, Fehler kommen vor, und die Entwickler, die unter Zeitdruck arbeiten, antworten nicht immer schnell auf Fragen. Daher sollte man auch vor dem Start des Spiels Vorkehrungen treffen, falls die erforderliche Anzahl von Validatoren nicht erreicht wird. In diesem Fall starten am Anfang des Spiels die fehlenden Validatoren mit dem Team des Projekts, nehmen am Konsens teil, können aber nicht die Gewinner sein.

Fazit

Abschließend habe ich versucht, aus dem oben Beschriebenen eine Liste der Punkte zusammenzustellen, die erdacht, getan und gestartet werden müssen, um das Spiel der Validatoren effektiv durchzuführen

Was nötig ist, um ein richtiges Spiel der Validatoren zu starten:
Entwickeln Sie Ihre eigene Blockchain 🙂

  • Erstellen und starten Sie eine Weboberfläche und stellen Sie eine CLI für die Abstimmung über Validatoren bereit
  • Sorgen Sie dafür, dass die Metriken von einem laufenden Validator-Knoten an einen zentralisierten Dienst (zum Beispiel Prometheus) gesendet werden können.
  • Einen Server für die Metriksammlung (Prometheus + Grafana) für das Validatorenspiel aufsetzen.
  • Überlegen, wie die Validator-Punkte (VP) berechnet werden.
  • Ein öffentliches Skript entwickeln, das die VP des Validators basierend auf den Daten aus der Blockchain berechnet.
  • Eine Web-Oberfläche entwickeln, um die besten Validatoren und den Status des Validatorenspiels anzuzeigen (wie viel Zeit bis zum Ende bleibt, wer wie viele VP hat usw.).
  • Entwickeln und automatisieren Sie den Start einer beliebigen Anzahl eigener Knoten, planen Sie den Prozess der Anbindung von Validatoren an das Spiel (wann und wie man seine Knoten abmeldet, Stimmen für sie abgibt und zurückzieht).
  • Berechnen, wie viele Tokens vergeben werden müssen und einen Vertrag-Faucet entwickeln.
  • Ein Benchmark-Skript erstellen (Tokenübertragungen, massiver Einsatz von Speicher, massiver Netzwerkeinsatz).
  • Alle Teilnehmer in einem Chat für eine schnelle Kommunikation versammeln.
  • Die Blockchain etwas früher als den Beginn des Spiels starten.
  • Auf den Startblock warten, das Spiel beginnen.
  • Das Netzwerk mit mehreren Transaktionsarten testen.
  • Einen Hardfork durchführen.
  • Die Liste der Validatoren ändern.
  • Punkte 13, 14, 15 in unterschiedlicher Reihenfolge wiederholen, um die Stabilität des Netzwerks aufrechtzuerhalten.
  • Auf den finalen Block warten, das Spiel beenden, die VP zählen.

Es ist zu sagen, dass das Validatorenspiel eine neue Geschichte ist und nur ein paar Mal durchgeführt wurde, daher sollte dieser Text nicht als fertige Anleitung betrachtet werden. Es gibt keine Analogien im modernen IT-Geschäft – stellen Sie sich vor, die Banken konkurrieren vor dem Start des Zahlungssystems darum, wer die Kundenübertragungen besser durchführen kann. Traditionelle Ansätze helfen Ihnen kaum dabei, große dezentralisierte Netzwerke zu schaffen, also lernen Sie neue Geschäftsmodelle kennen, führen Sie Ihre Spiele durch, bestimmen Sie die Verdienten, belohnen Sie sie und lassen Sie Ihre verteilten Systeme schnell und stabil arbeiten.

Quelle: habr.com

60GB SSD 8Gb DDR4