🇮🇹 "Concurrency e tutto il resto: I contratti intelligenti di Cardano e il modello eUTXO"

:it: Traduzione italiana di “Concurrency and all that: Cardano Smart Contracts and the eUTXO model” scritto da Olga Hryniuk nel blog IOG


Concurrency e tutto il resto: I contratti intelligenti di Cardano e il modello eUTXO

Il modello eUTXO di Cardano fornisce un ambiente sicuro e versatile per elaborare più operazioni senza fallimenti del sistema

img

Cardano è una blockchain basata su UTXO, che utilizza un paradigma di programmazione diverso per le applicazioni decentralizzate (DApps) da altre blockchain basate su account come Ethereum. Il gusto specifico che Cardano utilizza è il modello Extended Unspent Transaction Output (eUTXO) introdotto dall’aggiornamento di Alonzo. eUTXO offre una maggiore sicurezza permettendo la prevedibilità dei costi di esecuzione degli smart contract (senza spiacevoli sorprese) e, di conseguenza, offre un approccio diverso alla parallelizzazione.

eUTXO eredita il design per rami del modello UTXO (Bitcoin), dove un ramo è per definizione una sequenza di transazioni che richiede una sequenza di convalide. Per dividere la logica su diversi rami e imporre un maggiore parallelismo, è essenziale costruire DApps e altre soluzioni utilizzando più UTXO. Questo fornisce vantaggi in termini di scalabilità, proprio come lo sviluppo di servizi Bitcoin presuppone la suddivisione di un portafoglio in sottofogli.

Le DApps costruite su Cardano non sono limitate ad una transazione per blocco. Infatti, il budget del blocco (cioè il numero massimo di transazioni che può contenere) consente l’esecuzione di centinaia di transazioni semplici e diversi script complessi. Tuttavia, il modello eUTXO permette di spendere un output di transazione solo una volta. Dato che gli utenti possono affrontare problemi di contesa cercando di accedere alla stessa UTXO, è importante usare molte UTXO diverse. Si noti che questo è importante a meno che un tale progetto non tragga beneficio da un rigoroso ordinamento dei client. Insiemi di UTXO possono essere usati per implementare schemi di progettazione che includono semafori. Inoltre, diversi utenti possono interagire con uno smart contract senza alcun fallimento di concorrenza. Questo perché uno smart contract può gestire una serie di UTXO diversi che costituiscono il suo stato attuale e i metadati off-chain che permettono di interpretare tali UTXO.

Lavorare in parallelo

Le blockchain raggiungono l’immutabilità e la trasparenza dell’elaborazione delle transazioni in modo diverso. Qualsiasi sistema blockchain dovrebbe avere una serie di proprietà per soddisfare il bisogno sempre crescente di un’elaborazione sicura ma rapida delle operazioni, vale a dire

  • Throughput - il numero di operazioni che un sistema può eseguire in un certo periodo di tempo. Questo si riferisce, per esempio, al numero di transazioni o contratti intelligenti elaborati in un secondo.
  • Performance - quanto velocemente funziona il sistema. La performance misura il tempo di esecuzione delle transazioni o dei contratti intelligenti.
  • Scalabilità - la capacità del sistema di eseguire più operazioni senza sovraccaricare la rete o influenzare le proprietà delle prestazioni.

Aumentando il parallelismo, possiamo in definitiva migliorare il throughput del sistema mantenendo le prestazioni delle singole operazioni allo stesso modo, ma questo tipo di scalabilità sarà sempre limitato dal grado di contesa.

Quando si parla di scalabilità, distinguiamo anche proprietà del sistema come la concorrenza, il parallelismo e la contesa. La concorrenza è essenziale per permettere a più attori di progredire su un certo compito senza interferire l’uno con l’altro. Il parallelismo permette tali progressi allo stesso tempo senza alcuna interferenza. La contesa si verifica quando questi attori multipli interferiscono l’uno con l’altro mentre lavorano contemporaneamente o in parallelo.

Capire la concurrency

La concurrency può migliorare o meno le prestazioni, il throughput o la reattività di un sistema. La quantità di concorrenza limita il numero massimo di operazioni simultanee che possono essere eseguite.

Per ottenere miglioramenti effettivi delle prestazioni in una blockchain basata su UTXO, i processori o altri attori dovrebbero essere in grado di eseguire più azioni contemporaneamente. Più alto è il livello di concorrenza, maggiore è il massimo parallelismo possibile. Un tale approccio si traduce quindi in miglioramenti delle prestazioni e del throughput. Fornisce anche vantaggi significativi rispetto ai sistemi basati su account (come Ethereum).

Distribuire DApps sui ledgers UTXO è una cosa diversa

