Nozioni basilari di coding - Smart Contract per la Notarizzazione

In questa pagina trovi...

Prima di iniziare…Se non l’hai ancora fatto, ti suggerisco di leggere la pagina “Muovere i primi passi” nella quale, oltre ad essere illustrati alcuni concetti basilari (che verranno dati per assodati), sono indicati gli strumenti di lavoro necessari alla scrittura del codice. 

In questa pagina trovi…la descrizione passo passo del percorso da compiere per scrivere il tuo primo smart contract. Partendo da zero scriveremo il codice necessario a creare uno smart contract di notarizzazione e analizzeremo il significato di simboli e comandi necessari per interagire con Solidity. Il percorso termina con la pubblicazione del contratto sulla blockchain di Ethereum.

Nozioni basilari di coding - Smart Contract per la Notarizzazione

Come primo passo in questo mondo ti propongo l’analisi di uno degli Smart Contracts(SCs) più diffusi.
Cosa significa “notarizzare”?
In sostanza è l’operazione con la quale, registrando dei dati all’interno di una blockchain(BC), si crea un vincolo indissolubile con essa, rendendo possibile certificare l’esisenza di un determinato documento ad una precisa data ed ora. L’utilità di tale funzione è stata sfruttata fin dai primi istanti di vita delle BCs, in quanto si configura come un procedimento rapido e molto economico.
Certo è che non si tratta necessariamente di uno Smart Legal Contract(SLC) non essendoci effettivamente l’incontro della volontà di due o più parti, ma ritengo sia un importante SC da analizzare affinché ti sia chiaro come operano le piattaforme di notarizzazione esistenti e come il software interagisce con la blockchain. È inoltre uno dei contratti più semplici da realizzare, questo ci permetterà di muovere i primi passi in Remix con una certa agilità.

Se ti stai chiedendo quale sia il valore giuridico attribuito dalla legge italiana alla notarizzazione su blockchain, ti basterà andare alla sezione “Quadro Normativo“, nella quale viene troverai l’analisi della legge n. 12/2019 e di ulteriori norme.

Per realizzare questo semplice SC, seguiremo quanto definito dalla già citata guida ufficiale di Solidity. Nelle schede sottostanti sono riportati i principali passaggi da seguire. 

Avviamo Remix e creiamo un nuovo contratto chiamandolo “notarizzazione.sol”.

Figura 1
Clicca per ingrandire – Figura 1

Andiamo nella pagina del compilatore, selezioniamo la versione “0.7.4” e spuntiamo “Auto compile” come già visto nella pagina “Muovere i primi passi“. Scriviamo quindi la nostra prima riga di codice “pragma solidity ^0.7.4”.
Cosa abbiamo appena scritto? Stiamo indicando quale versione del compilatore debba essere utilizzata, così che non possano esserci problemi di interpretazione del codice. Ogni versione differisce dalla precedente in qualche aspetto; un codice interpretato con la versione sbagliata potrebbe non funzionare, o peggio, non essere sicuro.
Come puoi notare “pragma solidity” e il numero della versione hanno colorazioni differenti, questo perché il compilatore riconosce in quelle parole e nei numeri che le seguono un particolare significato, e ce lo comunica con i colori.
Cosa significa il simbolo “^” prima dei numeri? L’apice indica che il codice sarà interpretabile con le versioni delle minor release quindi da 0.7.1 a 0.7.9, ma non 0.6 o 0.8.
Quali altre informazioni ci comunica il compilatore?
Come puoi notare ci sono ben 3 alert rossi che ci avvertono di un errore. Tuttavia è anche così gentile da spiegarci l’errore (Expected “;”). Devi sapere che, similmente a Java, ogni riga di istruzioni deve terminare con il “;”. Quindi non dimenticarlo!

Figura 2
Clicca per ingrandire – Figura 2

Ora che hai inserito il punto virgola, cosa noti?
Gli alert rossi spariscono (se cosi non fosse controlla di aver attivato l’auto compile), tuttavia compaiono 2 alert arancioni.

Figura 3
Clicca per ingrandire – Figura 3

