In diesem Artikel werde ich darĂŒber berichten, wie wir versucht haben, einen dezentralen Scooter-Verleih basierend auf Smart Contracts aufzubauen und warum wir dennoch einen zentralisierten Dienst benötigten.

Wie alles begann
Im November 2018 nahmen wir an einem Hackathon teil, der sich mit dem Internet der Dinge und Blockchain beschĂ€ftigte. Als Idee wĂ€hlte unser Team das Scooter-Sharing, da wir einen Scooter vom Sponsor dieses Hackathons hatten. Der Prototyp sah wie eine mobile Anwendung aus, die es ermöglichte, den Scooter ĂŒber NFC zu starten. Aus Marketingsicht wurde die Idee durch das Versprechen einer "hellen Zukunft" mit einem offenen Ăkosystem untermauert, in dem jeder Mieter oder Vermieter werden kann, und das alles auf Basis von Smart Contracts.
Diese Idee gefiel unseren Stakeholdern sehr, und sie beschlossen, sie in einen Prototyp fĂŒr die PrĂ€sentation auf Messen umzuwandeln. Nach mehreren erfolgreichen PrĂ€sentationen auf dem Mobile World Congress und Bosch Connected World im Jahr 2019 wurde beschlossen, den Scooter-Verleih mit realen Nutzern, Mitarbeitern der Deutschen Telekom, zu testen. So begannen wir mit der Entwicklung eines vollstĂ€ndigen MVP.
Blockchain auf KrĂŒcken
Ich denke, es ist nicht notwendig zu erklĂ€ren, was der Unterschied zwischen einem Projekt zur VorfĂŒhrung auf der BĂŒhne und einem ist, das von realen Menschen genutzt wird. In sechs Monaten sollten wir den rohen Prototyp in etwas taugliches fĂŒr den Pilotbetrieb verwandeln. Und hier wurde uns klar, was "Schmerz" bedeutet.
Um unser System dezentral und offen zu gestalten, entschieden wir uns, Smart Contracts von Ethereum zu verwenden. Die Wahl fiel auf diese Plattform fĂŒr dezentrale Online-Dienste aufgrund ihrer PopularitĂ€t und der Möglichkeit, eine serverlose Anwendung zu erstellen. Wir planten, unser Projekt folgendermaĂen umzusetzen.

Leider ist ein Smart Contract jedoch Code, der von einer virtuellen Maschine zum Zeitpunkt der Transaktion ausgefĂŒhrt wird, und er kann nicht einen vollwertigen ersetzen. Server. Zum Beispiel kann ein Smart Contract keine verzögerten oder geplanten Aktionen durchfĂŒhren. In unserem Projekt hat dies verhindert, dass wir einen minutengenauen Mietservice implementieren, wie es die meisten modernen Carsharing-Dienste tun. Daher haben wir die KryptowĂ€hrung von den Nutzern nach Abschluss der Operation abgebucht, ohne sicherzustellen, dass sie genĂŒgend Geld haben. Dieser Ansatz ist nur fĂŒr interne Pilotprojekte akzeptabel und bringt ohne Zweifel Probleme bei der Planung eines vollwertigen Produktionsprojekts mit sich.
DarĂŒber hinaus kommt die UnzulĂ€nglichkeit der Plattform hinzu. Zum Beispiel, wenn Sie einen Smart Contract mit einer Logik schreiben, die sich von ERC-20-Token unterscheidet, werden Sie auf ein Problem bei der Fehlerbehandlung stoĂen. Normalerweise erhalten wir bei falscher Eingabe oder wenn unsere Methoden nicht korrekt funktionieren, einen Fehlercode als Antwort. Im Fall von Ethereum können wir nichts anderes erhalten als die Menge an Gas, die fĂŒr die AusfĂŒhrung dieser Funktion aufgewendet wurde. Gas ist die WĂ€hrung, die fĂŒr Transaktionen und Berechnungen bezahlt werden muss: Je mehr Operationen in Ihrem Code sind, desto mehr zahlen Sie. Daher testen Sie zuerst Ihren Code, indem Sie alle möglichen Fehler simulieren und das verbrauchte Gas als Fehlercode fest codieren, um zu verstehen, warum der Code nicht funktioniert. Aber wenn Sie Ihren Code Ă€ndern, bricht diese Fehlerbehandlung.
ZusĂ€tzlich ist es praktisch unmöglich, eine mobile Anwendung zu erstellen, die ehrlich mit der Blockchain arbeitet, ohne einen SchlĂŒssel zu verwenden, der irgendwo in der Cloud gespeichert ist. Obwohl ehrliche Wallets existieren, bieten sie keine Schnittstellen fĂŒr die Unterzeichnung externer Transaktionen an. Das bedeutet, dass Sie keine native Anwendung haben werden, es sei denn, sie enthĂ€lt eine integrierte Krypto-Wallet, der die Nutzer wenig Vertrauen entgegenbringen werden (ich wĂŒrde ihr nicht vertrauen). Infolgedessen mussten wir auch hier Abstriche machen. Smart Contracts wurden in ein privates Ethereum-Netzwerk geliefert, wĂ€hrend das Wallet cloud-basiert war. Trotz alledem haben unsere Nutzer die âVorzĂŒgeâ dezentraler Dienste in Form von langen Wartezeiten fĂŒr Transaktionen mehrfach wĂ€hrend einer Mietsession gespĂŒrt.
All dies fĂŒhrt uns zu dieser Architektur. Sie mĂŒssen zugeben, dass sie sich stark von dem unterscheidet, was wir geplant hatten.

