Muovere i primi passi

In questa pagina trovi...

Quali sono i requisiti conoscitivi minimi che deve possedere un giurista per approcciarsi al mondo degli smart contracts?
In questa sezione, interamente dedicata al coloro che per la prima volta si avvicinano a questo mondo, troverai una breve spiegazione in merito a quali siano gli strumenti necessari per scrivere uno smart contract, cosa sia uno linguaggio di programmazione, e quali siano le caratteristiche di “Solidity”, il principale linguaggio per sviluppare smart contracts nella blockchain Ethereum.

Conoscenze informatiche richieste al giurista

Inizio con una premessa. Non credo affatto in un futuro nel quale la figura del giurista possa coincidere con quella del programmatore. Le giornate sono fatte di 24 ore e sfido chiunque a poter eccellere in due discipline così differenti. Il primo ostacolo per noi giuristi è la forma mentis, il secondo l’esperienza. Aver seguito un corso o aver letto un manuale di programmazione serve a poco. Ci dobbiamo accontentare di sperimentare per poter maturare quel minimo di conoscenze necessarie per poter dialogare con il mondo dei programmatori, in modo che loro comprendano le nostre esigenze e noi le loro. I primi requisiti che ritengo essenziali per entrare in questo mondo non sono quindi informatici ma caratteriali. É necessario avere pazienza, essere curiosi ed avere una buona apertura mentale, perché spesso dovremo cercare risposte, non ancora date da nessuno, in un mondo del quale conosciamo veramente poco per poterci muovere agilmente. Quasi superfluo, ma lo preciso comunque, è necessario avere una buona conoscenza della lingua inglese, la quasi totalità dei contenuti sono disponibili sono in questa lingua.
Non è essenziale che tu abbia mai scritto del codice, proverò infatti a partire dalle basi, tuttavia se sei un utente che ha difficoltà a scrivere una email, cancellare la cronologia del browser o formattare un hard disk, fossi in te lascerei perdere.
Quali software servono? Nulla, ti basta il tuo browser, meglio se Crome o Firefox. Faremo tutto da li. Per iniziare basta questo, in futuro se vorrai fare il deploy su blockchain del tuo smart contract (cosa che ti consiglio caldamente) ti servirà in aggiunta un wallet con degli Ether, e l’estensione Metamask per il tuo browser.

Il linguaggio di programmazione - Solidity

Cos’è un linguaggio di programmazione?
In modo molto semplice si può dire che sia un insieme di istruzioni, costituite da testo e simboli, finalizzate a far compiere ad un programma determinate operazioni. Si tratta in pratica di una lingua per comunicare con la macchina. Esistono molti linguaggi diversi con peculiari caratteristiche, tali da essere maggiormente adatti a determinati compiti e meno ad altri. Oggi vediamo quali sono le caratteristiche di Solidity, il principale linguaggio di programmazione per smart contracts su blockchain Ethereum. Questo linguaggio è stato proposto nel 2014 da Gavin Wood e sviluppato dal team Ethereum Project’s Solidity capitanato da Christian Reitwiessner.
Come ti ho anticipato nella premessa, dovrai essere curioso e disposto a dedicare del tempo alla ricerca delle informazioni che ti serviranno. Per scoprire che tipo di linguaggio di programmazione sia Solidity partiamo dal tuo nuovo compagno di viaggio, la guida ufficiale, qui troverai tutte le informazioni necessarie per partire da zero.

Nella pagina iniziale Solidity viene descritto come:

Solidity is an object-oriented, high-level language for implementing smart contracts. Smart contracts are programs which govern the behaviour of accounts within the Ethereum state.

Solidity was influenced by C++, Python and JavaScript and is designed to target the Ethereum Virtual Machine (EVM).

Solidity is statically typed, supports inheritance, libraries and complex user-defined types among other features.

Vediamo quindi di analizzare le diverse caratteristiche (se non ti sembra tutto immediatamente chiaro non ti preoccupare, vedrai che iniziando a scrivere codice capirai meglio), riga per riga, come se fosse un testo di legge.

Orientato ad oggetti: significa che è un particolare tipo di linguaggio con il quale è possibile definire degli oggetti software in grado di interagire tra loro. All’interno del codice sarà infatti possibile creare delle classi, ossia delle categorie di oggetti che posseggono le medesime caratteristiche, questo comporta grandi vantaggi in termini di modularità e quindi di semplicità nello sviluppo.
Linguaggio di alto livello: ossia una significativa astrazione del funzionamento del calcolatore e delle caratteristiche del linguaggio macchina. Diversamente dal linguaggio di basso livello, con il quale sostanzialmente si è costretti a parlare la lingua della macchina (come puoi immaginare, con un elevato grado di difficoltà), il linguaggio ad alto livello permette di creare istruzioni attraverso una terminologia facilmente comprensibile dal programmatore, avvicinandosi maggiormente alla logica di ragionamento umano. Conseguenza diretta è che la macchina non sarà in grado di comprendere direttamente quello che lo sviluppatore scrive ma sarà necessario un interprete che prende il nome di compilatore. Ricordati bene di questa figura in quanto sarà subito presente nella prima riga del codice dello smart contract. Come puoi immaginare, i linguaggi di programmazione non sono immutabili, subiscono via via sempre nuove migliorie, per tale ragione sarà necessario dire alla macchina quale versione di compilatore dovrà utilizzare, in modo da essere sicuri che le nostre istruzioni vengano tradotte correttamente.
Programs which govern the behaviour of accounts within the Ethereum state: questo già lo sapevamo, lo smart contract agisce direttamente sugli stati degli account della blockchain Ethereum, questo permetterà infatti il trasferimento di Ether, cosi come di tokens, da un account all’altro. Al primo deploy ti renderai subito conto della limitata interoperabilità della rete, infatti il tuo account Etherum sarà l’unico mezzo attraverso il quale potrai interagire.

C++, Python and JavaScript: sono tra i più famosi e utilizzati linguaggi di programmazione, con essi vengono create applicazioni che utilizzi tutti i giorni. Ti faccio alcuni esempi: con C++ è realizzato Microsoft Office, Google Chrome, WinRar; Python è un linguaggio utilizzato in ambito scientifico per il data mining (analisi di dati), per il back-end dei siti web, e nell’IoT; JavaScript si presta a tanti usi diversi, uno di questi è la creazione di app come ad esempio quella di Facebook.
Solidity is designed to target the EVM: nella rete blockchain ci sono oltre ai nodi miners anche i nodi EVM, sono appunto delle macchine virtuali che si occupano di eseguire gli smart contracts in modo “isolato” rispetto al resto della rete così da garantirne la sicurezza. In ogni caso il codice Solidity è troppo elaborato per essere eseguito direttamente da queste macchine, vi è quindi un processo con il quale viene convertito in istruzioni di basso livello che prendono il nome di opcodes.

Statically typed: significa che il tipo di dato assegnato alla variabile viene verificato durante la fase di compilazione e resta tale per tutta l’esecuzione del programma.
Supports inheritance: l’ereditarietà rappresenta la possibilità di creare delle nuove classi in derivazione a quelle già definite, questo comporta la possibilità di creare una gerarchia di classi nella quale la sottoclasse mantiene metodi e attribuzioni della superclasse.
Supports libraries and complex user-defined types: le librerie sono una sorta di raccolta di funzionalità che possono essere richiamate all’interno del programma permettendo in questo modo di rendere più veloce l’attività di sviluppo. I tipi di dati nei linguaggi di programmazione possono essere predefiniti, derivati e definiti dall’utente permettendo in quest’ultimo caso di soddisfare al meglio le esigenze specifiche.

Queste chiaramente non sono le uniche caratteristiche, ve ne sono altre ma le scopriremo assieme attraverso la scrittura del codice. Prima di proseguire vorrei tornare a farti riflettere sul fatto che Ethereum e Solidity non sono l’unica possibilità per sviluppare smart contracts; tuttavia ho scelto di approfondire questa via perché molto percorsa e, maggiore è l’interesse della community di sviluppatori per un software, maggiori saranno i bug fixes, le informazioni reperibili nonché la possibilità di ricevere supporto. È fortemente consigliato utilizzare l’ultima versione disponibile di Solidity.

Strumenti per lo sviluppo - Remix

Come ti ho anticipato ad inizio sezione, per iniziare a programmare smart contracts non sarà necessaria l’installazione di alcun programma. Sarà sufficiente aprire il browser Chrome e iniziare ad usare Remix, strumento disponibile all’indirizzo https://remix.ethereum.org
Cos’è Remix?
Remix è un IDE, acronimo per integrated development environment. Un ambiente di sviluppo integrato è un unico programma con il quale è possibile compiere tutte le operazioni necessarie per la creazione di un applicativo. Con Remix potremo scrivere il codice, compilarlo, farne il debug ed effettuare il deploy direttamente su blockchain Ethereum. Fondamentale è inoltre la possibilità di provare lo smart contract all’interno di un ambiente simulato, così da verificare che tutto funzioni correttamente prima che sia fatta l’effettiva registrazione su blockchain. Lo strumento è gratuito ed open-source.

Vediamo quindi come si presenta interfaccia del programma [Figura 1].
Aperto il link per Remix ti troverai nella schermata principale. Sulla sinistra il menu [A] per muoversi tra le funzioni e sulla destra l’area di lavoro nella quale visualizzare il codice dello smart contract selezionato.

Alcune indicazioni sulle funzioni che possiamo trovare nella sezione “File Explorers” [Figura 2]. Dal menu [A] è possibile selezionare file e sfogliare le cartelle. Come potrai notare i file di progetto predefinito hanno estensione Solidity (“.sol”). Una volta selezionato il file, questo viene aperto nell’area di lavoro [D] all’interno della quale è liberamente modificabile. Con i tasti funzione [B] è possibile creare nuovi progetti, farne l’upload e aprirne di vecchi. Presta attenzione al fatto che i file presenti, nonché i nuovi progetti che crei, sono salvati nella memoria del browser, quindi cancellando i file di navigazione (quali cronologia, cookies e cache) verranno rimossi. Ricordati quindi di salvarli in locale con un qualsiasi editor di testo.

Passiamo quindi alla sezione “Solidity Compiler” [Figura 3]. Ti ricordi cosa fa il compilatore? Traduce quello che noi scriviamo in un linguaggio che la macchina possa comprendere. Oltre a questo ci fornisce un valido aiuto nella scrittura dello smart contract, evidenziando le parole con specifiche colorazioni (in base alla funzione che svolgono) e segnala diversi tipi di errori. In questa sezione possiamo decidere la versione del compilatore da utilizzare e impostare la compilazione automatica.

Alla sezione “Deploy & Run Transaction” [Figura 4] sarà possibile fare il deploy e il test delle diverse funzionalità dello smart contract. Alla voce “environment”, seleziondo come ambiente di sviluppo “JavaScript Vm”, sarà possibile provare lo SC in un ambiente virtualizzato, senza alcuna spesa in Ether. La piattaforma mette infatti a disposizione 10 account fittizi con all’interno 100 Ether ciascuno [B]. L’impostazione alla lettera [C] permette la selezione di un limite di spesa per l’esecuzione del contratto, mentre alla voce successiva [D] dovrà essere selezionato il contratto con il quale si vuole interagire.

Infine vi è la sezione “Plugin Manager” (indicata dal simbolo della presa elettrica) della quale però ancora non trattiamo. Come suggerisce il nome stesso, all’interno di essa è possibile aggiungere e rimuovere funzionalità aggiuntive, tuttavia non necessarie per uno sviluppo basilare.

Ora che hai compreso quali sono i requisiti necessari e hai familiarizzato con l’interfaccia, non ti resta che andare alla pagina “Nozioni basilari di Coding – Smart Contract per la Notarizzazione” dove troverai le istruzioni per scrivere il tuo primo smart contract.
Che aspetti?! Clicca qui per iniziare.

Ultimo aggiornamento: 05-2021