Ci viene segnalata la necessità di inserire un License-Identifier.
Gli alert arancioni non impediscono di proseguire nella programmazione o nell’esecuzione dello SC, tuttavia inseriamo comunque un identifier per licenza copyleft come questo “// SPDX-License-Identifier: GPL-3.0”.

Non approfondiamo in questo momento la tematica delle licenze ma ci limitiamo ad una piccola digressione: dalla versione 0.6.8 Solidity ha introdotto l’indicazione SPDX-License-Identifier, la ragione è che spesso nel mondo degli SCs viene usata la funzione “import” per contratti esterni. Ad esempio i famosi SCs di Openzeppelin (che puoi reperire su GitHub) hanno come identifier “// SPDX-License-Identifier: MIT “. Per comprendere il contenuto della licenza ti sarà sufficiente cercarla all’interno della SPDX License List.

L’inserimento di questa riga di codice mi da l’occasione di spiegarti una delle funzioni più importanti e comuni alla maggior parte dei linguaggi di programmazione: il commento al codice. Vediamo quindi di cosa si tratta con un paio di esempi.

Figura 4
Clicca per ingrandire – Figura 4

Il commenti al codice sono delle indicazioni che vengono scritte dal programmatore ma ignorate dalla macchina durante l’esecuzione. Il compilatore assegna una particolare colorazione (grigio chiaro) per ricordarci che il contenuto non verrà eseguito, per tale ragione in assenza del punto e virgola finale non compare alcun alert.
Ma a cosa serve quindi?
Il commento è una parte del codice informatico che il programmatore inserisce come guida.
Guida per chi? Per se stesso, in quanto può risultare complesso ricordare la funzione di ogni struttura inserita; e guida per chiunque legga il codice senza conoscerne il contenuto e le intenzioni dello sviluppatore. Risulta quindi di particolare utilità in quei casi in cui un software viene realizzato da diverse persone. 

Una delle critiche maggiormente sollevate dal mondo giuridico riguarda la limitata intellegibilità del contratto scritto in linguaggio informatico. Come fanno le parti a comprendere ciò che stanno firmando? Com’è possibile per giudici e avvocati analizzare le volontà espresse dalle parti al momento della sottoscrizione ed eventuali difformità tra quanto firmato e quanto voluto?
Il commento gioca un ruolo fondamentale in quanto permette alle parti di esprimersi con la propria lingua. Questo diviene un ausilio fondamentale in ambito giuridico. Attraverso la funzione di commento è dunque possibile:

  • spiegare il funzionamento del codice informatico
  • esprimere un particolare intento in linguaggio naturale
  • individuare agilmente errori logici
  • definire concetti giuridici
  • favorire l’interpretazione
  • facilitare la risoluzione delle controversie

Scriviamo quindi un commento iniziale per chiarire quale sia il contenuto del codice che seguirà: “Questo è uno smart contract di notarizzazione e viene realizzato senza finalità commerciali.”

A questo punto possiamo iniziare la scrittura dello SC vero e proprio.

Figura 5
Clicca per ingrandire – Figura 5

Il termine “contract” indica che stiamo scrivendo uno SC, dovrà quindi essere sempre presente. Ad esso segue l’identificatore ossia un nome, scelto arbitrariamente da colui che sviluppa il programma, per indicare la classe “contratto”. Seguono le parentesi graffe, che verranno chiuse all’ultima riga dello SC, dovranno infatti contenere l’intero codice.
Ora dobbiamo inserire al prima variabile del nostro contratto.
Cosa sono le variabili? Le variabili sono degli “oggetti” che possono contenere una determinata informazione. Vi sono molti tipi di variabili, ad esempio:

  • uint – indica un numero intero positivo (es. 3, 26, 100929)
  • bool – indica un valore booleano (true/false)
  • string – un insieme di caratteri (Es. “Mario Rossi”, “Roma”, “qwerty”)

