The blockchain giant-impact: elezioni con YouVote utilizzando Ethereum

La blockchain come strumento per la risoluzione delle controversie “intra-nazionali”…

Giuseppe Palazzolo
Mar 18 · 3 min read

Il primo esperimento per quanto riguarda l’utilizzo di YouVote è stato effettuato con Ethereum.

E visto che di esperimento di tratta abbiamo deciso di non utilizzare Solidity.

Vyper

Vyper è un liguaggio di programmazione basato su python, contract-oriented, il cui scopo è scrivere smart contract che girano sulla Ethereum Virtual Machine.

Questo linguaggio è stato stato creato per ridurre al minimo le vulnerabilità degli Smart Contract e facilitarne la scrittura. Per fare ciò sono stati imposti alcuni limiti. Per dare un’idea, una delle principali differenze rispetto a Solidity è che Vyper non è Turing complete, ciò comporta che alcune classi di problemi non sono affrontabili utilizzandolo.

Alcune interessanti differenze sono:

  • Non esiste l’ereditarietà

Per ulteriori dettagli è possibile leggere la documentazione.

Se vi state chiedendo se sia “meglio Vyper o Solidity?”, la risposta è la stessa che si può dare alla domanda “meglio Bitcoin o Ethereum?”. E cioé “dipende”.

Vyper-Solidity, image from here

Uno degli aspetti positivi è che, conoscendo python, non bisogna imparare un nuovo linguaggio e se non si dovesse conoscere è una buona scusa per impararlo. Per il resto Vyper è molto restrittivo, non lascia nulla al caso. Un aiuto importante mi è stato dato dall’estenzione per VSCode, che compila il codice e rileva gli errori.

YouVote: Smart Contract

Lo Smart Contract è stato scritto seguendo le linee guida descritte sul post che parla della genesi di YouVote.

L’unico limite è stato quello di dover limitare superiormente in anticipo il numero di partecipanti all’elezione in quanto i cicli devono essere sempre ben definiti. In caso di un numero inferiore di partecipanti il ciclo verra interrotto in questo modo:

for index in range(MAXIMUM):
if index < self.ACTUAL_MAXIMUM:
...
else:
break

Allo scadere della votazione il client chiamerà la funzione di restituzione dei risultati per ogni partecipante:

@public
@constant
def getProposalResult(index:int128) -> int128:
assert self.electionExpire < block.timestamp, 'Election not expired yet'
return self.proposals[index].voteCount

Per la compilazione e il test del contratto sono stati utilizzati Truffle e Truper, un tool che permette di compilare i contratti Vyper e utilizzarli con Truffle.

Su GitHub è possibile visionare l’intero repository.

YouVote: Client

La PWA utilizza le API per interagire con il contratto attraverso una classe javascript dedicata e l’estenzione browser Metamask.


Note

Durante la scrittura dello Smart Contract e dell’implementazione del client sono stati effettuati svariati esperimenti. Il deploy dei contratti è stato effettuato su Ganache e il collegamento con YouVote effettuato tramite MetaMask.

Ci impegneremo nel rendere l’applicazione al più presto disponibile su IPFS, così da poterla provare voi stessi.

In attesa del prossimo post che parlerà dell’implementazione di YouVote su Scrypta, trovate qui di seguito i link alle precedenti puntate di questa serie:

vivido-it

Blockchain on demand software company

Giuseppe Palazzolo

Written by

vivido-it

vivido-it

Blockchain on demand software company

More From Medium

More on Elections from vivido-it

More on Blockchain from vivido-it

More on Blockchain from vivido-it

The blockchain giant-impact: YouVote

More on Blockchain from vivido-it

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade