Il concetto di DAG applicato alla blockchain: cos'è e come funziona!

in blockchain •  6 years ago 


Abbiamo già visto cos'è e come funziona la tecnologia blockchain. Non solo, abbiamo anche visto alcune possibili applicazioni nell'ambito industriale e come anche i colossi del settore stiano studiando tale tecnologia. Più volte vi abbiamo riportato ambiziosi progetti in fase di ICO con l'obbiettivo di sfruttare la blockchain per servizi ed applicazioni nella vita reale. Inoltre, abbiamo anche visto i limiti delle attuali implementazioni della tecnologia blockchain, mostrando anche alcune possibili soluzioni.

Per esempio, abbiamo visto ed analizzato il funzionamento di Lightning Network, il second layer di Bitcoin che renderà la moneta davvero utilizzabile nella quotidianità. Oppure abbiamo visto lo Sharding del Network di Ethereum, il protocollo Plasma, TrueBit e gli State Channel. Siamo poi giunti ad altri approcci differenti di creare un sistema distribuito, come quello adottato ad esempio da Nano (XRB), basato sulla tecnologia blocklattice. Tutte implementazioni volte a risolvere il problema della scalabilità della rete.

Oggi andremo a vedere un'altra soluzione, il concetto di DAG, già utilizzata da diverse criptovalute, fra cui IOTA, ByteBall ed a breve anche da TravelFlex, IoTChain. Ma in futuro potrebbero arrivare anche altre monete, visto anche il recente arrivo del protocollo Phantom, anch'esso basato su DAG.

Blockchain vs DAG


Innanzitutto vediamo cosa significa l'acronimo di DAG e come viene applicato al concetto di ledger distribuito. Il DAG, letteralmente Grafo Aciclico Diretto, è una struttura di dati che non ha cicli diretti, ovvero scegliendo un qualsiasi vertice del grafo non è possibile tornare ad esso percorrendo gli archi del grafo. Una sequenza può passare solamente dal prima al dopo e non viceversa. Il DAG viene spesso applicato a problemi relativi all'elaborazione dei dati, allo scheduling, alla ricerca del percorso migliore per la navigazione ed alla compressione dei dati.

In sintesi dunque, permette un differente approccio per realizzare un registro distribuito. Nella blockchain, le transazioni vengono raccolte in blocchi, i quali possono essere solamente creati in sequenza, andando quindi a formare una catena. Nelle DAG, il "concetto di blocco come insieme di transazioni non viene utilizzato", in quanto tutte le transazioni sono fra loro collegate direttamente. Un blocco quindi, sarà costituito da una singola transizione all'interno del DAG. In questo modo dunque, è possibile eseguire transazioni anche in contemporanea, parallelamente ed in maniera assai più veloce, aumentando quindi il throughput del network.

DAG

Uno dei principali motivi per cui il Bitcoin è sempre stato inefficiente, è dovuto al Proof of Work adottato, molto esoso in termini di risorse ma necessario per la verifica delle transazioni e dunque sigillare i blocchi. Inoltre, come detto prima, i blocchi nella blockchain non possono essere creati contemporaneamente ma solamente in sequenza. Di conseguenza, tutte le transazioni che avvengono più o meno nello stesso periodo sono mantenute nello stesso blocco, anche se a volte capitare che vi siano più transazioni di quelle inseribili nel blocco, motivo per cui è necessario attendere il blocco successivo, causando ritardi nella conferma delle transazioni.

Blockchain

Il sistema dunque, diventa congestionato oltre una certa soglia di transazioni. Ovviamente è possibile aumentare le dimensioni dei blocchi, così da poter inserire più transazioni, ma così facendo si rischia di aumentare ulteriormente la dimensione della blockchain, già ad oggi prossima ai 200 GB. In questo modo però, nonostante vi siano diversi wallet light che si collegano ad un server remoto in cui è salvata la blockchain, si rischia di rendere il network praticamente inutilizzabile in maniera realmente decentralizzata. La DAG quindi, sfruttando un differente concetto di blocchi ed una struttura differente del network, riesce a migliorare significativamente la scalabilità, risolvendo, almeno teoricamente, questo classico problema ormai riscontrato sia dal Bitcoin che da Ethereum.