Oltre a questi ve ne sono molti altri, alcuni sono comuni a tutti i linguaggi di programmazione, altri sono specifici di Solidity (consulta la guida Solidity per conoscere tutti i tipi di dato). Quando uno di questi dati viene definito in modo da mantenere il medesimo valore per tutta l’esecuzione del programma prende il nome di costante.
Cosa deve fare il nostro smart contract?
Deve poter registrare su blockchain una stringa. Il nostro obiettivo è quello di trasformare i nostri documenti in codice hash e notarizzare il codice ottenuto. Il primo oggetto necessario è quindi una variabile stringa. Scriviamo quindi “string”, che viene subito riconosciuto dal compilatore e colorato di azzurro, associamo l’identificatore (nel mio caso scelgo “datoRegistrato”) e inseriamo infine il punto e virgola.
Ora creiamo la funzione per registrare il dato. Che cos’è una funzione? Una “function” è una particolare struttura che ci permette di interagire con lo smart contract e definire il suo comportamento.
Esistono infiniti tipi di funzioni in quanto il contenuto lo determina colui che sviluppa lo SC; tuttavia possiamo dividerle in due categorie in base alla loro interazione: le funzioni scrittura e quelle lettura.
Devi tenere a mente che in ambito blockchain l’esercizio di funzioni scrittura comporta sempre una spesa in Ether. Le funzioni lettura invece, non richiedendo alcuno sforzo ai nodi miners, per tale ragione possono essere esercitate gratuitamente.
Quella che scriviamo noi è una funzione scrittura in quanto vogliamo aggiungere alla blockchain qualcosa che prima non esisteva. Scriviamo quindi:
“function notarizzaDato(string memory _dato) public { datoRegistrato = _dato; }”.
Qui sotto puoi vedere il codice senza commenti [figura 6]. Fai uno sforzo di immaginazione e prova a capire quale sia il ruolo dei vari termini. Prosegui all’immagine successiva [figura 7] per leggere la spiegazione.

Figura 6
Clicca per ingrandire – Figura 6

Ci hai capito qualcosa? Vediamolo assieme.

Figura 7
Clicca per ingrandire – Figura 7

Creiamo una funzione esercitabile da chiunque (public) chiamata “notarizzazioneDato”. La funzione prende in input un valore che può essere sia numerico che in lettere (string), che viene memorizzato temporaneamente (memory), e al quale attribuiamo il nome di “_dato”. Apriamo quindi le parentesi graffe (che chiudiamo al termine della funzione) per inserire il comando che vogliamo impartire ossia far registrare all’interno della variabile di stato il valore che attribuiamo alla variabile locale.
Qual é la differenza tra variabile di stato e variabile locale? Le variabili di stato, generalmente inserite nella parte iniziale dello SC, sono degli oggetti richiamabili all’interno di qualsiasi funzione. Le variabili locali sono invece degli oggetti che vengono creati all’interno delle funzioni, per tale ragione non possono essere utilizzati all’esterno o richiamati da altre funzioni dello SC.

Quanto inserito è essenzialmente il contenuto minimo necessario per il nostro smart contract, passiamo quindi all’esecuzione del programma. Andiamo alla sezione Deploy & Run Transactions, se ti sei perso l’introduzione alle funzioni base di questa schermata vai alla pagina “Muovere i primi passi” alla voce “Strumenti per lo sviluppo – Remix”.
Seguiamo quindi questi passi [figura 8]: selezioniamo l’ambiente virtuale JavaScript VM, controlliamo che alla voce “contract” sia presente il contratto “Notarizzazione” (o il nome che hai deciso per il tuo contratto), espandiamo e liberiamo il box della console[B-C], e infine premiamo Deploy [D].

Figura 8
Clicca per ingrandire – Figura 8
Figura 9
Clicca per ingrandire – Figura 9

Ecco fatto. Abbiamo appena mandato in esecuzione uno SC di notarizzazione (in ambiente virtuale). Vediamo quindi come analizzare le nuove informazioni a nostra disposizione [figura 9]. Una spunta verde [B] ci comunica che l’operazione è stata eseguita con successo e nella sezione Deployed contracts compare ora il nostro contratto. Premiamo quindi la freccetta [A] per accedere a tutte le funzioni disponibili (nel nostro caso solo una), e la freccia della console [C] per visualizzare i dettagli dell’operazione.

Analizziamo quindi i dati che compaiono. Ricorda che queste informazioni divengono molto importanti nel caso in cui si faccia il deploy direttamente nella blockchain di Ethereum.

