Dans cet article, je vais expliquer comment nous avons tenté de construire un service de location de scooters décentralisé basé sur des contrats intelligents et pourquoi nous avons malgré tout eu besoin d'un service centralisé.

Comment tout a commencé
En novembre 2018, nous avons participĂ© Ă un hackathon consacrĂ© Ă l'Internet des objets et Ă la blockchain. Notre Ă©quipe a choisi l'idĂ©e du scooter-sharing, car nous avions un scooter fourni par le sponsor de cet hackathon. Le prototype Ă©tait une application mobile permettant de dĂ©marrer le scooter via NFC. Du point de vue marketing, l'idĂ©e Ă©tait soutenue par le rĂ©cit d'un « avenir radieux » avec un Ă©cosystĂšme ouvert oĂč chacun peut ĂȘtre locataire ou prĂȘteur, le tout basĂ© sur des contrats intelligents.
Cette idée a beaucoup plu à nos parties prenantes, qui ont décidé de la transformer en prototype pour des démonstrations lors d'expositions. AprÚs plusieurs présentations réussies au Mobile World Congress et au Bosch Connected World en 2019, il a été décidé de tester la location de scooters auprÚs d'utilisateurs réels, des employés de Deutsche Telekom. Ainsi, nous avons commencé à développer un MVP complet.
La blockchain sur des béquilles
Je pense qu'il n'est pas nĂ©cessaire d'expliquer la diffĂ©rence entre un projet de dĂ©monstration sur scĂšne et un projet destinĂ© Ă ĂȘtre utilisĂ© par de vraies personnes. En six mois, nous devions transformer un prototype brut en quelque chose qui convienne pour un pilote. C'est alors que nous avons compris ce que signifie le terme âdouleurâ.
Pour rendre notre systÚme décentralisé et ouvert, nous avons décidé d'utiliser des contrats intelligents Ethereum. Nous avons choisi cette plateforme de services en ligne décentralisés en raison de sa popularité et de sa capacité à construire une application sans serveur. Nous avions prévu de réaliser notre projet de la maniÚre suivante.

Mais, malheureusement, un contrat intelligent est un code exĂ©cutĂ© par une machine virtuelle au moment de la transaction, et il ne peut pas remplacer un systĂšme complet. serveurPar exemple, un contrat intelligent ne peut pas effectuer d'actions diffĂ©rĂ©es ou programmĂ©es. Dans notre projet, cela n'a pas permis de mettre en place un service de location Ă la minute, comme le font la plupart des services de covoiturage modernes. Par consĂ©quent, nous dĂ©bitons la cryptomonnaie de l'utilisateur aprĂšs la fin de l'opĂ©ration sans ĂȘtre certains qu'il dispose d'un montant suffisant. Cette approche est acceptable uniquement pour un pilote interne et, sans aucun doute, complique la conception d'un vĂ©ritable projet en production.
Ă cela sâajoute lâhumiditĂ© de la plateforme elle-mĂȘme. Par exemple, si vous Ă©crivez un contrat intelligent avec une logique diffĂ©rente de celle des tokens ERC-20, vous serez confrontĂ© Ă des problĂšmes de gestion des erreurs. En gĂ©nĂ©ral, lorsque nous avons des entrĂ©es incorrectes ou que nos mĂ©thodes fonctionnent mal, nous recevons un code d'erreur en rĂ©ponse. Dans le cas d'Ethereum, nous ne pouvons obtenir rien d'autre que la quantitĂ© de gaz dĂ©pensĂ©e pour exĂ©cuter cette fonction. Le gaz est la monnaie qu'il faut payer pour les transactions et les calculs : plus vous avez d'opĂ©rations dans votre code, plus vous paierez. Ainsi, pour comprendre pourquoi le code ne fonctionne pas, vous devez d'abord le tester en simulant toutes les erreurs possibles, et coder en dur le gaz dĂ©pensĂ© comme code d'erreur. Mais si vous modifiez votre code, ce traitement des erreurs sera cassĂ©.
De plus, il est pratiquement impossible de crĂ©er une application mobile qui fonctionne avec la blockchain de maniĂšre honnĂȘte, sans utiliser une clĂ© stockĂ©e quelque part dans le cloud. Bien que des portefeuilles honnĂȘtes existent, ils ne fournissent pas d'interfaces pour signer des transactions externes. Cela signifie qu'aucune application native ne sera disponible Ă moins qu'elle n'intĂšgre un portefeuille crypto, auquel les utilisateurs auront peu confiance (moi, je ne ferais pas confiance). En consĂ©quence, ici aussi, nous avons dĂ» couper les coins ronds. Les contrats intelligents Ă©taient livrĂ©s sur un rĂ©seau privĂ© Ethereum, et le portefeuille Ă©tait dans le cloud. Mais malgrĂ© cela, nos utilisateurs ont ressenti toutes les "joies" des services dĂ©centralisĂ©s sous la forme d'attentes prolongĂ©es pour des transactions plusieurs fois par session de location.
Tout cela nous amÚne à une architecture comme celle-ci. Convenez qu'elle diffÚre fortement de ce que nous avions prévu.

