Ist eine DAPP wirklich dezentralisiert? Wenn ja, was genau ist dezentralisiert? [abgeschlossen]

Dies ist eine Art theoretische Frage in Bezug auf Ethereum DAPPs, die ich in letzter Zeit zu lernen versucht habe (und von der ich zugeben muss, dass ich immer noch kläglich unwissend bin).

Grundsätzlich (mit meinem begrenzten Wissen) würde ich ein DAPP so beschreiben: Ein DAPP ist eine Sammlung von Smart Contracts (die über öffentliche APIs miteinander interagieren - jeder Vertrag hat einen).

Jeder Smart Contract ist ein dezentralisiertes Programm, das auf der Blockchain läuft. Mit anderen Worten, wenn ein Anruf an den Vertrag geht, führt jeder Knoten im Ethereum-Netzwerk den Vertragscode aus und aktualisiert seinen Status. Dies bedeutet im Wesentlichen, dass der Status des Programms (seine Daten, dh wie viel Ether es hat, seine Mitglieder oder was auch immer ...) nicht an einem einzigen Ort gespeichert wird und nicht einer zentralen Instanz unterliegt, die ihn nach Belieben ändert.

Da eine Anwendung die Summe ihrer Teile ist und in einem DAPPS-Fall die Teile Verträge sind, bedeutet dies, dass die DAPP ebenfalls dezentralisiert ist (dh keiner zentralen Autorität unterliegt).

Nachdem ich jedoch ein wenig mit der Implementierung versucht hatte, stieß ich schnell auf einige Probleme, die im Wesentlichen darauf hinauslaufen: Wenn ich einige Smart Contracts im Netzwerk bereitgestellt habe, stellt sich die Frage (insbesondere angesichts des jüngsten DAO-Hacks, bei dem mehrere andere Personen als der eigentliche Hacker, der sich möglicher Probleme bewusst war), wie kann ich Verträge aktualisieren (für Fehlerbehebungen oder Verbesserungen)?

Um etwas genauer zu sein, scheint es mir, dass es grundsätzlich zwei verschiedene Klassen von Verträgen gibt:

  1. Vertrags-Singletons, das wären Bibliotheken oder Fabriken.
  2. Verträge, die von Fabriken produziert wurden.

Ein Beispiel wäre eine Terminbörse, bei der (in einem sehr vereinfachten Fall, ich weiß) die Börse die Singleton-Fabrik wäre und Terminkontrakte vom Typ 2 produzieren würde.

Abgesehen davon stellt sich die Frage: Wie aktualisiert diese Terminbörse ihre Software auf eine neue, nicht abwärtskompatible Version, da zu jeder Zeit verschiedene Futures-Kontrakte im Umlauf sind, die erwarten, dass der Futures-Börsenkontrakt-Singleton eine bestimmte API hat (das entspricht der Vorgängerversion). In einem anderen Fall, wenn eine kritische Sicherheitslücke in den generierten Futures-Kontrakten entdeckt wird, wie fügt diese Börse einen Patch für alle bereits bestehenden Futures-Kontrakte (vom Typ 2) ein?

Nach dem Lesen (und vielem Nachdenken - immer noch ohne ein sehr klares detailliertes Bild davon, wie dies getan werden könnte) scheint dies kompliziert zu werden. Eines ist jedoch klar, um dies auf sichere Weise zu tun (ohne einige Community-Abstimmungen, die kritische Zeit verschwenden könnten), muss die Börse ein Vertragsschema entwickeln (unter Verwendung eines Vertragsnamenregisters usw.), in dem sie die Fähigkeit, die APIs und den Status aller Verträge zu ändern, die sie erstellt hat (der Vertragsstatus muss möglicherweise geändert werden, um einen Fehler im Vertrag zu verbessern oder zu beheben, ist dies vermeidbar, nicht sicher?). Dies könnte durch die Einführung einer Bibliothek mit einer sich ständig weiterentwickelnden Upgrade-Funktion geschehen, die Verträge oder ähnliches aktualisiert (ich weiß nicht - ich habe nicht genug Erfahrung mit Ethereum, um dies klar zu durchdenken).

Dies führt jedoch zu meiner Frage: Wenn die Börse (oder im Allgemeinen das Entwicklungsteam eines DAPP) alle Verträge unter ihrer zentralen Kontrolle halten muss (damit sie ihre Funktionalität oder ihren Zustand ändern können), was genau ist dann dezentralisiert? Wenn dieses Entwicklungsteam jemals gehackt würde (dh seine Privatadresse gestohlen oder so), wäre das System genauso anfällig wie eine normale Webanwendung? Was genau ist also in der DAPP dezentralisiert, außer der eigentlichen Ausführung (dh der Ausführung auf mehreren Knoten), was nur ein technischer Unterschied ist (nicht anders als die Ausführung eines herkömmlichen Webservers in AWS wirklich ...)

Vielen Dank im Voraus, ich freue mich darauf, stark korrigiert zu werden =).

Bearbeiten: Ich denke, man könnte argumentieren, dass sich die Zustände von Verträgen niemals ändern könnten (was meiner Meinung nach dem Einfrieren des Datenmodells einer Anwendung oder zumindest Teilen davon entspricht). Selbst wenn dies erreicht würde, würden die tatsächlichen Methoden aller Verträge zentralisiert, was den Zustand der Verträge ändert ...