Figura 10
Clicca per ingrandire – Figura 10

Nella figura 10, alla lettera [A] è possibile reperire l’hash dell’operazione. A cosa serve? Per ora a nulla ma, se avessimo fatto il deploy direttamente su BC, attraverso questo dato potremmo risalire all’operazione specifica, visualizzando tutte le informazioni che ora la console ci mostra. Di seguito troviamo [B] l’address del contratto; sicuramente lo sapevi già ma è bene ricordare che con l’esecuzione del SC, questo assume una sua chiave pubblica (nessuna chiave privata viene creata) che permetterà di individuare le operazioni che verranno compiute con esso e da esso. Alla lettera [C] la nostra chiave pubblica che ovviamente è quella del wallet selezionato tra quelli disponibili. Vengono poi visualizzati i costi in Gas che devono essere sostenuti per ricompensare i nodi miners per lo sforzo computazionale. Nel caso dovessi finire tutti i 1000 Ether messi a disposizione dagli account virtuali, sarà sufficiente ricaricare la pagina per ottenere altri 10 account fittizi. Per capire a quanto equivale la spesa possono essere usati siti quali EthGasSation. Infine è possibile vedere la funzione da noi creata “notarizzaDato” (lettera [E]). Il nome della funzione viene visualizzato in un tasto arancione in quanto si tratta di una funzione di scrittura. Diversamente, nel caso vi fosse una funzione lettura il tasto assumerebbe colorazione azzurra.
Procediamo quindi con una notarizzazione. Come avrai già capito, non vi è la possibilità di caricare direttamente un file. Così come avviene con i diversi servizi di notarizzazione presenti online, sarà necessario generare un codice hash del file che intendiamo registrare.
Sono sicuro che ti sia già capitato di avere a che fare con la funzione di hash, ma per completezza faccio una piccola digressione, qualora conoscessi bene l’argomento puoi saltarlo tranquillamente.

L’hash è l’impronta di un file. Tramite questo codice non è possibile ricostruire il documento di origine tuttavia può essere utilizzarlo per verificare l’autenticità di un file rispetto l’originale. Sicuramente ti sarà capitato di scaricare un software o un’immagine disco incappando nella la scritta “To verify the integrity of your file, generate its SHA256 sum and compare it to the one found in the file…”. Anche la modifica di un solo bit comporta la generazione di un codice hash totalmente differente permettendo così di scoprire eventuali file contraffatti.
Per calcolare il codice hash esistono una pluralità di siti come ad esempio PasswordsGenerator.net, che mette a disposizione diversi algoritmi quali MD5, SHA1, SHA256, SHA512. In alcuni di questi siti è possibile fare direttamente l’upload del file per il quale si vuole calcolare l’hash. Questa opzione è fortemente sconsigliata. Infatti, se il contenuto del file è riservato, non è una scelta saggia inviare queste informazioni salvo l’essere certi della professionalità del servizio. Calcolare l’hash è inoltre un’operazione molto semplice, vediamo quindi come farlo usando come algoritmo SHA256. Creo un file che rappresenta il contenuto riservato, potrebbe essere un romanzo segreto, una canzone inedita o la foto di un tradimento, nel mio caso è “LoremIpsum.pdf”.

Se stai usando Linux: apri nel terminale la cartella che contiene il file  e digita “sha256sum” e il nome del file, premi quindi “Invio”.

Figura 11
Clicca per ingrandire – Figura 11

Se stai usando Windows: avvia PowerShell dal menu di Start, portati nella cartella che contiene il file e digita “get-filehash -Algorithm sha256” e il nome del file.

Figura 12
Clicca per ingrandire – Figura 12

Ora che abbiamo ottenuto il nostro codice hash, nel mio caso “37EE9FD9DD485A0C707A825A0CDB7A66C809B6013918A978F829CBC45F112E7F ” possiamo inserirlo nel campo “string_dato” e premere “notarizzaDato”.

Figura 13
Clicca per ingrandire – Figura 13

