Selles artiklis räägin, kuidas püüdsime luua detsentraliseeritud tõukerataste rentimist nutilepingute alusel ja miks oli meil ikkagi vaja tsentraliseeritud teenust.

Kuidas kõik algas
2018. aasta novembris osalesime Interneti-asjade ja plokiahela hackathonil. Meie tiim valis ideeks tõukerataste jagamise, kuna meie käsutuses oli sponsori poolt antud tõukeratas. Prototüüp nägi välja nagu mobiilirakendus, mis võimaldas tõukeratast NFC kaudu käivitada. Turunduse seisukohalt toetas ideed jutt "helgest tulevikust" avatud ökosüsteemis, kus igaüks saab olla rentnik või rendileandja, ja kõik see nutilepingute baasil.
See idee meeldis meie sidusrühmadele väga ning nad otsustasid muuta selle prototüübiks, mida saaks näidata näitustel. Pärast mitmeid õnnestunud esitlusi Mobile World Congressil ja Bosch Connected Worldil 2019. aastal otsustati testida tõukerataste rentimist reaalsete kasutajate seas, Deutsche Telekomi töötajate seas. Nii alustasime täisfunktsionaalse MVP arendamist.
Plokiahel kätkeb endas raskusi
Mulle tundub, et ei ole vaja selgitada, milline on erinevus laval esitlemise projekti ja mängijate igapäevaselt kasutatava projekti vahel. Kuue kuu jooksul pidime me muutma toore prototüübi millegiks, mis sobib pilootprojekti jaoks. Ja siin saime aru, mida tähendab „valus”.
Kuna tahtsime meie süsteemi muuta detsentraliseerituks ja avatud, otsustasime kasutada Ethereum nutilepinguid. Selle detsentraliseeritud veebiteenuste platvormi kasuks räägivad selle populaarsus ja võimalus ehitada serveriteta rakendus. Planeerisime meie projekti teostada järgmiselt.

Kahjuks on nutileping kood, mis täidetakse virtuaalses masinas tehingu hetkel, ja see ei saa asendada täisfunktsionaalset server. Näiteks ei saa nutileping täita viivitusi või plaanitud toiminguid. Meie projektis ei lubanud see meil teostada minuti täpsusega renditeenust nagu enamik modernseid autorenditeenuseid. Seetõttu arvestasime krüptorahaga kasutajalt pärast tehingu lõpetamist, ilma et oleksime kindlad, et tal on piisavalt raha. Selline lähenemine on vastuvõetav ainult sisemise pilootprojekti jaoks ning kindlasti toob see kaasa probleeme täisfunktsionaalse tootmisprojekti kavandamisel.
Kõigile eelnevale lisandub veel platvormi niiskus. Näiteks, kui kirjutate nutilepingut, mille loogika erineb ERC-20 tokenitest, seisate silmitsi vigade töötlemise probleemiga. Tavaliselt, kui sisend on vale või meie meetodid ei tööta õigesti, saame vastuseks veakoodi. Ethereumis ei saa me midagi rohkemat kui kulu gaasi, mis kulus selle funktsiooni täitmiseks. Gaas on valuuta, mida tuleb maksta tehingute ja arvutuste eest: mida rohkem operatsioone teie koodis, seda rohkem peate maksma. Seetõttu, et mõista, miks kood ei tööta, testite seda esmalt, simuleerides kõiki võimalikke vigu ja kõvakoodides kulutatud gaasi veakoodina. Kuid kui muudate oma koodi, ei toimi see vigade töötlemine enam.
Lisaks on praktiliselt võimatu luua mobiilirakendust, mis töötaks plokiahelaga õiglaselt, ilma et kasutataks kuskil pilves hoitavat võtit. Kuigi õiged rahakotid eksisteerivad, ei paku nad liideseid väliste tehingute allkirjastamiseks. See tähendab, et natiivset rakendust ei saa, kui see ei sisalda krüpto rahakotti, millele kasutajatel ei ole suurt usaldust (mina ei usaldaks). Tulemuseks on see, et meil tuli siin samuti nurka lõigata. Nutilepingud edastati privaatsetesse Ethereum võrku ja rahakott oli pilves. Kuid vaatamata sellele kogesid meie kasutajad kõiki detsentraliseeritud teenuste „võlusid“ pika ooteaja näol tehingute puhul, mis kestsid mitu korda ühes rendiseansis.
Kogu see viib meid sellise arhitektuurini. Olge nõus, see erineb tugevalt sellest, mida me planeerisime.