Atout dans la manche : Identité auto-souveraine
Il est impossible de construire un systĂšme complĂštement dĂ©centralisĂ© sans une identification dĂ©centralisĂ©e. C'est cette partie qui est gĂ©rĂ©e par l'IdentitĂ© Auto-Souveraine (SSI), dont l'essence rĂ©side dans le fait que vous Ă©liminez le fournisseur d'identitĂ© centralisĂ© (IDP) et que vous remettez au peuple toutes les donnĂ©es et la responsabilitĂ© qui en dĂ©coule. DĂ©sormais, l'utilisateur dĂ©cide lui-mĂȘme des donnĂ©es dont il a besoin et avec qui il veut les partager. Toutes ces informations rĂ©sident sur l'appareil de l'utilisateur. Mais pour un Ă©change, nous aurons besoin d'un systĂšme dĂ©centralisĂ© de stockage de preuves cryptographiques. Toutes les implĂ©mentations modernes du concept de SSI utilisent la blockchain comme stockage.
« Quel rapport avec un atout dans la manche ? » vous demanderez-vous. Nous avons lancĂ© le service pour un test interne sur nos propres employĂ©s Ă Berlin et Ă Bonn, et nous avons rencontrĂ© des difficultĂ©s face aux syndicats allemands. En Allemagne, les entreprises ne sont pas autorisĂ©es Ă suivre les dĂ©placements des employĂ©s, et les syndicats contrĂŽlent cela. Ces restrictions mettent un terme au stockage centralisĂ© des donnĂ©es d'identification des utilisateurs, car dans ce cas, nous saurions oĂč se trouvent les employĂ©s. En mĂȘme temps, nous ne pouvions pas ne pas les vĂ©rifier en raison du risque de vol des scooters. Mais grĂące Ă l'IdentitĂ© Auto-Souveraine, nos utilisateurs utilisaient le systĂšme de maniĂšre anonyme, et le scooter vĂ©rifiait la validitĂ© du permis de conduire avant le dĂ©but de la location. En consĂ©quence, nous avions des mĂ©triques anonymisĂ©es des utilisateurs, sans documents ni donnĂ©es personnelles : toutes celles-ci Ă©taient contenues sur les appareils des chauffeurs eux-mĂȘmes. Ainsi, grĂące Ă la SSI, la solution Ă ce problĂšme dans notre projet Ă©tait prĂȘte avant mĂȘme son apparition.
L'appareil a posé problÚme
Nous n'avons pas mis en Ćuvre nous-mĂȘmes l'IdentitĂ© Auto-Souveraine, car cela nĂ©cessite une expertise en cryptographie et beaucoup de temps. Au lieu de cela, nous avons utilisĂ© le produit de nos partenaires Jolocom et intĂ©grĂ© leur portefeuille mobile et leurs services dans notre plateforme. Malheureusement, ce produit prĂ©sente un inconvĂ©nient majeur : le langage de dĂ©veloppement principal est Node.js.
Cette pile technologique nous limite considĂ©rablement dans le choix du matĂ©riel intĂ©grĂ© au scooter. Heureusement, dĂšs le dĂ©but du projet, nous avons optĂ© pour le Raspberry Pi Zero, ce qui nous a permis de bĂ©nĂ©ficier de tous les avantages d'un vĂ©ritable micro-ordinateur. Cela nous a permis de faire fonctionner Node.js sur le scooter. De plus, nous avons obtenu un monitoring et un accĂšs Ă distance via vpn, en utilisant des outils prĂȘts Ă l'emploi.
En conclusion
Malgré toutes les "difficultés" et les problÚmes, le projet a été lancé. Tout ne fonctionnait pas comme nous l'avions prévu, mais il était en effet possible de faire des balades en louant les scooters.
Oui, nous avons commis plusieurs erreurs lors de la conception de l'architecture, qui ne nous ont pas permis de rendre le service entiĂšrement dĂ©centralisĂ©, mais mĂȘme sans ces erreurs, il aurait Ă©tĂ© difficile de crĂ©er une plateforme serverless. Ăcrire une Ă©niĂšme pyramide crypto est une chose, crĂ©er un vĂ©ritable service qui doit gĂ©rer les erreurs, rĂ©soudre des cas extrĂȘmes et exĂ©cuter des tĂąches diffĂ©rĂ©es en est une autre. EspĂ©rons que les nouvelles plateformes qui ont rĂ©cemment vu le jour seront plus flexibles et fonctionnelles.
Source : habr.com