Edit2: Vielleicht könnte man immer einem Muster folgen, bei dem alle Verträge vom Typ 2 (dh generierte Verträge) nicht unter der Kontrolle von irgendjemandem wären (für Patches, Fixes usw.). In diesem Fall sollte der Vertrag niemals etwas über die API eines anderen Vertrags annehmen (weil sich das jederzeit ändern kann). Ich bin mir jedoch nicht sicher, was man gegen Sicherheitslücken im Vertrag selbst tun könnte ...

Ich denke, was wir aus dieser Krise gelernt haben, ist, nur das Notwendige zu dezentralisieren und keine übermäßig komplizierten Verträge zu erstellen. Dann ist eine Dezentralisierung möglich.
@RolandKofler Hmmm, ich folge nicht. Es scheint mir, dass keine Verträge dezentralisiert werden können, da der einzige Weg zu einer wirklichen Dezentralisierung darin besteht, dass das Entwicklungsteam die Kontrolle über den Vertrag verliert, was die Entwicklung des Dapp im Wesentlichen einfriert.
Streng genommen sind die beiden Dinge völlig unabhängig voneinander. Sie können einen Vertrag so lange verwenden, wie Sie möchten. Oder verwenden Sie eine andere, die eine neuere Version davon ist. Die einzige Voraussetzung ist, dass die Benutzeraufgabe zu einem bestimmten Zeitpunkt abgeschlossen ist. Sollen wir es Usage Finality nennen ?
Aufgabe Finalität und nur, weil vbuterin das Wort Finalität zu mögen scheint
@RolandKofler Das wäre wahr, wenn Verträge nie miteinander interagierten, aber sie tun es. Wenn Sie einige Verträge in Ihrem System ändern, aber andere, die mit ihnen interagieren, nicht ändern, werden Sie schließlich auf Probleme stoßen. Und was würden Sie in diesem Fall tun, wenn ein Vertrag kursiert, der eine kritische Sicherheitslücke aufweist?
@RolandKofler Ich meine, was ist, wenn der Austausch die Singleton-API des Austauschvertrags umgestalten möchte? Sie können dies niemals tun, ohne sicherzustellen, dass alle Verträge über die API-Änderung Bescheid wissen ... Die Wahlmöglichkeiten lauten also: 1) Refactoring Ihrer API niemals auf rückwärts-inkompatible Weise (fast unmöglich für eine Anwendung, die mehr als eine Jahr oder zwei). 2) Behalten Sie alle Verträge unter Ihrer Kontrolle.
Warum wird diese Frage als "zu weit gefasst" gekennzeichnet?

Antworten (1)

"Damit stellt sich die Frage: Wie aktualisiert diese Terminbörse ihre Software auf eine neue, nicht abwärtskompatible Version, wenn man bedenkt, dass jederzeit verschiedene Futures-Kontrakte im Umlauf sein werden, die erwarten, dass der Futures-Börsenkontrakt-Singleton eine bestimmte API hat ( das entspricht der vorherigen Version) In einem anderen Fall, wenn eine kritische Sicherheitslücke in den generierten Futures-Kontrakten entdeckt wird, wie fügt diese Börse einen Patch für alle bereits existierenden Futures-Kontrakte (vom Typ 2) ein?

Nach dem Lesen (und vielem Nachdenken – immer noch ohne ein sehr klares detailliertes Bild davon, wie dies getan werden könnte), scheint es, dass dies kompliziert werden könnte.

  1. Ich stimme zu, dass es kompliziert ist, aber abwärtskompatible Codeänderungen sind erforderlich

„Eines ist jedoch klar, um dies auf sichere Weise zu tun (ohne eine Community-Abstimmung, die kritische Zeit verschwenden könnte), muss die Börse ein Vertragsschema (unter Verwendung eines Vertragsnamenregisters usw.) entwickeln, an dem sie festhält die Fähigkeit, die APIs und den Status aller Verträge, die sie erstellt haben, zu ändern (der Vertragsstatus muss möglicherweise geändert werden, um einen Fehler im Vertrag zu verbessern oder zu beheben, ist dies vermeidbar, nicht sicher?).

Dennoch führt dies zu meiner Frage: Wenn die Börse (oder im Allgemeinen das Entwicklungsteam eines DAPP) alle Verträge unter ihrer zentralen Kontrolle halten muss (damit sie ihre Funktionalität oder ihren Zustand ändern können), was genau ist dann dezentralisiert?“

  1. Ich stimme nicht zu, dass dies die beste Lösung ist. Wenn die Dezentralisierung von entscheidender Bedeutung ist (wobei ich vermute, dass die meisten Ethereum- und DAPP-Benutzer zustimmen werden), dann ist eine zentrale Kontrolle von Verträgen nicht akzeptabel. Abwärtskompatible Lösungen (egal wie schwierig) sind ebenso erforderlich wie das „Community Voting“ der Miner für alle Forking-Entscheidungen.
Nun ja, natürlich brauchen Sie die Stimmen der Miner, um die eigentliche Blockchain zu forken. Ich spreche jedoch davon, den Betriebsmodus der Verträge selbst zu ändern (dh die Software zu aktualisieren). Wenn noch Community-Voting hinzukommt, werden kritische Sicherheitskorrekturen oder so ziemlich alles extrem schwierig. Ganz zu schweigen davon, dass tatsächlich ein robustes Abstimmungssystem (für jeden einzelnen DAPP) implementiert werden muss, was überhaupt keine triviale Aufgabe ist.