Trends Cryptos

Come programmare gli smart contract con Ethereum e Webassembly?

Ethereum è una delle criptovalute più popolari, ma è molto di più. Grazie agli algoritmi, la criptovaluta può essere gestita in modo completamente autonomo. Ma come funzionano i “contratti intelligenti” e fino a che punto siamo arrivati a questo punto?

Come funzionano gli smart contract in Ethereum?
Per capire il principio dei contratti intelligenti in Ethereum, dobbiamo prima fare un piccolo viaggio nel mondo dei linguaggi di programmazione. I linguaggi di programmazione attuali si dividono essenzialmente in due gruppi: linguaggi interpretati e linguaggi compilati. Nel primo gruppo, i programmi vengono scritti in un linguaggio di alto livello e poi eseguiti da un interprete. Due esempi popolari sono Python e JavaScript. I linguaggi interpretati sono comuni in molte aree applicative (come il web) perché consentono di iniziare subito a lavorare. Sono anche molto universali e possono essere utilizzati su piattaforme diverse senza bisogno di strumenti aggiuntivi.

Per contro, esistono i linguaggi compilati, in cui un compilatore converte il testo del programma in un altro linguaggio, spesso in codice macchina binario. Questo codice binario dipende dalla piattaforma e viene eseguito direttamente su un processore. Il compilatore può (e deve) produrre codice personalizzato per il set di istruzioni del processore, ad esempio per le CPU ARM o Intel compatibili. I più noti rappresentanti di questo tipo sono C e Rust.

Tuttavia, la realtà è, come sempre, più complessa di quanto suggeriscano queste semplici categorie. Da tempo esistono forme ibride, come Java. Il compilatore Java non traduce il codice Java direttamente in codice macchina “reale”, ma in uno speciale formato intermedio. Questo formato intermedio, a sua volta, viene eseguito da un interprete – la macchina virtuale Java – sull’architettura concreta del processore.

Anche i contratti intelligenti di Ethereum funzionano in modo simile. Tutti i nodi che convalidano le transazioni ed estraggono nuova valuta in Ethereum contengono un’istanza della Ethereum Virtual Machine (EVM). Il Libro Giallo, la specifica tecnica di Ethereum, definisce in dettaglio le istruzioni che supportano l’EVM e come devono essere eseguite.

Si tratta di uno sviluppo proprietario con una serie di caratteristiche speciali:

Non è possibile interagire con il mondo esterno: tutte le decisioni algoritmiche devono derivare dalla blockchain e dalle sue transazioni.
L’aritmetica si basa su valori a 256 bit per facilitare la gestione di indirizzi e importi più grandi.
Operazioni speciali come le funzioni di hash sono integrate per aumentare le prestazioni.
A tutte le istruzioni viene assegnata una funzione di costo (carburante), che corrisponde approssimativamente al tempo di esecuzione richiesto e alla quantità di memoria necessaria. Il termine metering è comunemente usato in inglese.
Programmazione sull’EVM
Come per l’ecosistema Java, esistono diversi linguaggi di programmazione per i quali sono disponibili compilatori EVM. Il linguaggio più comune è Solidity, che è superficialmente (sintatticamente) simile a JavaScript. Alla fine del 2020, la documentazione di Ethereum elenca altri due linguaggi: Vyper, basato su Python, e Yul Plus, uno sviluppo completamente indipendente.

Tutti questi linguaggi hanno in comune il fatto di essere specifici per il dominio perché, a differenza dei linguaggi generici, occupano una nicchia con caratteristiche particolari e, in particolare, un motore di esecuzione speciale: EVM. Naturalmente, questi linguaggi specifici per il dominio (DSL) sono fondamentalmente una buona idea per ridurre la complessità delle applicazioni.

Ma nel caso dell’EVM, questo sembra avere poco senso. Dopotutto, a prescindere dalla mancanza di capacità di interagire con il mondo esterno alla blockchain, può eseguire algoritmi arbitrari, quindi è (in parole povere) Turing-completo.

Perché non utilizzare un linguaggio e un ambiente di esecuzione già esistenti?
Se necessario, alcune funzionalità dovrebbero essere rimosse, ma potremmo attingere a un’esperienza più lunga, a strumenti più stabili e, cosa molto più importante, a una base più ampia di programmatori. Infatti, è risaputo che oggi la popolarità di un linguaggio di programmazione è determinata non solo dalla sua particolare concisione, sicurezza dei tipi o dinamicità, ma anche dalla facilità di accesso alle numerose librerie e pacchetti esistenti. Questo cambiamento d’epoca è illustrato al meglio da JavaScript, spesso criticato per la sua semantica rozza, ma che deve essere considerato il linguaggio di programmazione più popolare al più tardi dopo il milionesimo pacchetto NPM.

Webassembly, un linguaggio intermedio universale
I responsabili delle specifiche di Ethereum sono giunti alla conclusione che alcuni problemi potrebbero essere risolti abbandonando lo sviluppo personalizzato a favore di un linguaggio universale. È opportuno che sul web sia in corso uno sviluppo per creare un’alternativa al grande cane JavaScript: Webassembly (WASM). Si tratta di un linguaggio intermedio universale e di un formato binario, combinato con una specifica per gli interpreti. Come suggerisce il nome, questo standard aperto è stato originariamente progettato per il Web. Nel frattempo, sono stati esaminati altri ambiti applicativi (ad esempio, le applicazioni per smartphone).

Lo sviluppo di WASM è guidato da giganti del settore come Microsoft, Google e Apple. Una caratteristica fondamentale del linguaggio è che è stato progettato per la portabilità fin dall’inizio. Ciò si evince dal fatto che molti linguaggi di programmazione esistenti, come Rust, C++ o Go, possono già compilare per il web assembly.

Sommaire

Sois au courant des dernières actus !

Inscris-toi à notre newsletter pour recevoir toute l’actu crypto directement dans ta boîte mail

Envie d’écrire un article ?

Rédigez votre article et soumettez-le à l’équipe coinaute. On prendra le temps de le lire et peut-être même de le publier !

Articles similaires