Questo argomento è stato trattato in blockchains
Introduzione ai contratti
Un contratto è un accorto che specifica alcuni diritti e obblighi giuridicamente vincolanti tra due o più parti. Un contratto, tipicamente coinvolge il permesso di trasferire beni, servizi, denaro o l’impegno di trasferire queste risorse in una data futura.
Introduzione agli smart contract
L’idea degli smart contract nasce per incorporare clausole contrattuali in hardware/software, in modo da rendere un breach costoso o proibitivo. Gli smart contract applicano dinamicamente e verificano il concetto di proprietà e i termini dell’accordo.
Nel contesto della blockchain, uno smart contract è un programma self-executing salvato su una blockchain, in cui i termini dell’accordo o le regole di esecuzioni sono scritte direttamente nel codice. Questi contratti applicano automaticamente ed eseguono le azioni prestabilite quando le condizioni predefinite sono soddisfatte, senza la necessità di intermediari. Ogni nodo della blockchain mantiene ed esegue uno smart contract.
Trasparenza
I termini e condizioni sono accessibili da tutte le parti e il fatto che siano immutabili rende il contratto non contestabile.
Tutti i partecipanti eseguono lo stesso codice, dunque ogni nodo può verificare la logica dello smart contract e viene garantita la tracciabilità totale di tutte le operazioni, ma sussistono delle problematiche per privacy e sicurezza.
Flessibilità
Gli smart contract permettono l’esecuzione di qualsiasi genere di codice che sfrutta l’infrastruttura basata su blockchian. Non c’è bisogno di intermediari per l’esecuzione, anche distribuita, e la fault tolerance.
Struttura
Al minimo, un contratto ha:
- un indirizzo che lo identifica in maniera univoca;
- funzioni che possono essere invocate;
- uno stato interno (es. il valore di una variabile in un dato istante di tempo).
Lo stato interno può essere calcolato in qualsiasi momento eseguendo nuovamente tutta la cronologia delle transazioni.
Ciclo di vita
- Lo smart contract deve essere deployato sulla blockcahin.
- Per eseguire una funzione, è necessario specificare l’indirizzo, il nome della funzione e gli argomenti.
- Ogni nodo esegue, in maniera indipendente, le operazioni stabilite nel contratto sulla copia locale; il risultato deve essere il medesimo per tutti per raggiungere il consenso.
Esistono 4 fasi principali: create, freeze, execute, finalize.
Limitazioni
- Per raggiungere il consenso, è necessaria un’esecuzione deterministica;
- uno smart contract non può auto-eseguirsi; invece, una transazione deve essere fatta in maniera esplicita verso lo smart contract;
- può usare solo dati sulla blockchain;
- l’immutabilità impedisce l’aggiunta di funzioni o la correzione di errori. L’aggiornamento richiede il deploy di un nuovo smart contract.
Confronto con i contratti tradizionali
| Contratto tradizionale | Smart contract |
|---|---|
| Human depenent | Basato su codice |
| Ambiguità | Trasparenza |
| Ritardi nell’applicazione | Immutabilità |
| Basato su carta | Applicazione immediata |
| Digitale |
Decentralized Application (DApp)
Decentralized App (DApp): definizione
Una decentralized application (DApp) è un’applicazione costruita su una rete decentralizzata che combina uno smart contract e un’interfaccia utente di frontend.
Funzionamento degli smart contract (Ethereum)
Ambiente di esecuzione: Ethereum Virtual Machine (EVM)
Gli smart contract che sono eseguiti sulla blockchain devono garantire un’esecuzione deterministica, per motivi di consistenza e affidabilità: dato lo stesso input, l’output - cioè il risultato dell’esecuzione del contratto - sarà lo stesso per tutti i nodi della rete.
Non c’è un’autorità centrale che governa l’esecuzione del contratto e ogni partecipante verifica il contratto in maniera indipendente.
La piattaforma maggiormente utilizzata per l’esecuzione degli smart contract è la Ethereum Virtual Machine (EVM). È un ambiente di computazione decentralizzato in cui tutta la logica del contratto è eseguita sui nodi nella rete Ethereum. La EVM garantisce che tutti i nodi eseguano il codice in maniera consistente, in ambienti isolati virtuali per mantenere sicurezza e integrità.
Ogni nodo in una rete blockchain esegue lo stesso software e possiede una copia dello stato della blockchain. Quando uno smart contract è eseguito, i nodi validano ed eseguono la logica del contratto, propagando poi il risultato sulla rete e permettendo a ogni nodo di aggiornare la propria copia della blockchain. I nodi si assicurano anche che l’esecuzione del contratto sia conforme con le regole i limiti imposti dal codice del contratto, garantendo consistenza e sicurezza nella rete.
Storage e Gas
Lo storage indica lo spazio occupato dal codice del contratto e dai suoi dati sulla blockchain. Una rete blockchain può imporre limiti allo storage per impedire che la blockchain diventi bloated.
Le gas fees sono il costo computazionale dell’eseguire transazioni e contratti sulla blockchain. Il gas è usato per allocare risorse nella rete, impedendo spam e garantendo che solo transazioni con valore siano processate. Il costo del gas dipende dalla complessità della logica del contratto e gli utenti devono pagare le gas fess nella cryptovaluta nativa della rete.
Logica del contratto
L’essenza di uno smart contract è il suo codice, cioè le regole e la logica che ne governano l’esecuzione. Gli smart contract sono tipicamente scritti in un linguaggio di programmazione ad alto livello (es. Solidity). Il codice del contratto definisce le sue condizioni ed esegue automaticamente azioni predefinite quando le condizioni sono soddisfatte.
Limitazioni e sfide
- confidenzialità:
- lo smart contract è visibile a tutte le entità che hanno accesso alla blockchain;
- i dati delle transazioni sono conservati sulla blockchain e visibili senza autorizzazioni;
- la pseudonimity rende difficile verificare le identità attribuibili a entità del mondo reale;
- mancanza del diritto di essere dimenticati.
- determinismo: non si possono usare valori casuali sicuri. I nodi determinano individualmente l’ordine in cui le transazioni da diversi account sono processati e, dunque, lo stato dell’esecuzione non è predicibile;
- maintainability: non è facile scoprire nuovi contratti sulla blockchain. Inoltre, sebbene l’immutabilità garantisca transazioni inviolabili, gli smart contract deployati non possono essere cambiati o modificati;
- esecuzione regolata: possono esserci chiamate a funzioni non desiderate. Una misura di mitigazione di questo fenomeno può essere dato dall’impostazione del gas per svolgere l’operazione: ad esempio, tanto grande da scoraggiare l’invocazione di una funzione oppure in modo che il gas venga esaurito prima che l’operazione sia portata a termine;
- linguaggio di programmazione: il linguaggio di programmazione per gli smart contract non favorisce la gestione di alcune problematiche, quali:
- comportamento non deterministico del codice, o non definiti;
- problemi di overflow o underflow nelle operazioni aritmetiche;
- discrepanza tra le aspettative dello sviluppatore e la reale esecuzione;
- mancanza di possibilità di accesso a dati esterni;
- complicato gestire errori ed eccezioni;
- code as law: il codice del contratto assume che l’applicabilità sia universale, ma esistono diverse interpretazioni del contratto per diverse giurisdizioni e meccanismi per la risoluzione dei conflitti sono non chiare o non esistenti.