Safe Network Entwickler Update 🇩🇪 13. Januar 2022

Dies ist eine maschinelle Ăśbersetzung. Das Original in Englisch ist hier: Update 13 January, 2022

Es war fantastisch und erfreulich zu sehen, dass das neueste Community-Testnet so gut abschneidet :tada:. Vielen Dank an alle, die mitgemacht haben :beten: :beten: :beten:. Jetzt, da das Netzwerk stabiler wird, ist es an der Zeit, sich den Feinheiten der Datenspeicherung und -abfrage zu widmen, und unsere aktuellen Pläne sind unten aufgeführt. Wie immer versuchen wir, grundlegende Mechanismen zu entwickeln, die leicht und flexibel sind und die leicht erweitert werden können, um andere Funktionen wie Zahlungen und Landwirtschaft zu unterstützen. Am wichtigsten ist, dass sie keine Annahmen zur Netzwerksynchronisierung beinhalten.

Allgemeiner Fortschritt

@yogesh hat es geschafft, ein Logikproblem bei der Beförderung neuer Ältester zu beheben und die Anzahl der AE-Runden und folglich des Nachrichtenaustauschs von 150 auf 15 zu reduzieren. Dies ist eine beeindruckende 10-fache Optimierung, aber er ist sich sicher, dass hier noch mehr getan werden kann zu einem späteren Zeitpunkt. Er und @anselme sehen sich jetzt die im Hauptabschnitt unten beschriebenen Datenverarbeitungsprozesse an, wobei @qi_ma den Bestätigungs- und Fehlerbehandlungsprozess beim Client debuggt.

@Joshuef hat Bors eingeführt, ein Automatisierungssystem, das mehrere PRs gleichzeitig integriert, sodass es eine echte Zeitersparnis ist, wenn es funktioniert – was nach ein bisschen Fummelei das meiste ist die Zeit jetzt, glücklich. Er und @oetyng haben auch daran gearbeitet, Register zu Erwachsenen zu verschieben, Register-Puts zu vereinfachen und die derzeitige Anforderung zu lockern, Anfragen an alle sieben Ältesten zu senden (siehe unten).

@bochaco erwägt den Konsens der Routing-Flow-Mitgliedschaft und den Umgang mit Knoten, die offline gegangen sind, und wie dies in die DKG-Arbeit integriert wird, die @davidrusu und @danda vorangetrieben haben.

@chriso hat die CLI-Dokumentation aktualisiert und aufgeräumt, und @lionel.faber hat einige nicht bestandene End-to-End-Tests repariert und dabei das Testnet-Tool aktualisiert.

Datenverarbeitung

Das Herzstück des Safe-Netzwerks ist die Fähigkeit, Daten sicher, zuverlässig und dauerhaft zu speichern. Hier ist ein Überblick über unsere aktuellen Überlegungen zum Umgang mit Daten. Es berührt auch andere Themen, wie die UI/UX- und Liveness-Checks für die Erwachsenen, um zu sehen, ob sie tun, was sie sollten, und auch einen Mechanismus für Kunden, die für die Speicherung bezahlen.

GĂĽltige Daten

Im Netzwerk gespeicherte Daten mĂĽssen aus Sicht des Netzwerks valide sein. Sobald ein Datenelement gĂĽltig ist, kann es potenziell von jedem gespeichert werden.

Jedes Datenelement besteht aus einem Namen, dem Inhalt, einer Signatur und einem AbschnittsschlĂĽssel.

Der Name muss mit einem beliebigen gĂĽltigen (alten oder aktuellen) AbschnittsschlĂĽssel signiert sein, und der AbschnittsschlĂĽssel stammt aus dem Abschnitt, in dem er gespeichert wird.

Zur Erinnerung: Eine Sektion besteht aus sieben entscheidungsbefugten Ă„ltesten und vielen weiteren (60 bis 100) Erwachsenen, die Daten speichern und auf Anweisung der Ă„ltesten anbieten.

Die Daten werden von den vier Erwachsenen gespeichert, die seinem Namen (in XOR-Begriffen) am nächsten stehen.

Speicherkapazität

Um ein bisschen zurückzutreten, jeder Erwachsene ist eigentlich jemandes Computer. Es kann eine Cloud-VM, ein Heim-PC oder ein Raspberry Pi sein – oder sogar ein Smartphone, sofern es über genügend Speicherplatz verfügt. Aber wie viel Speicherplatz ist genug? Dies ist ein wenig schwierig, da die Anforderungen wahrscheinlich mit der Zeit wachsen werden.

Wenn einem Erwachsenen der Platz ausgeht, reagiert er nicht mehr richtig und wird bestraft (Verlust des Knotenalters). Wenn die Maschine auch für andere Dinge verwendet wird, wie z. B. Arbeit, Musik, Speichern von Fotos usw., würde eine Fülle von sicheren Chunks auch diese beeinträchtigen, daher ist es aus beiden Gründen wichtig, dass ihr Besitzer rechtzeitig gewarnt wird, wenn die Kapazität zur Neige geht - und dass das Netzwerk sich dessen auch bewusst ist.

Hier gibt es einige Möglichkeiten. Erstens setzen wir keine Begrenzung für die sichere Speicherung, messen einfach den verbleibenden Speicherplatz auf der Festplatte und warnen, wenn sie fast voll ist. Dies hat den Vorteil der Einfachheit, aber da die Speicherung ein Hintergrundprozess ist, könnte die volle Kapazität auf den Benutzer zukommen und ihn böse überraschen.

Eine andere Option wäre, den Benutzer einen festen Wert für das Speichervolumen auswählen zu lassen, wobei die vorgeschlagenen Mengen auf dem verfügbaren Speicherplatz zum Zeitpunkt des Starts des Knotens basieren und die Leute zu einer nützlichen Menge für das Netzwerk schubsen, vielleicht durch Hervorheben eines mittleren Werts.

56f116afea9b75720278c2479bdc3435e0ec9c5f

Dies gibt dem Benutzer mehr Kontrolle, aber der Nachteil ist, dass wir, geschweige denn sie, nicht wirklich wissen, was der ideale Wert ist und wie er sich im Laufe der Zeit ändern könnte.

Es ist möglicherweise möglich, eine dedizierte erweiterbare Partition nur für Safe Network-Daten zu erstellen, aber dies könnte angesichts der Vielzahl von Plattformen und Betriebssystemen komplex sein.

Das wird also noch diskutiert.

Erwachsene prĂĽfen, ob sie sich benehmen

Wenn der Client einige Daten erhalten möchte, stellt er eine Anfrage an die Ältesten in dem Abschnitt, der dem Namen der Daten am nächsten liegt. Jeder Älteste berechnet dann, welche vier Erwachsenen den Brocken halten sollten. Es führt Aufzeichnungen über die Betriebs-ID, die die Erwachsenen erfüllen müssen. Wenn die Ältesten eine Antwort von einem Erwachsenen mit einem Datenblock erhalten haben, wird die Vorgangs-ID vom Namen dieses Erwachsenen getrennt, da sie nun erfüllt wurde.

In diesem Stadium werden die Ältesten nach nicht reagierenden Erwachsenen suchen. Ein Erwachsener ist nicht ansprechbar, wenn er deutlich schlechter abschneidet als seine Nachbarn (die genaue Toleranz wird experimentell ermittelt). Nicht reagierende Erwachsene haben ein halbiertes Knotenalter und können umgesiedelt werden.

Ă„ltere Caching

Seit einiger Zeit denken wir darüber nach, wie wir Caching am besten einsetzen können. Für viele Vorgänge glauben wir, dass das Caching auf älteren Knoten die Leistung und das Datenmanagement verbessern wird, wenn Knoten offline gehen, sowohl als Sicherheitsmaßnahme gegen Datenverlust als auch als Möglichkeit, die Umverteilung von Chunks zu beschleunigen.

In diesem Schema speichern die Ältesten alle Daten, die in den Abschnitt gestellt oder von ihm abgerufen werden, in einem LRU-Cache (am längsten verwendet). Die Kapazität des Caches wird begrenzt, wobei Älteste bei Bedarf weniger kürzlich verwendete Daten löschen.

Was passiert, wenn wir einen Knoten befördern?

Wenn wir einen Erwachsenen zu einem Ältesten befördern, veröffentlicht der Erwachsene zunächst seine Daten für andere Erwachsene, und die Ältesten zeichnen die Chunks in ihrem LRU-Cache auf und entfernen bei Bedarf nach dem Zufallsprinzip alle, die ihre Größenbeschränkung überschreiten.

Was passiert beim Neustart?

Wenn ein Erwachsener neu startet oder umzieht, sendet er seine Chunks an die drei Ältesten, die dem Chunk-Namen am nächsten sind, und sie speichern so viel wie möglich in ihrem Cache. Die Ältesten wiederum lagern jeden Brocken für vier Erwachsene.

Älteste können Daten aus ihrem Cache löschen, aber Erwachsene können keine Daten löschen. Erwachsene melden ihr Niveau kontinuierlich an die Ältesten, und sobald sie zu 90 % voll sind, werden keine Daten mehr an sie gesendet.

Speichern von Daten als Client

Wenn ein Kunde Daten speichert, sendet er diese an drei Älteste, um sie zu unterzeichnen. Warum drei? Denn unter ihnen ist garantiert ein ehrlicher Knoten, da wir davon ausgehen, dass es in einem Abschnitt von sieben nicht mehr als zwei fehlerhafte Älteste gibt. Bei einem ehrlichen Ältesten erhält der Kunde, solange die Daten gültig sind, schließlich eine übergroße Mehrheit der Signaturanteile (5) von den ehrlichen Ältesten der Sektion, was bedeutet, dass sie gespeichert werden können. Sobald ein Knoten eine Bestätigung mit einer Netzwerksignatur zurückgesendet hat, kann dieser Chunk als gespeichert betrachtet werden.

Daten als Client abrufen

Da Chunks signiert und selbstvalidierend sind, benötigt der Client bei unveränderlichen Daten nur einen Chunk. Es spielt keine Rolle, ob es vom Netzwerk signiert ist oder nicht, da es unveränderlich ist.

Veränderliche (CRDT) Daten sind etwas komplexer. In diesem Fall ist der Container abschnittsweise signiert, der Inhalt wird jedoch nur vom Client (dem Dateneigentümer) signiert. Auf diese Weise validieren sich die Daten selbst und sind schwer zu korrumpieren, aber ein böswilliger oder fehlerhafter Knoten könnte sich weigern, den Inhalt zu liefern oder dem Client alte Inhalte zu geben.

Der Kunde möchte also sicherstellen, dass er so viele Daten wie möglich erhält, was bedeutet, dass er mindestens eine Superminorität von Ältesten (drei) um die Daten bitten sollte. Je mehr Kopien es hat, desto schneller kann es diese Kopien zusammenführen, um die neueste Version der Daten wiederherzustellen.

FĂĽr die Lagerung bezahlen

Dieses Modell eignet sich gut fĂĽr die Verwendung von DBCs zur Vorauszahlung von Speicherplatz. Wenn ein Kunde anfordert, dass 100 Chunks gespeichert werden, kommen die Ă„ltesten jeweils mit einem Preis fĂĽr die Signierung der Namen dieser Chunks zurĂĽck.
Die Zitate der Ältesten sollten die gleichen sein. Jedes Ältesten-Zitat, das völlig anders ist, würde auf einen fehlerhaften Ältesten hindeuten, und der Kunde könnte diese Tatsache an den Abschnitt zurückmelden, damit sie behandelt werden kann.

Der Kunde zahlt dann den angegebenen Betrag, bevor er seine Daten speichert.


NĂĽtzliche Links

FĂĽhlen Sie sich frei, unten mit Links zu Ăśbersetzungen dieses Entwicklungsupdates zu antworten, und die Moderatoren werden sie hier hinzufĂĽgen.

Als Open Source-Projekt sind wir immer auf der Suche nach Feedback, Kommentaren und Community-Beiträgen. Seien Sie also nicht schüchtern, machen Sie mit und lassen Sie uns gemeinsam das sichere Netzwerk erstellen!