Wenn Sie in der Lage sind, zu spenden und zum Haven-Projekt beizutragen, bitte klicken Sie hier. Danke schön.
Haven Deep Dive: Den xUSD-Code knacken
Neac (Haven's Protocol Lead) und ich haben die letzten Monate damit verbracht, uns auf den Mainnet-Start von xUSD vorzubereiten. Während unserer Tests haben wir uns darauf konzentriert, wie xUSD-Börsen am sichersten überprüft werden können, um einen reibungslosen Start und langfristigen Erfolg für diese erste private Stallmünze sicherzustellen.
Diese Arbeit hat zu einer umfassenden Neugestaltung der Codebasis von Haven geführt. Wie wir in unseren Testnetzen erfahren haben, erwies sich die Struktur von Monero als einzigartig herausfordernd für das Signieren und Überprüfen von xUSD-Transaktionen. Es war langweilig, langsam und manchmal geradezu frustrierend. Wir sind jedoch stolz darauf, eine innovative Lösung entwickelt zu haben, die die Genauigkeit, Zuverlässigkeit und den Datenschutz von xUSD-Transaktionen jetzt und in Zukunft gewährleistet. Im Folgenden finden Sie einen tiefen Einblick in den Prozess, der uns zu dieser Lösung geführt hat.
Haven's erstes Testnetz berechnete einen ungefähren Wert, um den Benutzern mitzuteilen, wie viel xUSD sie für das XHV erhalten würden, das sie zum Austausch anfordern. Dies liegt daran, dass Benutzer in Monero (und Cryptonote) beim Senden einer Transaktion eine senden Engagement zu einer Reihe von Münzen: sowohl Ein- als auch Ausgänge. Diese Ein- und Ausgänge müssen gleich sein, sonst schlägt die Transaktion immer fehl.
Diese Monero-Struktur wurde zu einem Problem für Haven, als wir mit der Implementierung von xUSD-Austauschen begannen. Anfangs konnten wir das nicht garantieren Finale Die Menge des ausgetauschten xUSD würde der Menge entsprechen ungefähr Menge an xUSD, die vor der Übermittlung einer Transaktion angegeben wurde. Dies liegt daran, dass sich der XHV-Preis dynamisch ändert. Der XHV-Preis (und damit der xUSD-Wechselkurs) kann sich zwischen dem Zeitpunkt der Übermittlung einer Transaktion durch einen Benutzer und der Bestätigung der Transaktion ändern.
Der erste Weg, um eine Lösung für diese Herausforderung zu finden, bestand darin, nicht mehr nach der Gleichheit von Inputs und Outputs zu suchen. Um Manipulationen zu verhindern, musste der Absender jedoch keinen falschen Betrag angeben können. Deshalb haben wir beschlossen, diesen Schritt vollständig aus den Händen des Absenders zu nehmen und diese Verantwortung dem Bergmann zu übertragen.
Diese Lösung, implementiert in a nachfolgendes Testnetz, fügte eine Verzögerung bei der Angabe des genauen xUSD-Wechselkurses hinzu. Der Absender musste warten, bis ein Block abgebaut war, und der Bergmann musste den Wechselkurs in den Blockheader aufnehmen. Es gab jedoch Löcher in dieser Lösung - böse.
Stellen Sie sich einen gegnerischen Angreifer vor, der sowohl über das Geld als auch über das Wissen über diesen Teil des Haven-Codes verfügt. Nachdem sie die Infrastruktur eingerichtet haben, um 51% des Haven-Hash zu erhalten, können sie sowohl Miner als auch Absender werden und somit ihre eigenen xUSD-Wechselkurse festlegen. Diese Möglichkeit war, sagen wir, suboptimal!
Also in der nächstes TestnetzWir haben beschlossen, die Verantwortung wieder auf den Absender zu verlagern, aber nur, damit dieser den letzten verifizierten Preisdatensatz, der bereits in der Kette von Haven enthalten ist (den Preisdatensatz aus dem oberen Block), angeben kann, welchen Block er in der Transaktion verwendet hat. Dies konnte von Bergleuten und Dämonen überprüft und verifiziert werden, die auch überprüfen konnten, ob die Ein- und Ausgänge nicht in Münzen, sondern im Dollarwert (kritisch für xUSD) gleich waren.
Diese Wertnachweis wurde der Schlüssel zum Erfolg von Haven. Das oben beschriebene Modell erwies sich jedoch auch als anfällig für Angriffe. Aus den nächsten xUSD-Testnetzen, die mit unserem Team und unserer Community durchgeführt wurden, gingen mehrere Lektionen hervor. Zuerst haben wir gelernt, dass eine kürzere Kette das System spielen kann. Zweitens haben wir gelernt, dass wir einen Weg brauchen, um das zirkulierende Angebot an xUSD (und zukünftigen xAssets) zu zeigen, oder wir konnten niemals den Zustand des Haven-Netzwerks bestimmen.
Die nächste Entwicklungsstufe führte uns auf einen anderen Weg. Wie oben erwähnt, war der Nachweis des Transaktionswerts der Schlüssel, und wir mussten den Nachweis der Monero-Ein- und Ausgänge durch den Nachweis des Dollarwerts für xUSD-Börsen ersetzen.
Wir haben über ein Dutzend verschiedene Beweise, Prüfungen und Validierungen ausprobiert. Aber wir haben das festgestellt, es sei denn, Sie senden tatsächlich XHV und keine andere Art von VermögenswertBei privaten Tests wird das gesamte System nach einigen Vor- und Rücktransaktionen verwirrt. Je komplexer die Börsen sind, desto schwieriger wird es, den Dollarwert einer Transaktion zu überprüfen. Dann werfen Sie mehrere Transaktionen ein, die große Mengen an Eingaben umfassen mussten, und die Dinge verhedderten sich wirklich.
Diese Herausforderungen standen alle im Zusammenhang mit der Funktionsweise von Verpflichtungssignaturen, was in Monero unbedingt erforderlich ist. Wenn Ihre Verpflichtungen nicht gültig sind, können Sie niemals überprüfen, ob das Geld nicht aus dem Nichts erstellt wurde.
Zu diesem Zeitpunkt haben wir beschlossen, das alte Modell von „farbige Münzen“, Das zuvor auf Bitcoin gelegt wurde und neue Informationen über den Umtausch von Münzen erstellt. Mit farbigen Münzen können Transaktionen mit bestimmten Attributen „gefärbt“ werden. Dadurch werden farbige Münzen effektiv zu Token, mit denen alles dargestellt werden kann. Aber - und das ist entscheidend - farbige Münzen können nur funktionieren, wenn Sie nicht an Moneros Verpflichtungsstruktur gebunden sind.
Das ist also die Herausforderung, die wir uns gestellt haben: Die Verpflichtung von Monero zu ändern, um die Verwendung von „farbigen Münzen“ zu ermöglichen, die zwischen XHV, xUSD und zukünftigen xAssets in einer einzelnen Monero-basierten Kette unterscheiden können. Und ich bin stolz darauf, dass wir zum ersten Mal genau das getan haben.
Wir mussten Moneros ersetzen mehrschichtige verknüpfbare spontane anonyme Gruppe (MLSAG) Signaturen mit dem neueren kompakte verknüpfbare spontane anonyme Gruppe (CLSAG) Signaturen, um dies zu erreichen. Aber mit ein wenig Hilfe von einem der Top-Entwickler von Monero, Sarang Noetherfunktioniert die Lösung jetzt wie vorgesehen. Wir möchten Sarang für seine Unterstützung bei der Navigation durch dieses neue Verschlüsselungsschema danken.
Das Ergebnis all dieser Tests und Bastelarbeiten ist das folgende: Wir haben eine neue Transaktionsstruktur mit echten Eingaben als XHV und echten Ausgaben als xUSD erstellt. Um von XHV nach xUSD zu konvertieren, geben wir XHV als Eingänge und xUSD als Ausgänge an. Daemons prüfen dann, ob die Anzahl der Ausgänge gleich ist, basierend auf dem Wechselkurs, der in dem Block angegeben ist, den der Absender als Preisdatensatz angegeben hat. Dies erfolgt lediglich durch Summieren der Verpflichtungsmasken und des Wechselkurses, die unabhängig von Verifizierern abgerufen werden.
Die Logik ist, dass ein Prüfer immer seinen eigenen Wechselkurs erhält. Die einzige Möglichkeit für einen Absender, eine Transaktion durchzuführen, besteht darin, sowohl den genauen Wechselkurs als auch die genaue Anzahl der Eingaben zu kennen (die nur sie kennen können, da sie in ihrer Brieftasche sind und an anderer Stelle nicht lesbar sind). Der Prüfer summiert dann die Output-Verpflichtungen und vergleicht diese unter Berücksichtigung ihres unabhängig gewonnenen Wechselkurses mit den Inputs. Sie müssen gleich sein, um zu bestehen. Natürlich sind alle Werte verschlüsselt, sodass niemand die Beträge sehen oder ändern kann.
Hinweis: Der Absender kann nur einen bereits verifizierten Preisdatensatz verwenden, der alle aktuell über erstellt wird Das XHV-Orakel von Chainlink. Daemons lesen die Preisdatensatznummer in der Transaktion und erhalten den Datensatz (den tatsächlichen Preis) aus dem Blockkopf. Dies bedeutet, dass die Preise zum Zeitpunkt der Nutzung bereits unveränderlich sind.
Dies ist genau die Art von Lösung, nach der wir gesucht haben, nachdem wir im ersten Testnetz überlegt hatten, wie die mit der Überprüfung des xUSD-Austauschs verbundenen Herausforderungen angegangen werden können. Diese Lösung funktioniert gut in unseren privaten Tests und wird in den kommenden Tagen in unserem nächsten öffentlichen Stagenet veröffentlicht.
Unter der Annahme, dass beim Testen keine anderen Probleme festgestellt werden, ist dies die Lösung, mit der wir xUSD live im Mainnet von Haven starten. Als Teil des Startprozesses freuen wir uns darauf, den xUSD-Austauschcode, den wir im letzten Jahr privat entwickelt haben, öffentlich zu teilen, um die erste private Stallmünze zu erstellen.
Treten Sie in der Zwischenzeit der Haven-Community bei und werden Sie Teil der Zukunft des finanziellen Datenschutzes. Sie können sich unserem anschließen Zwietracht und folge uns weiter Twitter.