L’approccio di Cardano al deployment delle DApp è diverso e quindi richiede una curva di apprendimento e un approccio diverso. Questo è come lavorare con diversi linguaggi di programmazione: c’è un obiettivo - distribuire una soluzione, ma tanti linguaggi di programmazione da usare per questo scopo.

Massimizzare la concurrency è un’abilità che deve essere imparata: gli sviluppatori devono scrivere il codice in modo da limitare fortemente le opportunità di contesa (per esempio, evitando stati condivisi e dipendenze accidentali). Il sistema deve poi tradurre questa concorrenza in parallelismo. Un certo numero di sviluppatori ha già identificato modi per approcciare questo, mentre altri stanno ancora sviluppando soluzioni. Semplicemente trapiantare le lezioni apprese su una blockchain non funzionerà; mentre la curva di apprendimento è un po’ più ripida, i risultati lo rendono utile.

In ogni caso, è importante capire che per implementare una DApp scalabile su Cardano, uno sviluppatore non può semplicemente usare un contratto Ethereum adattato. Cardano si basa sul modello UTXO; non è basato su account. E questo significa che un singolo stato on-chain non soddisfa la proprietà di concorrenza su Cardano. Invece, le DApps dovrebbero dividere il loro stato on-chain attraverso molte UTXO. Questo aumenterà la concorrenza nella loro applicazione, consentendo così un maggiore throughput.

Il nostro team educativo ha precedentemente condiviso una semplice implementazione DEX in stile AMM nel corso Plutus Pioneer. Mentre questo è utile per scopi didattici, questa architettura non supporterebbe direttamente un DEX commerciale in cui sono richiesti un approccio a libro d’ordini e ulteriore concurrency. Uno sviluppatore che cerca di distribuire sulla rete principale di Cardano avrebbe bisogno di migliorare la scalabilità dell’architettura di conseguenza.

Abbiamo proposto una soluzione nel nostro recente documento Djed stablecoin. Per l’implementazione Djed su Cardano, viene favorito un modello di modellazione del libro degli ordini in cui un creatore di ordini è responsabile dell’inoltro di qualsiasi ordine di conio o di masterizzazione al contratto intelligente stablecoin, con una tassa di incentivo aggiuntiva imposta su ogni aspirante acquirente o venditore di stablecoin e monete di riserva. Diversi meccanismi di sicurezza - attraverso l’uso estensivo di token non fungibili (NFT) - sono anche utilizzati per garantire l’unicità delle transazioni, la correttezza di ogni ordine presentato, e per prevenire attacchi front-running. I token NFT sono anche usati per segnalare il successo o il fallimento degli ordini di conio e di masterizzazione. Pubblicheremo un articolo più completo su questo a breve.

Per saperne di più sulla scalabilità, potete leggere come progettare un’applicazione Plutus scalabile e scoprire come organizzare DApps su Cardano usando i modelli di order book. Gli sviluppatori hanno anche presentato approcci concomitanti e deterministici all’architettura dei contratti intelligenti eUTXO che potrebbero essere considerati come una generalizzazione dei passi della macchina a stati paralleli introdotti nel documento Hydra per realizzare macchine a stati multi-fase. Un certo numero di altri sviluppatori e membri della comunità hanno anche pubblicato documenti, video, articoli e thread utili su Twitter che delineano i loro approcci. È una brillante lezione su come la comunità continuerà a sviluppare le proprie soluzioni innovative, mentre gli approcci diventano più standardizzati con la maturità della piattaforma.

Andando avanti

L’evento hard fork di Alonzo introdurrà i componenti fondamentali di Plutus 1.0. Questo è l’inizio della crescita dell’ecosistema. Anche se è ancora presto, la testnet di Alonzo permette ai nostri sviluppatori di valutare le proprietà del sistema e costruire DApps scalabili in anticipo - preparando il lancio della loro mainnet. Decine di progetti hanno già lavorato con istanze locali di ambienti Plutus. Con il testnet principale pubblico che presto supporterà i contratti intelligenti, ci aspettiamo un aumento significativo dell’attività nelle prossime settimane e nei mesi a venire. Più tardi questo mese, il summit di Cardano (25-26 settembre) mostrerà molti di questi progetti, oltre a fornire importanti aggiornamenti sulla roadmap dei contratti intelligenti e la continua evoluzione dello stack tecnologico. Eventi per sviluppatori, hackathon e, naturalmente, i risultati di Project Catalyst continueranno a portare nuovi strumenti e astrazioni a questo ecosistema di sviluppatori in rapida crescita.

Se sei uno sviluppatore, assicurati di unirti alla nostra comunità Discord e di essere coinvolto in Project Catalyst se stai cercando di finanziare il tuo progetto.

Vorrei ringraziare Lars Brünjes, Jann Müller e Manuel Chakravarty per il loro contributo tecnico e il supporto durante la preparazione del post sul blog.