L’esercizio della funzione avviene con successo (figura 13,[A]). L’hash della transazione [B] deve essere memorizzato per poter risalire in futuro ai medesimi dati. Si può leggere infatti che da parte di un’address specifico [C] è stato inoltrata allo SC la richiesta di eseguire una specifica funzione [D] e quale fosse il contenuto della richiesta [E]. La funzione creata potrà essere esercitata un numero infinito di volte, dovendo chiaramente sostenere il costo dell’operazione ad ogni utilizzo.
Lo smart contract manterrà memorizzati i dati al suo interno? No, La transazione viene memorizzata nella blockchain e non nello SC. Il nostro SC infatti sovrascrive il valore precedente ogni volta che utilizziamo la funzione “notarizzaDato”. Questo significa che il contratto è in grado di mantenere in memoria solamente l’ultimo dato, il quale tuttavia, non essendo predisposta un’apposita funzione di lettura, sarà in ogni caso inaccessibile.
Ricorda inoltre che una volta fatto il deploy dello SC, questo non è più modificabile. Nonostante sia stato creato da noi, ha ora un suo address pubblico e, non esistendo una chiave privata, non sarà possibile aggiungere una nuova funzione o nuove variabili.

Per tale ragione allo smart contract viene spesso attribuito il carattere di “immutabile“, sostenendo che questo erediti la caratteristica dalla blockchain nella quale viene registrato. Per utilizzare questo termine bisogna muoversi con estrema cautela.
Il codice dello smart contract è realmente immutabile? Come avrai osservato lo smart contract è dotato di una parte statica e di una dinamica. Se è vero che il codice che lo compone non può essere modificato dopo il deploy è anche vero che l’interazione attraverso le funzioni permette di modificare parte di questo codice. Puoi definire la variabile “datoRegistrato” come immutabile? Sicuramente no, in quanto può variare ogni volta che viene esercitata la funzione “notarizzaDato”. Sull’argomento torneremo in seguito in quanto ricopre un ruolo assai importante, soprattutto se vogliamo attribuire ad uno smart contract il carattere “Legal”. 

Per concludere questo percorso ritengo sia fondamentale vedere come avviene la pubblicazione dello SC all’interno della blockchain reale di Ethereum. Ti invito a fare lo stesso, non fermarti alla teoria. Per riuscire ad acquisire le conoscenze necessarie alla formulazione di un pensiero critico è essenziale scendere in campo e testare le difficoltà concrete riscontrabili nell’utilizzo dello strumento. 

Cosa ti serve per fare il deploy su Ethereum?
1- Una frazione di Ether, l’equivalente di circa 20 euro.
2- Un’estensione per browser Chrome di nome Metamask.
Se hai acquistato degli Ether da exchange come Coinbase o Binance molto probabilmente hai la moneta virtuale all’interno dell’account fornito dal servizio. Metamask è un’estensione che ti permette di creare un wallet Ethereum e interagire con diverse dApps direttamente dal browser. Installa quindi Metamask e configura un wallet. Inserisco di seguito un paio di schermate esemplificative, ma l’utilizzo è veramente intuitivo non serve una spiegazione passo passo. Segui le indicazioni del programma e soprattutto non scordare di memorizzare le 12 parole chiave per accedere all’account nonché chiave pubblica e privata degli account che crei. Trasferisci quindi gli Ether necessari per l’operazione alla chiave pubblica del wallet scelto.

Figura 14
Clicca per ingrandire – Figura 14

Torna quindi su Remix, ricarica la pagina, apri nuovamente il contratto “notarizzazione”, scegli la giusta versione di compliatore e vai alla sezione “Deploy & Run Transaction”. Questa volta come “Environment” dovrai selezionare Injected Web3″ (figuta 15, lettera [A]). A questo punto si aprirà l’estensione Metamask e ti chiederà di selezionare l’account per interagire con Remix.

Figura 15
Clicca per ingrandire – Figura 15

Ora sei effettivamente collegato alla blockchain Ethereum e te lo conferma la dicitura “Main Network” sotto alla voce “Environment”. Controlla che non vi siano errori nel testo dello smart contract, pulisci il campo del terminale (figura 16, punto 3) e infine premi su Deploy.

Figura 16
Clicca per ingrandire – Figura 16

