Safe Network Entwickler Update 🇩🇪 23. Februar 2023

Dies ist eine maschinelle Übersetzung. Das Original in Englisch ist hier: Update 23 February, 2023

Was eine zuverlässige dezentrale und verteilte Vernetzung erschwert, ist vor allem Asynchronität: Wir können einfach nicht garantieren, dass „Nachricht A“ vor „Nachricht B“ ankommt, oder ob sie überhaupt ankommt. Mit ein paar Knoten ist das in Ordnung, aber in einem Abschnitt mit Dutzenden von Knoten ist die Anzahl möglicher Ereignis- und Nachrichtenkombinationen riesig und eine echte Herausforderung, darüber nachzudenken. Diese Woche werfen wir einen Blick auf Stateright, ein sehr nützliches Tool zum Testen unserer algorithmischen Annahmen, da es alle verschiedenen Möglichkeiten ausprobiert.

Allgemeiner Fortschritt

@bochaco testet die Reaktion des Netzwerks auf verschiedene Chunk-Größen, einschließlich der Handhabung von Datenzuordnungen. Kleine Chunks sind schneller zu übertragen, aber sie ergeben viel größere Datenkarten, also müssen wir sie rekursiv selbst verschlüsseln, bis sie kleiner als „chunk_size“ sind. Es gibt auch andere eher technische Kompromisse, aber im Grunde suchen wir nach einer optimalen Größe für unsere Chunks.

@anselme und @dirvine sehen sich ein „Grund“-Feld für DBC SpentProofs an – den Nachweis einer Transaktion. Dies ist ein neues Feld, das den Grund der Ausgabe enthält. Es könnte der Hash der bezahlten Chunks oder eine Bestellnummer oder eine andere Art von Etikett sein. Das Wichtigste ist, dass die Ältesten feststellen können, ob es gültig ist oder nicht (wenn es zum Beispiel die Zahlung für einen einzelnen Chunk ist, stimmt der Tx mit dem Speicherpreis für die Daten überein?).

Warum tun Sie das? Vereinfachung und Sicherheit. Es könnte bedeuten, dass wir es überflüssig machen können, dass Älteste Daten unterschreiben müssen. Es besteht also kein Risiko mehr für einen „alten Schlüsselangriff“, bei dem ein Angreifer, wenn er an einen früheren Schlüssel gelangt, diesen zur Validierung von Daten verwenden könnte. Mit diesem Design werden die Unterschriften der alten Ältesten nicht mehr gültig sein.

Der Ablauf:

  • Der Kunde bittet um ein Angebot zum Speichern von Daten: 1 SNT bitte
  • Der Kunde stellt einen 1 SNT DBC für die Ältesten mit einem Verweis auf die Daten als DBC-Grund erneut aus
  • Der Client teilt den Ältesten mit, dass er ausgegeben wird, indem er SpentBook-Einträge für diesen DBC sendet (die Einträge enthalten den „Grund“)
  • Älteste überprüfen diesen Grund und aktualisieren ihre SpentBooks
  • Der DBC wird nun offiziell aus Vernunft ausgegeben
  • Der Kunde bittet die aktuellen Ältesten um eine signierte Kopie dieses SpentBook-Eintrags
  • Sobald der Client genügend Signaturen erhält, kann er die Daten speichern, indem er zusammen mit den Daten eine signierte Kopie des aktuellen Abschnitts des SpentBook-Eintrags bereitstellt
  • Die Ältesten prüfen, ob der signierte Abschnitt (was bedeutet, dass die meisten Ältesten denselben Grund sehen) im SpentBook-Eintrag auf die Daten verweist und diese speichert.

Wir entfernen weiterhin Lese-/Schreibsperren im Code, um die Leistung zu verbessern und zu vereinfachen (kein Multithreading, es sei denn, dies ist unbedingt erforderlich). @joshuef arbeitet daran, the big one rund um den node-Status selbst zu entfernen.

Wie einige aufmerksame Community-Mitglieder bereits bemerkt haben, modelliert @oetyng eine vereinfachte Version eines Zahlungsnetzwerks.