Äss taskus: enesekehtestav identiteet
Täielikult detsentraliseeritud süsteemi ei saa luua ilma detsentraliseeritud identifitseerimiseta. Selle osa eest vastutab iseseisev identiteet (Self-Sovereign Identity, SSI), mille põhimõte seisneb selles, et te eemaldate tsentraliseeritud identiteedipakkuja (IDP) ja jagate inimesed kõik andmed ja vastutuse nende üle. Nüüd otsustab kasutaja ise, milliseid andmeid ta vajab ja kellega ta neid jagab. Kõik need andmed asuvad kasutaja seadmes. Kuid vahetamiseks on meil vaja detsentraliseeritud krüptograafiliste tõendite salvestussüsteemi. Kõik kaasaegsed SSI kontseptsiooni rakendused kasutavad blockchain-tehnoloogiat salvestamiseks.
„Mis pistmist on seda tassi kaardiga?” — võite küsida. Teenust testisime oma töötajate seas Berliinis ja Bonnis ning sellega seotud raskused ilmusid Saksamaa ametiühingute näol. Saksamaa seadus keelab ettevõtetel jälgida töötajate liikumisi, ning ametiühingud kontrollivad seda. Need piirangud muudavad tsentraliseeritud kasutajate identificeerimise andmete salvestamise keeruliseks, kuna me teaksime töötajate asukohta. Samal ajal ei saanud me neid mitte kontrollida, kuna skuutrireidide varastamise võimalus oli olemas. Kuid thanks to Self-Sovereign Identity said meie kasutajad süsteemi kasutada anonüümselt ning skuuter kontrollis juhtide juhiluba enne rentimise alustamist. Lõpptulemusena salvestasime me anonüümseid kasutajate mõõdikuid, me ei pidanud mingeid dokumente ega isikuandmeid: kõik need asusid vahetult juhtide seadmetes. Sel moel oli meie projektis probleemi lahenduse idee olemas veel enne, kui see esmakordselt esile kerkis.
Seade tekitas probleeme
Me ei rakendanud iseseisvat identiteeti (Self-Sovereign Identity), kuna see nõuab krüptograafiaalast ekspertteadmist ja suurt hulka aega. Selle asemel kasutasime meie partnerite Jolocom toodet ning integreerisime nende mobiilse rahakoti ja teenused meie platvormisse. Kahjuks on sellel tootel üks suur puudus: peamine arenduskeel on Node.js.
Selline tehnoloogiline stekk piirab meid väga paljus valikus, millist riistvara skuutrisse paigaldada. Õnneks, projekti alguses langetati otsus kasutada Raspberry Pi Zero't, mis võimaldas meil kasutada kõiki tõelise mikrokontrolleri eeliseid. See võimaldas meil käivitada mahukat Node.js'i skuutris. Lisaks saime jälgimise ja kaugjuurdepääsu kaudu vpn, kasutades olemasolevaid tööriistu.
Kokkuvõtteks
Vaatamata kõikidele „valudele” ja probleemidele käivitati projekt siiski. Mitte kõik ei töötanud nii, nagu plaanitud, kuid skuutritega oli tõesti võimalik sõita, rentides neid.
Jah, me tegime mitmeid vigu arhitektuuri kujundamisel, mis ei võimaldanud meil teenust täielikult detsentraliseerida, kuid isegi ilma nende vigadeta oleks meil ilmselt olnud raske luua serverita platvormi. Üks asi on kirjutada järgmine krüptopüramiid ja hoopis teine – täielik teenus, kus tuleb hallata vigu, lahendada piirjuhtumeid ja täita edasi lükatud ülesandeid. Lootkem, et hiljuti ilmunud uued platvormid on paindlikumad ja funktsionaalsemad.
Allikas: habr.com
