Progettazione e implementazione di un sistema di condivisione di account per piattaforme di servizi: un approccio basato su blockchain

1 Introduzione e funzionamento

Nel corso del 2023 abbiamo lanciato un progetto open source allo scopo di studiare un caso d’uso della blockchain in un contesto B2C, l’idea è stata sviluppata in collaborazione con l’Università degli Studi di Torino per una tesi di laurea triennale.

L’obiettivo principale di questo PoC è stata la progettazione e lo sviluppo di un prototipo di una web application distribuita e decentralizzata. In dettaglio la soluzione mirava ad offrire un sistema di autenticazione e noleggio di account, sfruttando la piattaforma Ethereum [1] e il linguaggio di programmazione Solidity [5].

Attraverso l’utilizzo della DApp gli utenti avranno la possibilità di provare un processo di autenticazione sicuro e affidabile, inoltre potranno noleggiare o cedere i propri abbonamenti digitali.
Le transazioni e i noleggi saranno registrati sulla blockchain Ethereum, garantendo la massima trasparenza e sicurezza. Queste funzionalità potranno essere utilizzate mediante Metamask [3], una popolare estensione del browser che facilita l’interazione con la blockchain Ethereum.

1.1 Area personale

Nella schermata è illustrata l’area personale raggiungibile a ciascun utente dopo aver completato la fase di registrazione.
E` possibile consultare le informazioni come la quantità di token disponibili, le piattaforme associate ed è inoltre possibile seguire lo stato di ogni noleggio effettuato. Infine si possono acquistare e vendere token per poter pagare i noleggi.

Figura 1: Schermata dell’area personale

1.2 Pagamento dei noleggi

I pagamenti per i noleggi sono stati gestiti attraverso l’uso della tokenizzazione, in particolare è stato sviluppato un token ERC20, di cui dopo vedremo la definizione.
L’uso di un token ERC20 offre una maggiore flessibilità nel pagamento e nel noleggio di account, consentendo agli utenti di utilizzare criptovalute per accedere ai servizi digitali desiderati.

Figura 2: Pagamento di un noleggio tramite ERC20 e metamask

1.3 Noleggiare un servizio digitale

Inizialmente l’utente dovrà selezionare l’account da cui desidera noleggiare una piattaforma, tenendo presente che non è possibile noleggiare il proprio account. Successivamente, sarà necessario scegliere una delle piattaforme associate all’ account selezionato e selezionare l’orario desiderato dal calendario, per poi confermare il noleggio del servizio digitale.

Figura 3: Scelta dell’account per noleggiare un servizio

Figura 4: Scelta del servizio

Figura 5: Scelta della data e ora e conferma del noleggio

2 Token ERC20

Il token ERC20 [2] è una standardizzazione essenziale perchè consente ai portafogli digitali di supportare una vasta gamma di token senza dover scrivere codice specifico per ognuno di questi. Facilita l’interoperabilità tra diverse applicazioni e portafogli, rendendo la gestione e lo scambio di una varietà di criptovalute basate su Ethereum più semplice.

3 OpenZeppelin

OpenZeppelin [4] rappresenta un framework e una libreria open-source, ampia- mente adottata nell’ambito delle blockchain e degli smart contract, utilizzato particolarmente su Ethereum. Questa struttura mette a disposizione una serie di strumenti e risorse finalizzate a semplificare il processo di sviluppo e la sicurezza degli smart contract, mirando a garantire la solidità e la resistenza alle vulnerabilità dei contratti.

4 Progettazione e Architettura

4.1 Architettura

Figura 6: Architettura

L’architettura del sistema comprende un frontend, un backend, un databa- se NoSQL e, infine, la blockchain Ethereum. Come illustrato nel diagramma architetturale, il frontend comunica sia con il backend che con la blockchain. Per assicurare un’esperienza utente fluida e garantire l’esecuzione corretta delle

transazioni e delle operazioni, è essenziale interagire direttamente con le API dei contratti intelligenti implementati sulla blockchain. L’interazione con il backend consente il controllo dell’archiviazione dei dati relativi alle piattaforme coinvolte. Il backend si connette direttamente a un database NoSQL, facilitando il salvataggio e il recupero dei dati pertinenti alle piattaforme.

Al fine di evitare costi superflui, i dati delle piattaforme sono stati archiviati su un database anzichè sulla blockchain, poichè essa rappresenta un registro distribuito e immutabile, ne deriva un costo elevato. Pertanto, risulta più conveniente utilizzare un database tradizionale per immagazzinare dati che non richiedono le specifiche caratteristiche di condivisione e immutabilit`a offerte dalla blockchain.

4.2 Progettazione

Durante la progettazione del contratto intelligente, e’ emersa la necessita’ di gestire in modo dinamico i dati degli utenti. Per affrontare questa esigenza, abbiamo utilizzato due strutture dati di tipo mapping. Nella prima struttura, associamo un numero agli indirizzi Ethereum degli utenti che si registrano alla DApp. Questo numero funge da chiave per accedere alla seconda struttura dati, la quale memorizza le informazioni riguardanti noleggi e piattaforme per ciascun utente. Questo approccio di associazione agevola un accesso rapido e efficiente ai dati.

4.3 Conclusioni

In conclusione, in questo articolo sono state presentate alcune funzionalit`a dell’applicazione sviluppata tra cui un nuovo sistema di noleggio di abbonamenti basato sulla blockchain e sull’utilizzo della tokenizzazione. Per gli sviluppi futuri verrà aggiunta la funzionalità per la condivisione su abbonamenti multi-account che potrebbe ampliare ulteriormente l’utilizzo di questa DApp.

Riferimenti bibliografici

  1. [1]  Ethereum. https://ethereum.org/it/developers/docs.
  2. [2]  Fabian vogelsteller fabian@ethereum.org, vitalik buterin vita- lik.buterin@ethereum.org, ”erc-20: Token standard,” ethereum improvement proposals , n. 20, novembre 2015. https://eips.ethereum.org/ EIPS/eip-20.
  3. [3]  Metamask. https://en.wikipedia.org/wiki/MetaMask.
  4. [4]  Openzeppelin. https://docs.openzeppelin.com/.
  5. [5]  Solidity. https://docs.soliditylang.org/en/v0.8.21/.

Link github del progetto

https://github.com/ExcentioSRL/onchainIdP-dApp

https://github.com/ExcentioSRL/onchainIdP-backend

Author: Matteo Marengo