@chriso arbeitet an der Verbesserung von Aspekten der CLI, einschließlich der Überarbeitung des Update-Befehls.

Und @davidrusu hat sich mit Stateright beschäftigt.

Staatsrecht

Stateright ist eine Rust-Bibliothek, die eine große Hilfe beim Testen von Annahmen verspricht. Im Grunde ist es ein Modellprüfer, der jede mögliche Kombination von Ereignissen durchläuft, um zu prüfen, ob eine angegebene Annahme gültig ist.

Dezentralisierte Netzwerke sind aus verschiedenen Gründen schwer zu modellieren: Knoten können sterben, Knoten können byzantinisch sein, Nachrichten können sich verzögern, Nachrichten können in der falschen Reihenfolge oder gar nicht ankommen, Sie können unerwartete Race Conditions bekommen usw. usw. Stateright hilft wir arbeiten all diese Möglichkeiten durch.

Als Beispiel möchten wir vielleicht wissen, ob DBC Doublespend mit unserem aktuellen Design möglich ist. Wir modellieren die Annahme „Doublespending ist nicht möglich“ im Code, fügen das unserer bestehenden Codebasis hinzu und setzen Stateright darauf. Stateright durchläuft dann jede einzelne Kombination, die in unserem Algorithmusmodell zulässig ist. Es wird Nachrichten verzögern, zwei Älteste gleichzeitig scheitern lassen und Ereignisse aus der Reihe bringen. Sobald es alle Möglichkeiten ausgeschöpft hat, ohne doppelt ausgeben zu können, erhalten wir ein schönes grünes Häkchen - unsere Annahme ist gültig. Jeder gefundene Zustand war richtig.

Wenn etwas fehlschlägt, leitet es uns optional zu einer GUI um, wo wir die Meldungen durchgehen können, die zum Fehler geführt haben, und herausfinden, was das Problem war.

Das Tolle ist, es versucht alles, nicht nur eine Teilmenge möglicher Kombinationen. In dezentralen Netzwerken sind es die Grenzfälle, die Sie umbringen, und bei Stateright können Sie im Gegensatz zu anderen Methoden, die Stichproben verwenden, sicher sein, dass sie alle abgedeckt sind. Es kann Millionen von Kombinationen geben, die durchgespielt werden müssen, aber solange wir die Annahmen richtig geschrieben haben, geht es ziemlich schnell.

Die andere Sache ist, dass es eine große Hilfe bei der iterativen Korrektur unseres Codes ist. Es sind ein paar zusätzliche Funktionen, die wir in unsere Produktionscodebasis aufnehmen können, um Modelle zu überprüfen. Wir werden dies höchstwahrscheinlich verwenden, um bestimmte Teile des Produktionscodes zu schreiben und dies in einem Modell zu tun. Wenn das Modell zufrieden ist, nehmen wir diesen Produktionscode und übertragen ihn in Safe.

Mehr erfährst du hierut Stateright in den Dokumenten oder in diesem Video - obwohl es ein Intro ist ziemlich technisch.

Besser noch, hier ist ein Link zu unseren aktuellen Experimenten. Für die Neugierigen/Interessierten/Neugierigen klonen Sie einfach dieses Repo GitHub - maidsafe/stableset-experiments. Wir verwenden den Master-Branch von Stateright, also müssen Sie diesen auch in denselben Ordner klonen, in den Sie das Experiment-Repository geklont haben.

Beachten Sie jedoch, dass dies reale experimentelle Daten von Safe Labs sind und sich von Tag zu Tag erheblich ändern, wenn wir bei unserer Suche nach Einfachheit den Einsatz erhöhen.

Wenn Sie cargo run --release ausführen und dann http://127.0.0.1:3000 öffnen, sehen Sie die GUI. Sie können dann manuell auf die zu sendenden Nachrichten klicken oder auf „Bis zum Abschluss ausführen“ klicken, und es wird Ihnen angezeigt, wo sich aktuelle Probleme befinden. Seien Sie sich bewusst, dass wir dort fast immer Probleme haben, da wir iterativ testen, also seien Sie nicht entmutigt, es ist wirklich großartig :grins:.


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!