In questo articolo vi parlerò del DAG (Directed Acyclic Graph, grafo diretto aciclico) e del suo utilizzo nei registri distribuiti, e confronteremo questo con la blockchain.

Il DAG non è qualcosa di nuovo nel mondo delle criptovalute. Forse ne avete sentito parlare come soluzione ai problemi di scalabilità delle blockchain. Ma oggi non parleremo di scalabilità, bensì di ciò che rende le criptovalute diverse da tutto il resto: decentralizzazione, assenza di intermediari e resistenza alla censura.

Vi mostrerò anche che il DAG è in realtà più resistente alla censura e non ha intermediari per accedere al registro.

Nelle blockchain che conosciamo, gli utenti non hanno accesso diretto al registro stesso. Quando desideri aggiungere una transazione al registro, devi 'chiedere' al produttore di blocchi (block producer, anche noto come 'miner') di farlo. Sono i miner a decidere quale transazione includere nel prossimo blocco e quale no. Solo i miner hanno accesso esclusivo ai blocchi e il diritto di decidere quale transazione accettare per l'aggiunta al registro.
I miner sono intermediari che si frappongono tra te e il registro distribuito.

In pratica, di solito un numero ridotto di pool di miner controlla collettivamente più della metà della potenza di calcolo della rete. Per Bitcoin sono quattro pool, per Ethereum sono due. In caso di collusione, possono bloccare qualsiasi transazione vogliano.

Negli ultimi anni sono state proposte numerose variazioni di blockchain, che differiscono nei principi di selezione dei produttori di blocchi. Ma i produttori di blocchi non spariranno; continuano a 'stare al varco': ogni transazione deve passare attraverso il produttore di blocchi e se questo non l'accetta, allora la transazione, di fatto, non esiste.

Questo è un problema inevitabile nel caso delle blockchain. E se vogliamo risolverlo, dobbiamo cambiare radicalmente il design e liberarci completamente dai blocchi e dai produttori di blocchi. Invece di costruire una catena di blocchi, collegheremo le transazioni stesse, includendo in ogni transazione gli hash di diverse precedenti. Di conseguenza, otterremo una struttura nota in matematica come grafo diretto aciclico – DAG.
Ora tutti hanno accesso diretto al registro, senza intermediari. Quando vuoi aggiungere una transazione al registro, la aggiungi semplicemente. Selezioni alcune transazioni parenti, aggiungi i tuoi dati, firmi e invii la tua transazione sulla rete. Fatto. Non c'è nessuno che possa impedirti di farlo, quindi la tua transazione è già nel registro.
Questo è il modo più decentralizzato e resistente alla censura per aggiungere transazioni al registro senza intermediari. Perché chiunque desideri può semplicemente aggiungere le proprie transazioni al registro, senza chiedere il permesso a nessuno.

Il DAG può essere considerato la terza fase dell'evoluzione dei registri. Inizialmente c'erano registri centralizzati, dove un'unica parte controllava l'accesso. Poi sono arrivati i blockchain, in cui c'erano già più controllori che registravano le transazioni nel registro. Infine, nel DAG non ci sono controllori, gli utenti aggiungono le proprie transazioni direttamente.

Ora che abbiamo questa libertà, non deve portare al caos. Dobbiamo avere consenso sullo stato del registro. E questo consenso, o consenso, di solito significa consenso su due cose:
- Cosa è successo?
- In che ordine è avvenuto?
Alla prima domanda possiamo facilmente rispondere: non appena una transazione creata correttamente è stata aggiunta al registro, è avvenuta. E basta. Le informazioni possono raggiungere tutti i partecipanti in tempi diversi, ma alla fine tutti i nodi riceveranno questa transazione e scopriranno che è avvenuta.
Se fosse un blockchain, i miner deciderebbero cosa accade. Tutto ciò che il miner decide di includere nel blocco – questo accade. Tutto ciò che non include nel blocco – non accade.
Nei blockchain, i miner risolvono anche il secondo problema di consenso: l'ordine. Possono ordinare le transazioni all'interno del blocco come vogliono.
Come si determina allora l'ordine delle transazioni nel DAG?

Solo perché il grafo è orientato, abbiamo già un certo ordine. Ogni transazione si riferisce a una o più transazioni precedenti, genitoriali. I genitori, a loro volta, si riferiscono ai loro genitori, e così via. I genitori, ovviamente, appaiono prima delle transazioni figlio. Se una delle transazioni può essere raggiunta attraverso i legami "genitore-figlio", sappiamo esattamente l'ordine tra le transazioni in questa catena di transazioni.

Ma l'ordine tra le transazioni non sempre può essere determinato solo dalla forma del grafo. Ad esempio, quando due transazioni si trovano su rami paralleli del grafo.

