Nehmen wir an, ich möchte eine App erstellen, die nicht vollständig dezentralisiert ist, sondern Restful-APIs für das Frontend bereitstellt und eine private Ethereum-Blockchain im Backend verwendet, um sensible Daten zu verarbeiten und Benutzerberechtigungen zu verwalten. Ich erstelle für jeden Benutzer bei der Anmeldung bei meinem Backend ein Ethereum-Konto mit seinem Passwort. Das Back-End führt NodeJS Express aus und ist mit der web3-Instanz verbunden. Wann immer der Benutzer eine Aktion ausführen möchte, muss er sein Passwort eingeben, dann verwende ich dieses Passwort, um sein Konto zu entsperren und eine Transaktion zu senden (oder es könnte ein Vertragsanruf sein).
Ist es sinnvoll, als Middleware zwischen dem Nutzer und der privaten Blockchain zu fungieren? Ich meine, ist dies aus Sicht des Ethereum-Designs eine gängige Praxis? Wie sollte sich der Benutzer dieser Praxis bewusst sein, wenn er nichts im Zusammenhang mit Blockchain sieht, weil die ganze Arbeit hinter den Kulissen erledigt wird? Wie könnte der Benutzer meinem System vertrauen, dass sein Passwort nicht preisgegeben wird?
Ist es in einem solchen Fall empfehlenswert, mehrere Knoten für diese private Blockchain zu verwenden? Welchen Nutzen bringt es? Ist es nur die hohe Verfügbarkeit und das Entfernen des zentralen Fehlerpunkts?
Bevor ich versuche, Ihre Fragen zu beantworten: Es gibt bestimmte Vorteile für die Verwendung einer Blockchain und insbesondere von Ethereum. Diese Vorteile sind:
Diese Vorteile sind diejenigen, die Sie benötigen, um eine auf Ethereum basierende Plattform zu implementieren. Abgesehen davon wird Ethereum schnell zu einer Belastung und einem Schwachpunkt in Ihrem System.
Deine Fragen :
1) In vielen aktuellen und den meisten zukünftigen Großprojekten werden Ethereum-Knoten ohnehin für den Benutzer nicht sichtbar sein. Was das Vertrauen zwischen der Plattform (dem System) und dem Benutzer aufbaut, ist das Versprechen von Transparenz und Robustheit. Eine bewährte Vorgehensweise besteht darin, Ihren Benutzern ausdrücklich mitzuteilen, dass Sie ihre Konten in ihrem Namen verwalten, und ihnen die Möglichkeit zu geben, sich dagegen zu entscheiden und ihre Ethereum-Konten und -Transaktionen selbst zu verwalten, während sie weiterhin von den Diensten Ihrer Plattform profitieren.
2) Mehrere Knoten im Falle eines privaten Netzwerks sind nicht erforderlich. Möglicherweise müssen Sie viele Knoten verwenden, wenn die Logik hinter Ihrem System die tatsächliche Entscheidungsteilung zwischen diesen Knoten erfordert. So etwas wie ein Knoten für jedes Land oder ein Knoten für jede Partei. Viele Knoten können auch den Druck auf Ihre Hardware verringern und die Kapazität und Fehlertoleranz Ihres Systems erhöhen.
Ich habe eine private Blockchain mit einem Backend-System in nodejs implementiert, das einige der Hürden bewältigt, aber der Blockchain die Arbeit überlassen, die sie am besten kann: Vertrauen geben. Also habe ich im Grunde eine Lösung implementiert, die umgekehrt zu dem funktioniert, was Sie hier beschrieben haben.
In meiner Architektur befindet sich der private Schlüssel eines Benutzers auf dem Client und die Benutzerdaten werden zusammen mit dem Benutzerkonto auf Ethereum auf einem Mongodb-Server registriert. Immer wenn eine Transaktion angefordert wird, erstellt der Client sie auf der Blockchain mit dem privaten Schlüssel des Benutzers (in einer mobilen App wird er im Speicherbereich gespeichert, in einer Web-App wird er von MetaMask verwaltet) und registriert die Transaktion bei Erfolg darin die Datenbank mit einem Verweis auf den Transaktionshash.
Auf diese Weise bleibt die Wahrheit in der Blockchain, niemand kann Passwörter stehlen und in der Datenbank haben Sie Daten, die zu teuer sind, um sie in der Blockchain zu behalten.
OWADVL
DottoreM