A questo punto si aprirà una finestra di dialogo contente il prezzo stimato per l’operazione. Dopo aver premuto su “Confirm” sarai rimandato a Metamask per la conferma definitiva.

Figura 17
Clicca per ingrandire – Figura 17

Come puoi vedere nella figura 18, l’operazione resta in uno stato di pendenza [A] che può durare qualche minuto. Il tempo dipende dalla velocità con la quale l’operazione richiesta viene registrata dai miners. Appena questo avviene compare a schermo un messaggio di avvenuta registrazione [B].

Figura 18
Clicca per ingrandire – Figura 18

Nella schermata del terminale potrai quindi vedere tutte le informazioni dell’operazione: l’hash della transazione (figura 19, [A]), la tua chiave pubblica [B] e il costo sostenuto [C].

Figura 19
Clicca per ingrandire – Figura 19

Procediamo quindi con la prima interazione con lo SC “Notarizzazione” e ripetiamo quanto avevamo fatto in sede simulata. Interagiamo con la funzione “notarizzaDato” inserendo il codice hash calcolato in precedenza (figura 20, [A]), nel mio caso quindi “37EE9FD9DD485A0C707A825A0CDB7A66C809B6013918A978F829CBC45F112E7F” che è l’impronta del file “LoremIpsum.pdf”.
Essendo una funzione di scrittura ci verrà richiesto di procedere con il pagamento (figura 20 [B e C]).

Figura 20
Clicca per ingrandire – Figura 20

Attendiamo il tempo necessario per l’operazione e alla fine otteniamo il nostro report con indicate tutte le informazioni che ormai avrai imparato a riconoscere. Salviamoci in particolare un dato, quello della chiave pubblica del contratto così da verificare direttamente su blockchain cosa sia possibile vedere della nostra interazione.
Address del smart contract “Notarizzazione”: 0x2562aCcAC438dc59979BA347890775Ee86Dcb55F. (figura 21, [A])

Figura 21
Clicca per ingrandire – Figura 21

Apriamo il browser e raggiungiamo il sito di Etherscan.
Che cos’è Etherscan? É un explorer, ossia un sito web attraverso il quale è possibile consultare una blockchain, leggendo quali operazioni siano in essa registrate e quali siano in stato di pendenza.
A noi interessa una transazione in particolare, di questa abbiamo infatti  a disposizione il “transaction hash”, tuttavia vedremo come sia possibile risalire ad essa tramite la chiave pubblica dello smart contract “Notarizzazione”. Le blockchain pubbliche sono infatti caratterizzate da un’elevata trasparenza e, come vedrai a breve, è possibile risalire facilmente allo storico delle transazioni.
Inserisci quindi l’address del contratto nel campo di ricerca, il mio è “0x2562aCcAC438dc59979BA347890775Ee86Dcb55F”.
Trovato! E guarda quante informazioni! É possibile visualizzare il saldo del contratto, l’address pubblico del creatore e tutte le transazioni avvenute. Nel mio caso ve ne sono solo due: quella che ha determinato la creazione del contratto e quella dell’esercizio della funzione notarizzaDato, utilizzata per registrare il codice hash del file “LoremIpsum.pdf”. Andiamo quindi a vedere l’operazione compiuta cliccando su Txn Hash (figura 22, [A]).

Figura 22
Clicca per ingrandire – Figura 22

Tutte informazioni visualizzate nella casella del terminale di Remix sono ora visibili direttamente da explorer, è inoltre visualizzata anche la data e l’ora in cui l’operazione è stata registrata dal miner. Per vedere quale funzione è stata esercitata è sufficiente cliccare su “see More” (figura 23, [A]): oltre al nome della function [B] è possibile leggere anche la stringa notarizzata (sarà necessario selezionare “View Input As” e scegliere la codifica UTF-8 [C]). 

Figura 23
Clicca per ingrandire – Figura 23