Das Ass im Ărmel: Self-Sovereign Identity
Es ist nicht möglich, ein vollstĂ€ndig dezentralisiertes System ohne dezentrale Identifizierung zu schaffen. DafĂŒr ist die Selbstverwaltete IdentitĂ€t (SSI) verantwortlich, deren Kern darin besteht, einen zentralisierten IdentitĂ€tsanbieter (IDP) abzulehnen und alle Daten und deren Verantwortung an die Nutzer zu ĂŒbergeben. Jetzt entscheidet der Nutzer selbst, welche Daten er benötigt und mit wem er sie teilen möchte. SĂ€mtliche Informationen befinden sich auf dem GerĂ€t des Nutzers. FĂŒr den Austausch benötigen wir jedoch ein dezentrales System zur Speicherung kryptografischer Beweise. Alle aktuellen Implementierungen des SSI-Konzepts nutzen Blockchain als Speichermedium.
âWas hat das mit einem Trumpf im Ărmel zu tun?â â werden Sie fragen. Den Dienst haben wir fĂŒr einen internen Test mit unseren eigenen Mitarbeitern in Berlin und Bonn gestartet, und dabei hatten wir Schwierigkeiten mit den deutschen Gewerkschaften. In Deutschland ist es Unternehmen verboten, die Bewegungen ihrer Mitarbeiter zu ĂŒberwachen, und die Gewerkschaften kontrollieren das. Diese EinschrĂ€nkungen machen eine zentrale Speicherung von Nutzerdaten nahezu unmöglich, da wir in diesem Fall wĂŒssten, wo sich die Mitarbeiter befinden. Gleichzeitig konnten wir sie aufgrund der Möglichkeit von MopeddiebstĂ€hlen nicht unbeaufsichtigt lassen. Doch dank der Selbstverwalteten IdentitĂ€t konnten unsere Nutzer das System anonym nutzen, wobei der Moped selbst vor Beginn der Anmietung die FĂŒhrungsscheine der Nutzer ĂŒberprĂŒfte. Infolgedessen hatten wir anonymisierte Nutzermetriken gespeichert, ohne irgendwelche Dokumente oder persönlichen Daten: All diese Daten befanden sich auf den GerĂ€ten der Fahrer selbst. Somit war die Lösung des Problems in unserem Projekt dank SSI bereits vor ihrem Erscheinen bereit.
Das GerÀt brachte Probleme mit sich.
Wir haben die Selbstverwaltete IdentitÀt nicht selbst umgesetzt, da dies Expertise in der Kryptographie und eine Menge Zeit erfordert. Stattdessen haben wir das Produkt unserer Partner Jolocom genutzt und deren mobile Wallet- und Dienstleistungsangebote in unsere Plattform integriert. Leider hat dieses Produkt einen wesentlichen Nachteil: Die Hauptprogrammiersprache ist Node.js.
Dieser Technologie-Stack schrĂ€nkt uns stark in der Auswahl der Hardware ein, die in den Scooter eingebaut werden kann. GlĂŒcklicherweise fiel unsere Wahl zu Beginn des Projekts auf den Raspberry Pi Zero, und wir haben alle Vorteile eines vollwertigen Mikrokameras genutzt. Dies ermöglichte es uns, das umfangreiche Node.js auf dem Scooter zu starten. DarĂŒber hinaus erhielten wir Monitoring und Remote-Zugriff ĂŒber VPN, indem wir vorhandene Tools nutzten.
AbschlieĂend
Trotz all der "Schwierigkeiten" und Probleme wurde das Projekt gestartet. Nicht alles funktionierte, wie wir es geplant hatten, aber es war tatsÀchlich möglich, mit den Scootern zu fahren und sie zu mieten.
Ja, wir haben bei der Architekturplanung eine Reihe von Fehlern gemacht, die uns daran hinderten, den Service vollstĂ€ndig dezentral zu gestalten, aber selbst ohne diese Fehler wĂ€re es uns kaum gelungen, eine serverlose Plattform zu schaffen. Es ist eine Sache, eine weitere Krypto-Pyramide zu schreiben, und etwas ganz anderes, einen vollwertigen Service zu entwickeln, in dem Fehler behandelt, GrenzfĂ€lle gelöst und verzögerte Aufgaben ausgefĂŒhrt werden mĂŒssen. Hoffen wir, dass die in letzter Zeit aufgetauchten neuen Plattformen flexibler und funktionaler sein werden.
Quelle: habr.com
