Programmazione su blockchain: un’ introduzione di alto livello

0xstepit
Terra Network Italia
7 min readDec 19, 2021
Photo by Adam Miller: https://unsplash.com/images/nature/space

Note del corso Spring 2020 Developers Decal tenuto dal gruppo blockchain di UC Berkeley

Introduzione

Questo è il primo post di una nuova rubrica riguardante lo sviluppo delle applicazioni su blockchain, in particolare sulla rete Ethereum. Il contenuto di ogni post farà riferimento a una particolare lezione del corso Spring 2020 Developers Decaldell’università di Berkeley. L’obiettivo in questo caso è duplice:

  1. Aiutarmi a fare uno schema dei principali concetti trattati nel corso così da poterli metabolizzare. ✅
  2. Aiutare chi non avesse tempo o voglia di seguirsi un corso universitario, e quindi molto tecnico, ad ottenere e capire concetti spesso molto complicati. ✅

Detto questo, carichi e iniziamo! ✌️

Concetti base

I due concetti principali che stanno alla base di tutto quello che verrà trattato nella guida sono due:

  • Criptovaluta: è una moneta digitale che vede le sue radici in principi di crittografia, economia e di programmazione.
  • Blockchain: è la struttura di dato che regge il concetto delle criptovalute. Questa struttura garantisce l’integrità dei dati senza che vi sia la necessità di una terza parte fidata.

Non esiste una sola blockchain ma sono molteplici e ognuna di queste deriva ed è stata sviluppata con un particolare scopo in mente. Tralasciando le diversità fra queste e quelle che sono considerate private, e quindi centralizzate, possiamo individuare le seguenti proprietà di una blockchain:

  1. Immutabilità: ciò che viene registrato su blockchain è immutabile. Questo concetto potrebbe essere meglio descritto dal fatto che modificare le informazioni su blockchain è un’azione talmente complicata da essere considerata impossibile.
  2. Registro distribuito: le informazioni contenute nella chain non sono su un server o in mano a un numero limitato di persone. Il registro che contiene questi dati è distribuito su tutti gli utenti che vogliono partecipare alla rete.
  3. Decentralizzata: non esiste un’autorità centrale che è in grado di prendere decisioni super partes. Le blockchain sono de-centralizzate e quindi senza un entità centrale che fungerebbe anche da single point of failure.
  4. Consenso: esiste una logica di consenso che permette di decidere cosa è accettato, e quindi può essere scritto sulla chain, e cosa no.

Bitcoin & Ethereum

Bitcoin ed Ethereum sono le due principali blockchain che cubano la maggior parte dei volumi di scambio e che coinvolgono la maggior parte degli utenti. Le due criptovalute alla base di queste chain sono bitcoin (BTC) ed ether (ETH).

Bitcoin è stata la prima blockchain ideata e costruita dall’anonimo Satoshi Nakamoto. Ciò che ha dato alla luce con Bitcoin è un nuovo sistema di creazione e gestione del denaro in una rete peer-to-peer. Vista la volatilità della crypto alla base, BTC, attualmente non è utilizzato come mezzo di scambio ma come riserva di valore grazie alla sua natura deflazionistica.

Ethereum è una blockchain decentralizzata e distribuita nata per introdurre il concetto di smart contract (SC). Attraverso gli SC Ethereum è diventata la prima blockchain a creare un computer distribuito in tutto il mondo. Possiamo vedere questo computer come una macchina agli stati in cui lo stato corrente descrive il possesso degli asset al suo interno e come sono distribuiti nella rete. Lo stato del computer può essere cambiato attraverso transazioni che vengono salvate sul registro distribuito. A differenza di Satoshi Nakamoto, l’ideatore di Ethereum, Vitalik Buterin, non è per niente un personaggio che rimane dietro le quinte.

Vitalik…

A livello di codice dei due sistemi troviamo due linguaggi completamente differenti. Bitcoin fa utilizzo di Script, un linguaggio che permette di costruire logiche molto semplici. Ethereum invece possiede un linguaggio Turing complete e che quindi è in grado di realizzare qualsiasi logica per risolvere un problema che ammette soluzioni. In entrami i casi ci sono dei pro e contro:

  • Script (linguaggio non turing-complete): molto limitato in capacità espressiva ma molto semplice da gestire. E’ molto facile in questo caso valutarne l’affidabilità.
  • Linguaggio Turing-complete: offre un’elevata capacità espressiva che talvolta può portare a problematiche difficili da comprendere durante lo sviluppo.

Account

Gli account sono la controparte virtuale, anche detta pseudonimo, dell’identità di una persona. Gli account sono il sistema che permette di gestire i propri asset.

Una delle principali differenze fra Bitcoin ed Ethereum è che il primo si basa sul concetto di UTXO mentre il secondo sul concetto più classico di bilancio del portafoglio. Questi sono due metodi distinti per la gestione del portafoglio di ogni singolo account.

Il termine UTXOs sta per Unspent Transaction Outputs e si riferisce al fatto che ogni transazione va a spendere gli output delle transazioni precedenti e genera così altri output da poter spendere nelle transazioni future. Il bilancio di un wallet è la somma di tutte le sue UTXOs.