Per risolvere l'ambiguità in tali casi, ci affidiamo ai cosiddetti fornitori di ordine. Li chiamiamo anche "testimoni". Sono utenti comuni, il cui compito è quello di inviare costantemente transazioni nella rete seguendo un ordine, cioè in modo tale che ciascuna delle loro transazioni precedenti possa essere raggiunta attraverso i legami "genitore-figlio". I fornitori di ordine sono utenti fidati, e l'intera rete si basa sul fatto che non violeranno questa regola. Affinché si possa avere fiducia in loro, richiediamo che ogni fornitore di ordine sia una persona o un'organizzazione conosciuta (non anonima) e abbia qualcosa da perdere nel caso in cui violi le regole, ad esempio, reputazione o affari basati sulla fiducia. I fornitori di ordine sono scelti dagli utenti, e ogni utente include un elenco dei suoi fornitori di fiducia in ogni transazione che invia alla rete. Questo elenco è composto da 12 fornitori. Questo numero è piuttosto ridotto, permettendo a una persona di verificare le identità e la reputazione di ciascuno di essi, e sufficiente affinché la rete continui a funzionare nel caso di inevitabili problemi con una minoranza di fornitori di ordine.

Questo elenco di fornitori varia da utente a utente, ma gli elenchi delle transazioni adiacenti possono differire al massimo di un fornitore.
Ora che abbiamo i fornitori di ordine, possiamo isolare le loro transazioni nel DAG e ordinare tutte le altre transazioni attorno all'ordine creato da essi. È possibile creare un tale algoritmo (vedi

Obyte White Paper per dettagli tecnici).
Ma l'ordine in tutta la rete non può essere determinato istantaneamente, abbiamo bisogno di tempo affinché i fornitori di ordine inviino un numero sufficiente delle loro transazioni per verificare l'ordine finale delle transazioni passate.
E, poiché l'ordine è determinato solo dalle posizioni delle transazioni dei fornitori nel DAG, tutti i nodi della rete prima o poi riceveranno tutte le transazioni e giungeranno alla medesima conclusione riguardo all'ordine delle transazioni.

Quindi, abbiamo un consenso su ciò che consideriamo accaduto: qualsiasi transazione che entra nel DAG è considerata avvenuta. Abbiamo anche un consenso sull'ordine degli eventi: questo è visibile in base alle relazioni parenti-figli delle transazioni, o ricavato dall'ordine delle transazioni inviate dai fornitori di ordine. Pertanto, abbiamo un consenso.

Questo tipo di consenso è presente in Obyte. Anche se l'accesso al registro di Obyte è completamente decentralizzato, il consenso riguardo all'ordine delle transazioni rimane comunque centralizzato, poiché 10 su 12 fornitori sono controllati dal creatore (Anton Churyumov), e solo due di essi sono indipendenti. Stiamo cercando candidati disposti a diventare uno dei fornitori di ordine indipendenti, per aiutarci a decentralizzare la determinazione dell'ordine nel registro.
Recentemente è emerso un terzo candidato indipendente, desideroso di stabilire e mantenere un nodo fornendo ordine: l'Università di Nicosia.

Ora, come controlliamo le doppie spese (double-spends)?
Secondo le regole, quando si rilevano due transazioni che spendono la stessa moneta, la transazione che si trova prima nell'ordine finale di tutte le transazioni vince. La seconda viene invalidata dall'algoritmo di consenso.

Nel caso in cui sia possibile stabilire un ordine tra due transazioni che spendono la stessa moneta (in base alle relazioni parenti-figli), tutti i nodi rifiutano immediatamente tale tentativo di doppia spesa.

Tuttavia, se l'ordine non è visibile dalle relazioni parenti tra due transazioni simili, entrambe vengono accettate nel registro e dovremo attendere il consenso e la determinazione dell'ordine tra di esse tramite i fornitori di ordine. In tal caso, vincerà la transazione più antecedente, mentre l'altra diventerà non valida.

Anche se la seconda transazione diventa non valida, rimane comunque nel registro poiché ha già transazioni successive ad essa, che non hanno violato nulla e non sapevano che in futuro questa transazione sarebbe diventata non valida. Altrimenti dovremmo eliminare il genitore di buone transazioni successive, il che violerebbe il principio fondamentale della rete: ogni transazione valida è accettata nel registro.

Questa è una regola molto importante che consente all'intero sistema di essere resistente ai tentativi di censura.
Immaginiamo che tutti i fornitori di ordine si accordino nel tentativo di "censurare" una specifica transazione. Possono ignorarla e mai sceglierla come "genitore" per le loro transazioni, ma non basta, quella transazione può comunque essere inclusa indirettamente come genitore di un'altra transazione emessa da qualsiasi utente della rete che non partecipa al complotto. Col tempo, tale transazione inizierebbe a ricevere sempre più figli, nipoti e pronipoti da normali utenti, espandendosi come una palla di neve, e tutti i fornitori di ordine coinvolti nel complotto dovranno ignorare anche queste transazioni. Alla fine, dovranno censurare l'intera rete, il che equivale a sabotarli.

In questo modo, il DAG rimane resistente alla censura, anche in presenza di un accordo tra i fornitori di ordine, superando così la blockchain in termini di resilienza alla censura, nella quale non possiamo fare nulla se i miner decidono di non includere una qualsiasi delle transazioni. E questo deriva dalla caratteristica principale del DAG: la partecipazione al registro è assolutamente indipendente e senza intermediari, e le transazioni sono irreversibili.
Fonte: habr.com