Un importante quesito da porsi riguarda la visibilità del codice dello smart contract. É possibile per chiunque consultare il codice scritto in Solidity? Non appena viene fatto il deploy il codice non può essere letto, infatti  è presente solamente in forma numerica (figura 24). Tuttavia se sei il creatore del contratto e vuoi che il codice sorgente sia liberamente visualizzabile puoi cliccare su “Verify and Publish”. Una volta effettuata l’operazione delle spunte verdi indicheranno che il contratto è stato verificato e il codice sorgente sarà così leggibile da chiunque. La scelta di rendere visibile o meno il codice dello SC dipende dalle finalità per le quali è stato sviluppato: se il contratto è rivolto al pubblico sarà necessario che coloro che vogliono esercitare una funzione possano leggere il codice sorgente, solo in questo modo conosceranno le implicazioni della scelta effettuata.

Figura 24
Clicca per ingrandire – Figura 24

Considerazioni conclusive

Complimenti, sei giunto al termine di questo percorso introduttivo. Possiedi ora le conoscenze necessarie per iniziare il tuo personale percorso esplorativo, non dimenticarti dell’importanza della guida ufficiale di Solitiy in quanto rappresenta uno strumento eccezionale per approfondire le proprie conoscenze.

La scrittura di questo semplice codice ci ha permesso di verificare il funzionamento di alcune tra le principali strutture presenti nella maggior parte degli SCs. Ripercorriamo brevemente quanto è emerso dalla creazione del contratto soffermandoci con qualche considerazione aggiuntiva. 

Intellegibilità
Nonostante lo smart contract sia uno strumento prettamente informatico dispone in modo nativo di elementi che (utilizzati correttamente) favoriscono fortemente la possibilità di comprenderne contenuto e funzionamento. Il commento al codice rappresenta sicuramente uno strumento indispensabile in ambito giuridico permettendo l’espressione di contenuti in linguaggio naturale; non meno importanti sono gli identificatori, la cui scelta può contribuire a rendere inequivocabile il significato di variabili e funzioni.

Immutabilità.
Abbiamo osservato la duplice natura dello smart contract, gli aggettivi “statico” e “dinamico” si prestano entrambi a descrivere il suo funzionamento. É statico ed immutabile il codice del quale viene fatto il deploy; è dinamico e modificabile il contenuto delle variabili oggetto delle functions. Lo smart contract nasce per essere eseguito dalla EVM, possiamo quindi attribuire ad esso il carattere di immutabile semplicemente perché registrato su blockchain? Risulta essenziale un’analisi integrale del codice sorgente per comprendere quali siano le parti che ammettono una modifica. Le ripercussioni in ambito giuridico sono significative sia in termini di garanzia per le parti, che l’accordo siglato non possa essere modificato senza il loro consenso, sia per la tutela dei dati personali. Per quanto riguarda quest’ultimo aspetto, hai visto in prima persona come sia facile realizzare un contratto che non memorizzi in modo permanente i dati e quindi nel rispetto delle disposizioni del GDPR; tuttavia abbiamo anche visto come l’utilizzo di BC pubblica renda visibile in modo permanente qualsiasi tipo di interazione.

Trasparenza.
Se lo smart contract permette di scegliere quali informazioni memorizzare, i dati originati dall’interazione con esso sfuggono al nostro controllo. Determinante è quindi la scelta della piattaforma da utilizzare in base alle specifiche necessità.  Abbiamo osservato come utilizzando una blockchain pubblica vengano memorizzate e visualizzate pubblicamente tutte le informazioni originate dall’esercizio della function, quali address del richiedente, nome e oggetto della transazione, data di esercizio, saldo del richiedente e costo della transazione. Per quanto concerne invece il codice sorgente dello smart contract abbiamo constatato la necessità di effettuare una specifica operazione di verifica per renderlo visibile al pubblico.

Interazione.
Infine, abbiamo visto che l’interazione con lo smart contract avviene tramite functions, l’esecuzione di queste richiede necessariamente di essere in possesso di un wallet. Sull’argomento torneremo più avanti, per ora ci limitiamo ad osservare come nell’esecuzione del contratto realizzato la chiave pubblica sia stato l’unico mezzo per identificare colui che ha esercitato la funzione. 

Coming Soon: all’interno dei prossimi contenuti scenderemo più in profondità per verificare come facciano gli elementi essenziali del contratto (art. 1325 c.c.) a trovare posto all’interno del codice Solidity.