Mining e DAG

Tuttavia, vi è un altro problema che affligge Bitcoin, ovvero il mining. Nella blockchain, il meccanismo di conferma delle transazioni e dunque di creazione e firma dei blocchi, richiede l'intervento dei minatori per eseguire il Proof of Work necessario. Un minatore è incentivato ad eseguire il PoW da un premio in Bitcoin, variabile in base al numero del blocco, e dalle commissioni di transizione che il mittente paga al momento della creazione della transizione.

Proprio per questo motivo, complice anche la diffusione del Bitcoin, negli anni si è innescata una vera e propria corsa al mining. Si è passati dalle CPU, alle GPU, agli FPGA per arrivare sino a delle vere e proprie macchine per il mining, costituite da degli ASIC specifici per i vari algoritmi di mining. Tuttavia, tali macchine specifiche hanno costi ben maggiori delle classiche GPU e CPU che troviamo nei PC e Smartphone odierni, motivo per cui la cerchia di miner di Bitcoin si è ristretta ad un numero limitato di persone ed aziende. E' nato un vero e proprio business in questo settore, che però minaccia la decentralizzazione delle rete, in quanto il privato ed il piccolo minatore non sono più incentivati ad eseguire il PoW.

Come accaduto lo scorso dicembre, può capitare anche che chi possiede un gran numero di ASIC, possa switchare la propria potenza di calcolo su altre valute digitali, causando un innalzamento delle commissioni di rete ed un congestionamene del network. Emerge dunque che anche il mining può rivelarsi una parziale minaccia alla decentralizzazione della rete. Monete come Monero infatti, sono in continua lotta contro gli ASIC o sistemi che possano mettere a rischio la decentralizzazione della rete. Va inoltre detto che il mining comporta anche un enorme dispendio di energia, insostenibile se applicato in massa. Proprio per questo motivo alcune monete stanno pensando di passare al PoS, anche se vi sono numerose discussioni in merito.

Proof of Work

Nelle reti basate sul concetto di DAG, per lo meno nelle applicazioni viste sino ad ora, non vi è la necessità di avere miners esterni per confermare le transazioni. A seconda delle implementazioni, può essere necessario eseguire comunque un PoW, così da prevenire eventuali attacchi al network o SPAM. Nella tangle di IOTA infatti, quando una transazione viene registrata in un nodo, quest'ultimo deve prima eseguire la verificare di altre due transazioni, che vengono scelte sfruttando il concetto di processo degli arrivi di Poisson. Il nodo deve verificare se le due transazioni non sono in conflitto ed eseguire un PoW, solo che essendo limitato solamente alle due transazioni prese in carico, non vengono eseguite verifiche inutili, massimizzando l'efficienza. In altre monete DAG based invece, come accade su ByteBall, non è nemmeno necessario eseguire del PoW aggiuntivo, grazie alla presenza di una main chain.

In sostanza dunque, all'interno di una DAG i nodi diventano i "minatori di se stessi", solo che tale processo è molto più efficiente e meno esoso in termini di risorse utilizzate. Poiché i minatori esterni vengono eliminati, le spese di transazione vengono ridotte praticamente a zero. In questo modo, risulta dunque possibile effettuare micro-pagamenti, ed inoltre, visto il meccanismo di conferma, all'aumentare dei nodi partecipanti al network aumenta il numero di transazioni che possono venir confermate e dunque eseguite, aumentando a sua volta il throughput dell'intero network.

Double spending e transazioni veloci

Un ledger distribuito però, deve anche garantire la natura trustless del sistema per essere funzionale, e visto che stiamo parlando di criptovalute, è necessario in particolare che non si verifichino tentativi di double spending e che le transazioni vengano eseguite in maniera veloce.

I bassi tempi di conferma delle transazioni sono garantiti dalla natura blockless delle DAG, visto che, come abbiamo detto in apertura, non occorre creare un blocco di transazioni e propagarlo sulla rete una volta verificato. Tale processo infatti, oltre a limitare il numero di transazioni, ha dei vincoli temporali, dato che, ad esempio, nella blockchain di Bitcoin viene creato un blocco ogni 10 minuti. Di conseguenza, una transazione non potrà mai essere confermata in meno di 10 minuti. Nelle DAG invece, essendo le transazioni propagate direttamente in rete, la conferma avviene in tempi molto rapidi, giusto una manciata di secondi. Ovviamente tale tempo dipende da quanto è popolato il network, perciò inizialmente una rete interamente su DAG potrebbe rivelarsi più lenta per mancanza di nodi. Un po' come accaduto a IOTA nei primi mesi di vita del network.

Per quanto riguarda il double spending, ovvero il tentativo di spendere più volte lo stesso denaro, esistono differenti approcci per evitare che ciò accada. Il concetto di DAG stesso prevede che le transazioni vengano distribuite secondo un certo ordine topologico, vista la natura della struttura. Prendendo per esempio l'implementazione adottata in IOTA, supponiamo che qualcuno spenda due volte i propri fondi. Quando infatti si verifica un tentativo di double spending, vengono creati due "rami", ma di cui solamente uno verrà poi correttamente verificato. Per fare ciò, IOTA sfrutta il concetto di "peso" durante la fase di conferma delle transazioni, motivo per cui uno dei due rami crescerà più in fretta dell'altro. Così facendo, il ramo più piccolo, dunque con peso minore, rimarrà isolato, vanificando il tentativo di doppia spesa.

DAG

ByteBall invece, si appoggia ad una main chain a cui effettuare la sincronizzazione finale, che quindi va a respingere i tentativi di double spending.

E' proprio per questo motivo che non è possibile ridurre a zero il tempo di conferma delle transazioni, in quanto occorre verificare anche la legittimità di esse.

Limiti delle DAG?

Ovviamente nemmeno le DAG sono perfette ma diversi scienziati e matematici stanno lavorando molto nello sviluppo di tali sistemi nell'ambito dei ledger distribuiti, visti i diversi pregi rispetto alla classica blockchain.

Uno dei limiti delle DAG riguarda la necessità di avere un buon numero di nodi attivi per poter funzionare correttamente e velocemente. Dunque in network poco attivi o con pochi nodi potrebbe non funzionare al meglio e comportare tempi di conferma delle transazioni maggiori delle classiche blockchain. Proprio per questo motivo inoltre, anche repentine variazioni del numero di nodi nella rete potrebbero influire sul funzionamento della rete. Ad esempio un calo improvviso del numero di nodi attivi provocherebbe un calo della capacità di confermare le transazioni, diminuendo drasticamente il throughput.

Inoltre, occorre implementare un giusto algoritmo di consenso e di "pesaggio" dei nodi, così da evitare transazioni illegittime e garantire uno scheduling corretto delle transazioni effettuate. Insomma, il DAG è una soluzione molto promettete e già funzionante, con ulteriori margini di miglioramento e sviluppo. Non mancano le incognite e dubbi delle community, ma progetti come IOTA dimostrano che tale approccio può funzionare. Resta da verificare se effettivamente un sistema del genere può all'atto pratico scalare all'infinito come acclamato da IOTA ed altri progetti, ma a questa domanda potremo rispondere solo vedendo come si comporterà il network con milioni di nodi nel corso dei prossimi anni.

 

Per questo approfondimento è tutto, alla prossima!

[sc name="firma"]Il concetto di DAG applicato alla blockchain: cos'è e come funziona!

[ VIA | VIA ]


Posted from my blog with SteemPress : http://www.cryptominando.it/2018/04/02/dag-blockchain/

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

Hi! I am a robot. I just upvoted you! I found similar content that readers might be interested in:
https://www.cryptominando.it/2018/04/02/dag-blockchain/