traduzione italiana di “Combinator makes easy work of Shelley Hard Fork”, scritto da Anthony Quinn e pubblicato sul blog IOHK il 7 maggio 2020.
Traduzione italiana a cura di Lordwotton
Il combinatore rende facile l’hard fork Shelley
Un dietro le quinte con Duncan Coutts e Edsko de Vries
Dal lancio della Testnet Incentivata, che ha segnato l’avvento dell’era Shelley lo scorso anno, la piattaforma Cardano è entrata in un periodo di rapido sviluppo. Il protocollo di consenso Ouroboros Classic ha supportato la fase Byron e la criptovaluta Ada negli ultimi 30 mesi, e presto passeremo a Ouroboros Praos. Questa è la versione del nostro protocollo di proof-of-stake (PoS) che inizialmente alimenterà Shelley durante la decentralizzazione di Cardano. Questo protocollo aggiunge il processo di stake con ricompense monetarie per gli holder di Ada e i proprietari di stake pool.
Abbiamo aggiornato Cardano il 20 febbraio con una hard fork che ha cambiato la rete principale dal protocollo di consenso originale, Ouroboros Classic, ad una versione aggiornata, Ouroboros BFT. Questo hard fork BFT ha iniziato un periodo di transizione sotto Ouroboros BFT, una versione snella del protocollo progettata per aiutarci a passare a Praos, prevenendo comunque qualsiasi comportamento maligno. Molti probabilmente non se ne sono nemmeno accorti. Per gli utenti del portafoglio Daedalus, ciò significava un aggiornamento standard del software. Gli exchange hanno dovuto effettuare l’aggiornamento manualmente, ma avevano diverse settimane per farlo e noi eravamo a disposizione per aiutarli.
L’evento successivo è stato il “riavvio di Byron” il 30 marzo. Questo ha rilasciato un codice totalmente nuovo per molti dei componenti Cardano, incluso un nuovo nodo per supportare le deleghe ed il decentramento, e le future funzionalità di Shelley. Un grande vantaggio della nuova versione base del codice è che è stata riprogettata per essere modulare, quindi molti componenti possono essere cambiati ed aggiornati senza influenzare gli altri.
A sua volta, Ouroboros BFT fungerà da punto di partenza per la hard fork di Shelley, cosa che avverrà una volta che saremo soddisfatti con la testnet Haskell. Questa seconda hark fork sarà un processo simile a quello di febbraio per gli exchange, i possessori di Ada e gli utilizzatori di portafogli, e, si spera, sarà altrettanto un non-evento.
Tuttavia, mentre tutto sembra liscio in superficie, c’è un sacco di attività nascosta in corso. Come un’anatra che nuota serenamente attraverso uno stagno - mentre i suoi piedi remano furiosamente sotto le acque calme - i nostri ingegneri della blockchain stanno lavorando duramente.
Così, abbiamo fatto sedere due dei principali ingegneri del progetto Cardano, Duncan Coutts e Edsko de Vries, per scoprire come hanno fatto. Duncan è stato il leader dell’architettura di Cardano negli ultimi tre anni, e tra loro, Duncan ed Edsko hanno passato complessivamente 35 anni utilizzando Haskell, il linguaggio di programmazione utilizzato per sviluppare Cardano.
Duncan, come hai fatto?
Come descritto nella tabella di marcia di Cardano, gli ingegneri di IOHK credono nell’aggiornamento del codice senza intoppi. Invece di cercare di fare il salto da Ouroboros Classic a Praos in un unico aggiornamento - il che sarebbe stato un compito incredibilmente complesso - è stato seguito un approccio in due fasi, utilizzando Ouroboros BFT come intermediario (Figura 1). Il codice BFT è compatibile sia con i nodi federati dell’era Byron che con i nodi in stile Shelley rilasciati nel riavvio Byron. E’ come una corsa a staffetta: un corridore (nel nostro caso, eseguendo un protocollo) entra nell’area in cui l’altro corridore è in attesa; sincronizza le loro velocità (quindi sono perfettamente compatibili tra loro) e poi passa la bacchetta (operando la mainnet), e poi il nuovo corridore con la bacchetta continua il processo nella stessa area per il giro successivo.
[
Figura 1, la roadmap da Byron a Shelley
Il processo di rilascio di Daedalus Flight ci ha aiutato a sviluppare e testare rapidamente un nuovo portafoglio e, una volta che tutti lo stanno eseguendo sulla rete principale, e una volta terminato l’aggiornamento dei nodi principali, il vecchio codice è ridondante. Siamo in quella fase di transizione in questo momento, con un nuovo portafoglio Daedalus mainnet rilasciato il 24 aprile.
Il nostro obiettivo è quello di avere un ‘ingresso aggraziato in Shelley’, come descrive il CEO di IOHK Charles Hoskinson nel suo video whiteboard sull’hard fork. Uno strumento vitale per fare questa mossa è stato la creazione di un combinatore di hard fork.
Sembra una macchina agricola. Che cos’è?
Combinatore è solo un termine tecnico per indicare qualcosa che combina altre cose. Per esempio, l’addizione è un combinatore sui numeri. Un combinatore di hard fork combina due protocolli in un unico protocollo. Noi la chiamiamo una combinazione sequenziale dei due protocolli perché esegue il primo protocollo per un po’ di tempo e a un certo punto passa al secondo. Nel nostro caso, si tratta di due versioni di Ouroboros mentre passiamo da BTF a Praos.
La parte intelligente di tutto questo è stata l’uso di moduli discreti che fanno il loro lavoro, pur sapendo il meno possibile l’uno dell’altro e della blockchain. La semplicità è la chiave in questo caso e questo processo di estrazione dei dettagli lo chiamiamo ‘astrazione’. La maggior parte dei moduli di consenso non devono nemmeno sapere che hanno a che fare con una criptovaluta e potrebbero anzi gestire praticamente qualsiasi cosa su una blockchain. Per esempio, abbiamo fatto dei seminari usando l’esempio di ledger Pokémon su una blockchain Ouroboros. L’unica cosa che è diversa sono le regole del ledger, il consenso è sempre lo stesso. Basta impostarlo - ‘istanziarlo’ nel gergo della programmazione - con le regole per giocare a Pokémon piuttosto che per la contabilità in stile UTXO. [Per i lettori con un interesse tecnico, fate attenzione a Edsko che approfondisce ulteriormente il processo di ‘astrazione’ e combinatori in un futuro post del blog].
Lo fai sembrare semplice
In realtà, è molto complicato perché Cardano sta eseguendo la criptovaluta Ada, e un mucchio di altre cose, allo stesso tempo. Pensatelo come se cambiaste tutte le ruote di un’auto mentre guidate e rimorchiate una roulotte. Quindi dobbiamo essere sicuri di poterlo fare in modo totalmente affidabile.
Avremmo potuto affrontarlo come un compito una tantum, ma aveva senso farlo in modo generico usando un combinatore di protocollo. Abbiamo scelto questa strada perché otteniamo un risultato migliore e i test, che sono vitali per garantire il funzionamento del codice sono molto più facili da eseguire. Oltre a questo, ci saranno altre hard fork più avanti, il che rende la scelta ancora più chiara. Ad esempio, mentre ci avviciniamo al culmine dello sviluppo di Cardano e ci muoviamo attraverso le epoche di Goguen, Basho e Voltaire, ci sarà almeno una hard fork in ognuna fase.
Allora, come avete affrontato i punti difficili?
Beh, prima di tutto, abbiamo dovuto farlo senza ricerche a cui rivolgerci. I ricercatori descrivono un unico protocollo come una cosa autonoma e perfetta. Ma non è a questo punto che ci troviamo. Stiamo cercando di gestire Praos dopo aver iniziato con una catena che usava qualcos’altro. Quello su cui sta lavorando Edsko, passando da un protocollo all’altro in maniera generica, non è coperto dalla ricerca. Ed è difficile, è complicato. Tutti i dettagli richiedono molta riflessione, e ci sono un sacco di grattacapi. Ma il passaggio da una base di codice all’altra non è il genere di cose che gli accademici possono aspettarsi di vedere pubblicate. Non ha un aspetto nuovo ed è visto solo come un problema di implementazione.
Edsko, puoi farci un esempio?
Come dice Duncan, per i ricercatori questi problemi di implementazione sono banali, ma affrontarli è il 99% di quello che facciamo. Prendete il problema del tempo per una blockchain. È quello contro cui ho sbattuto la testa per un paio di settimane. Il tempo è diviso in slot e la blockchain può contenere al massimo un blocco per slot. Spesso abbiamo bisogno di convertire tra i numeri di slot e il tempo nel mondo reale, per esempio quando un nodo ha bisogno di sapere "È il mio turno? Questo è fondamentale per Cardano, ma la lunghezza di uno slot cambia dopo la hard fork. Per Byron, uno slot è di 20 secondi; per Shelley, sarà di due secondi, o forse uno. Per complicare davvero le cose, il momento esatto in cui la hard fork viene realizzata viene deciso sulla blockchain stessa. Eppure, ho bisogno di sapere quando è momento del cambio. È un dilemma: per fare le conversioni di slot devo conoscere lo stato della blockchain, ma per conoscere lo stato devo conoscere le conversioni di slot!
Questo è un vero e proprio territorio minato con molte cose complesse da sbrogliare. Dobbiamo essere molto precisi su come facciamo le cose. Potrebbe essere banale in teoria, ma è molto difficile districarsi e assicurarsi che non sorgano problemi gravi.
Non possiamo permetterci errori, quindi come fai a sapere di avere ragione?
Duncan: Questa è un’ottima domanda. La mia risposta è che si arriva alla risposta su due livelli. Il primo è intellettuale: si analizza il problema, si fanno i conti, si parla con i colleghi e si lotta con loro fino a quando non si vede bene come tutto si incastra. In secondo luogo, facciamo tutti i nostri test QuickCheck per darci la sicurezza che questo fa quello che pensiamo faccia. Eseguiamo test approfonditi che ci portano davvero nei casi insoliti a cui potreste non pensare mai, compreso questo passaggio. Possiamo fare 100.000 test ogni volta che cambiamo una riga di codice. [Lars Brünjes ha scritto di come John Hughes, uno dei creatori di Haskell, ha aiutato IOHK a sviluppare le sue strategie di test].
Edsko: Sì, sono d’accordo con questi due punti. Per quanto riguarda il combinatore, risolvo queste cose pensando alle garanzie che il codice che scrivo deve fornire, e che garantisce che esso, a sua volta, ha bisogno del ledger. Abbozzo una prova matematica che questo ragionamento “se e allora” è effettivamente giustificato, e poi mi rivolgo li team dei metodi formali. Queste sono le persone che stabiliscono le regole matematiche che descrivono la blockchain, e possono poi modificare le regole in modo tale da fornire le garanzie richieste.
Per quanto riguarda il secondo punto di Duncan, so che il problema di tempo che ho menzionato sopra è corretto pensando in modo matematico e testando. Le decisioni sui tempi sono facili quando abbiamo la catena completa, ma sono difficili quando dobbiamo fare previsioni sul futuro. Fortunatamente, il modo in cui abbiamo impostato le cose significa che posso facilmente creare blockchain di test. Quindi, posso creare una blockchain completa e poi tagliare questa catena a metà. Prendo la prima metà e la considero nel presente; e stabilisco l’altra metà nel futuro. Poi posso usare il ‘presente’ (prima metà) per fare previsioni sul ‘futuro’ (la seconda metà) e verificarle rispetto al tutto (su cui i calcoli sono facili). Se corrispondono, allora so che è tutto a posto.
Quando hai iniziato a farlo?
Subito dopo che Duncan ha avuto l’idea geniale dell’OBFT. Così ho pensato al combinatore per circa 18 mesi. È stato un obiettivo di progettazione fin dall’inizio della nostra riscrittura modulare di Ouroboros a partire dall’ottobre 2018, con il mio primo commit nel repository di GitHub. Poco dopo, nel dicembre 2018, abbiamo avuto una dimostrazione del prototipo con OBFT e Praos.
E quante persone sono state coinvolte?
Duncan: Molte persone hanno lavorato sul codice di consenso, ma ogni volta che abbiamo qualcosa di veramente difficile, come questo combinatore, lo diamo a Edsko: è il nostro ingegnere software straordinario! Questa programmazione Haskell è come l’arrampicata libera, piuttosto che arrampicarsi con le corde dei metodi formali come supporto.
Qualche pensiero finale?
Duncan: Il codice che era in esecuzione è in fase di phasing out e molto presto il codice che faceva girare Cardano un mese fa non esisterà più. Una volta che tutti stanno eseguendo il nuovo codice sulla rete principale e una volta terminato l’aggiornamento dei nodi principali, il vecchio codice è ridondante. Siamo in quella fase di transizione in questo momento e nessuno sta urlando che il cielo sta cadendo. Nessuno l’ha nemmeno notato.
Edsko: Questo è un bel risultato di per sé. L’idea dell’OBFT è stata cruciale nel fare la transizione, ma non è più rilevante una volta che abbiamo fatto quella transizione a Shelley. Questo è stato un modo per noi di abbandonare il codice ereditato, cosa che spesso è molto difficile da fare, come le banche sanno a loro spese.
Duncan: E se tutto funziona bene, non si nota nulla.
Duncan e Edsko, grazie per il vostro tempo. Credo sia meglio che vi lasciamo tornare al vostro lavoro.