Il concetto di address invece, o portafoglio, è quello che tutti intendiamo anche nel caso classico della finanza, un conto corrente. Esistono due tipi di address:

  • Externally owned: sono quelli address in cui il proprietario è in possesso delle chiavi private e quindi della password per il suo utilizzo.
  • Smart contract: sono particolari address associati a codici e controllati dai codici stessi.

Perché esistono due tipi di address allora? Vediamo brevemente quali sono i vantaggi di uno e dell’altro.

I vantaggi del modello con UTXOs sono:

  • Permettono una maggiore privacy poiché rende più difficile il collegamento con l’identità reale.
  • Scalabilità: permettono di processare in parallelo diverse transazioni.

I vantaggi del modello con account sono:

  • Memoria: bisogna solo aggiornare il bilancio di un account senza tenere traccia di tutte le UTXOs.
  • Semplicità.

Gas

Poiché Ethereum è una computer distribuito, e quindi un sistema in grado di effettuare calcoli in cambio di energia, è stato introdotto il concetto di GAS. Il gas è uno strumento utilizzato per:

  1. Evitare spam sulla rete e conseguente intasamento.
  2. E’ pagato da chi avvia la transazione.
  3. E’ una tassa sulla computazione.

Poiché il linguaggio utilizzato è Turing-complete non è possibile sapere in anticipo se un certo codice possiede una fine di esecuzione o meno. Il gas è una maniera intelligente per andare a bloccare l’esecuzione di un algoritmo nel caso questo, a seguito del consumo di un quantitativo di risorse specificato inizialmente, non abbia finito la sua esecuzione. Il gas può essere quindi visto come una misura della capacità computazionale a disposizione.

Prima di poter interagire con la rete Ethereum bisognerà considerare e specificare alcuni parametri:

  • Gas limit: la quantità massima di gas che si è disposti a pagare.
  • Gas price: indica la quantità di ether che si va a pagare per ogni unità di gas.

Esiste quindi una relazione diretta fra il costo del gas e il costo di ETH!

Vediamo due esempi di dinamica di una transazione dipendenti dal gas limit e gas price specificati:

  • Transazione eseguita: se il quantitativo che l’utente è disposto a pagare è sufficiente per pagare le fee della transazioni questa sarà effettuata. Il gas avanzato verrà poi restituito all’utente.
  • Transazione non eseguita: se il quantitativo non è sufficiente a pagare la fee allora tutto il gas viene utilizzato ma la transazione non viene eseguita.

Smart contract

Gli smart contract sono dei codici che facilitano l’esecuzione, la verifica e il rispetto di certi rapporti in un contratto digitale. Un SC può essere visto come un agente autonomo che vive nella rete Ethereum e che può essere interpellato per essere eseguito a seguito dell’invio di una transazione. Le sue particolarità sono:

  • E’ l’unico possessore del bilancio degli asset al suo interno.
  • Ha il controllo diretto sul suo stato interno. Ricordatevi che la rete Ethereum è un computer a stati e lo stato della rete è dipendente dallo stato degli SC al suo interno.

In base a quanto appena detto possiamo individuare 3 compiti di uno SC:

  1. Mantenere in maniera integra dei dati.
  2. Regolare il rapporto fra gli utenti eliminando la fiducia come variabile dal’ equazione.
  3. Fornire funzioni che possono essere utilizzate da altri SC.

La sicurezza legata a questo strumento, e quindi ciò che garantisce la sicurezza all’ intera rete, è legata al fatto che i codici sono opensource e non modificabili una volta messi in produzione sulla rete. Le funzionalità di ogni SC saranno quindi visibili da tutti e rimarranno costanti nel tempo.

Il fatto di avere la possibilità di fornire funzioni esternamente da uno smart contract all’altro ha permesso lo sviluppo di sistemi anche molto complessi che hanno preso il nome di dApp: applicazioni decentralizzate. Queste applicazioni sono composte da un insieme di SC distribuiti su tutti i nodi della rete che hanno esteso il concetto di software classico a un sistema decentralizzato.

Conclusioni

In questa prima lezione abbiamo dato due delle definizioni più importanti per poter comprendere una delle rivoluzioni più grandi degli ultimi anni: la blockchain e le criptovalute. Abbiamo visto quali sono le due blockchain più importanti e quali sono le loro differenze. Alcuni dei concetti trattati, come quello degli smart contract e delle dApp sono stati brevemente descritti ma saranno temi centrali di tutte le future lezioni e verranno di conseguenza approfonditi nel dettaglio più avanti.

Spero che questa prima lezioni sia servita ad incuriosirvi e darvi la carica per continuare ad approfondire questo magico mondo. 🌈

Come sempre vi ringrazio del tempo che avete impiegato per leggere questo articolo e vi invito a lasciare un clap 👏 e a lasciare un commento 🗣 se volete discutere di qualcosa nello specifico. Nel banner finale trovate i miei contatti diretti e il link a una delle community più esplosive di sempre! 💣

A presto!

Telegram | Twitter | Instagram

--

--