The blockchain giant-impact: elezioni con YouVote utilizzando Ethereum
La blockchain come strumento per la risoluzione delle controversie “intra-nazionali”…
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à
- Non esistono modificatori
- Non è possibile effettuare chiamate a funzione ricorsive
- I cicli sono sempre ben definiti, non ne esistono infiniti
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”.
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: