Kembangkan perangkat lunak untuk penyewaan skuter terdesentralisasi. Siapa bilang itu mudah?

Dalam artikel ini saya akan berbicara tentang bagaimana kami mencoba membangun penyewaan skuter terdesentralisasi dengan kontrak pintar dan mengapa kami masih membutuhkan layanan terpusat.



Bagaimana semua ini dimulai


Pada bulan November 2018, kami mengambil bagian dalam hackathon yang didedikasikan untuk Internet hal-hal dan blockchain. Tim kami memilih berbagi skuter sebagai ide, karena kami memiliki skuter dari sponsor hackathon ini. Prototipe itu tampak seperti aplikasi seluler yang memungkinkan Anda menjalankan skuter melalui NFC. Dari sudut pandang pemasaran, gagasan itu diperkuat oleh cerita tentang "masa depan yang cerah" dengan ekosistem terbuka di mana setiap orang bisa menjadi penyewa atau pemilik, semuanya berdasarkan kontrak pintar.

Para pemangku kepentingan kami sangat menyukai ide ini, dan mereka memutuskan untuk mengubahnya menjadi prototipe untuk demonstrasi di pameran. Setelah beberapa pertunjukan yang sukses di Mobile World Congress dan Bosch Connected World pada 2019, diputuskan untuk menguji persewaan skuter pada pengguna nyata, karyawan Deutsche Telekom. Jadi kami mulai mengembangkan MVP lengkap.

Kruk Blockchain


Saya pikir tidak ada gunanya menjelaskan apa perbedaan antara proyek untuk ditampilkan di atas panggung dan yang akan digunakan orang sungguhan. Selama enam bulan kami harus mengubah prototipe mentah menjadi sesuatu yang cocok untuk pilot. Dan kemudian kami menyadari apa arti "sakit".

Untuk membuat sistem kami terdesentralisasi dan terbuka, kami memutuskan untuk menggunakan kontrak pintar Ethereum. Pilihan ada pada platform layanan online terdesentralisasi ini karena popularitasnya dan kemampuan untuk membangun aplikasi tanpa server. Kami berencana untuk mengimplementasikan proyek kami sebagai berikut.



Tetapi, sayangnya, kontrak pintar adalah kode yang dijalankan oleh mesin virtual pada saat transaksi, dan itu tidak dapat menggantikan server yang lengkap. Misalnya, kontrak pintar tidak dapat melakukan aktivitas yang tertunda atau dijadwalkan. Dalam proyek kami, ini tidak memungkinkan kami untuk menerapkan layanan sewa per menit, seperti yang dilakukan sebagian besar mobil modern. Oleh karena itu, kami mengurangi mata uang kripto dari pengguna setelah operasi selesai tanpa kepastian bahwa ia memiliki cukup uang. Pendekatan ini hanya dapat diterima untuk pilot internal dan, tentu saja, menambah masalah ketika merancang proyek produksi penuh.

Untuk semua hal di atas, kelembaban platform itu sendiri ditambahkan. Misalnya, menulis kontrak pintar dengan logika selain token ERC-20 akan menyebabkan masalah penanganan kesalahan. Biasanya, dengan input yang salah atau operasi metode kami yang salah, kami mendapat kode kesalahan sebagai respons. Dalam kasus Ethereum, kita tidak bisa mendapatkan apa-apa selain jumlah gas yang dihabiskan untuk melakukan fungsi ini. Gas adalah mata uang yang harus Anda bayar untuk transaksi dan perhitungan: semakin banyak transaksi dalam kode Anda, semakin banyak Anda membayar. Oleh karena itu, untuk memahami mengapa kode tidak berfungsi, Anda terlebih dahulu mengujinya, mensimulasikan semua kemungkinan kesalahan, dan meng-hardcode gas yang dihabiskan sebagai kode kesalahan. Tetapi jika Anda mengubah kode Anda, penanganan kesalahan ini akan rusak.

Selain itu, hampir mustahil untuk membuat aplikasi seluler yang bekerja dengan blockchain secara jujur, tanpa menggunakan kunci yang tersimpan di suatu tempat di cloud. Meskipun dompet jujur ​​memang ada, mereka tidak menyediakan antarmuka untuk menandatangani transaksi eksternal. Ini berarti bahwa Anda tidak akan melihat aplikasi asli jika tidak memiliki crypto-wallet bawaan, di mana pengguna akan memiliki sedikit kepercayaan (saya tidak akan percaya). Akibatnya, di sini kami juga harus memotong sudut. Kontrak pintar dikirim ke jaringan pribadi Ethereum, dan dompetnya keruh. Tetapi meskipun demikian, pengguna kami merasakan semua "pesona" layanan terdesentralisasi dalam bentuk menunggu lama untuk transaksi beberapa kali per sesi sewa.

Semua ini membawa kita ke arsitektur ini. Setuju, itu sangat berbeda dari apa yang kami rencanakan.



Nyalakan lengan baju Anda: Identitas Berdaulat Sendiri


Anda tidak dapat membangun sistem yang sepenuhnya terdesentralisasi tanpa identifikasi yang terdesentralisasi. Self-Sovereign Identity (SSI) bertanggung jawab untuk bagian ini, yang intinya adalah Anda membuang penyedia identitas terpusat (IDP) dan mendistribusikan kepada orang-orang semua data dan tanggung jawab untuk mereka. Sekarang pengguna memutuskan data apa yang dia butuhkan dan dengan siapa dia akan membagikannya. Semua informasi ini ada di perangkat pengguna. Tetapi untuk berbagi, kita membutuhkan sistem penyimpanan bukti kriptografi desentralisasi. Semua implementasi modern dari konsep SSI menggunakan blockchain sebagai penyimpanan.

"Apa yang dimiliki kartu as di lenganku?" - Anda bertanya. Kami meluncurkan layanan untuk tes internal pada karyawan kami sendiri di Berlin dan Bonn, dan kami menghadapi kesulitan dalam menghadapi serikat Jerman. Di Jerman, perusahaan dilarang memantau pergerakan karyawan, dan serikat pekerja mengendalikan hal ini. Pembatasan ini mengakhiri penyimpanan terpusat data identitas pengguna, karena dalam hal ini kita akan tahu lokasi karyawan. Pada saat yang sama, kami tidak dapat memeriksanya karena kemungkinan pembajakan skuter. Tetapi berkat Self-Sovereign Identity, pengguna kami menggunakan sistem secara anonim, dan skuter sendiri memeriksa ketersediaan SIM sebelum memulai rental. Akibatnya, kami menyimpan metrik pengguna yang dianonimkan, kami tidak memiliki dokumen atau data pribadi: semuanya disimpan di perangkat driver itu sendiri.Dengan demikian, berkat SSI, solusi untuk masalah di proyek kami sudah siap bahkan sebelum muncul.

Perangkat melempar masalah


Kami tidak menerapkan Identitas Berdaulat Sendiri pada kami sendiri, karena ini membutuhkan keahlian dalam kriptografi dan banyak waktu. Sebagai gantinya, kami mengambil keuntungan dari produk mitra kami Jolocom dan mengintegrasikan dompet dan layanan seluler mereka ke dalam platform kami. Sayangnya, produk ini memiliki satu kelemahan signifikan: bahasa pengembangan utama adalah Node.js.

Tumpukan teknologi semacam itu sangat membatasi kita dalam memilih besi yang dibangun menjadi skuter. Untungnya, pada awal proyek, pilihan kami jatuh pada Raspberry Pi Zero, dan kami mengambil keuntungan dari komputer mikro yang lengkap. Ini memungkinkan kami untuk menjalankan Node.js besar di skuter. Selain itu, kami mendapat pemantauan dan akses jarak jauh melalui vpn menggunakan alat yang sudah jadi.

Akhirnya


Terlepas dari semua "rasa sakit" dan masalah, proyek ini diluncurkan. Tidak semuanya berjalan sesuai rencana, tetapi sangat mungkin untuk mengendarai skuter dengan menyewa mereka.

Ya, kami membuat sejumlah kesalahan dalam desain arsitektur, yang tidak memungkinkan kami untuk membuat layanan sepenuhnya terdesentralisasi, tetapi bahkan tanpa kesalahan ini kami tidak akan berhasil membuat platform tanpa server. Adalah satu hal untuk menulis piramida kripto yang lain dan yang lainnya adalah layanan lengkap di mana Anda perlu menangani kesalahan, menyelesaikan kasus perbatasan dan melakukan tugas yang tertunda. Mari berharap platform baru yang baru muncul akan lebih fleksibel dan fungsional.

All Articles