U ovom članku ću vam govoriti o DAG-u (Usmjereni aciklički graf) i njegovoj primjeni u distribuiranim registrima, te ćemo ga usporediti s blockchainom.

DAG nije nova stvar u svijetu kriptovaluta. Možda ste čuli za njega kao rješenje problema skalabilnosti blockchaina. No danas ćemo govoriti ne o skalabilnosti, već o onome što čini kriptovalute drugačijima od svega ostalog: decentralizaciji, odsutnosti posrednika i otpornosti na cenzuru.

Također ću vam pokazati da je DAG zapravo otporniji na cenzuru i da nema posrednika za pristup registru.

U poznatim blockchainima, korisnici nemaju direktan pristup samom registru. Kada želite dodati transakciju u registar, morate 'zamoliti' proizvođača blokova (blok-prodavača, koji je također 'rudar'). Proizvođači blokova odlučuju koju transakciju dodati u sljedeći blok, a koju ne. Samo oni imaju ekskluzivan pristup blokovima i pravo odlučivanja koju transakciju prihvatiti za dodavanje u registar.
Rudari su posrednici koji stoje između vas i distribuiranog registra.

U praksi, obično mali broj rudarskih bazena kolektivno kontrolira više od polovice računalnih resursa mreže. Za Bitcoin to su četiri bazena, a za Ethereum dva. U slučaju njihovog dogovora, mogu blokirati bilo koju transakciju koju žele.

Tijekom posljednjih nekoliko godina predloženo je mnogo varijacija blockchaina, koje se razlikuju u načelima odabira proizvođača blokova. No, sami proizvođači blokova ne nestaju, oni i dalje 'stoje na ulazu': svaka transakcija mora proći kroz proizvođača blokova, a ako je on ne prihvaća, tada transakcija zapravo ne postoji.

To je neizbježan problem u slučaju blockchaina. I ako želimo riješiti taj problem, moramo radikalno promijeniti dizajn i potpuno se riješiti blokova i proizvođača blokova. Umjesto da gradimo lanac blokova, povezivat ćemo same transakcije, uključujući u svaku transakciju hash nekoliko prethodnih. Kao rezultat toga, dobit ćemo strukturu poznatu u matematici kao usmjereni aciklički graf – DAG.
Sada svaki ima izravan pristup registru, bez posrednika. Kada želite dodati transakciju u registar – jednostavno je dodajete. Odaberete nekoliko roditeljskih transakcija, dodate svoje podatke, potpišete i šaljete svoju transakciju u mrežu. Gotovo. Nema nikoga tko bi vam mogao to spriječiti, tako da je vaša transakcija već u registru.
To je najdecentraliziraniji, najotporniji na cenzuru način dodavanja transakcija u registar bez posrednika. Jer svatko tko to želi može jednostavno dodati svoje transakcije u registar, ne pitajući dozvolu nikoga.

DAG se može smatrati trećom fazom evolucije registara. Prvo su bili centralizirani registri, gdje je jedna strana kontrolirala pristup njima. Zatim su došli blockchaini, u kojima je već bilo nekoliko kontrolora koji su upisivali transakcije u registar. I, konačno, u DAG-u nema nikakvih kontrolora, korisnici dodaju svoje transakcije izravno.

Sada, kada imamo tu slobodu, ne bi trebala dovesti do kaosa. Moramo imati suglasnost o stanju registra. A ta suglasnost, ili konsenzus, obično znači suglasnost o dvjema stvarima:
- Što se dogodilo?
- U kojem je redoslijedu to nastalo?
Na prvo pitanje lako možemo odgovoriti: čim je ispravno stvorena transakcija dodana u registar, ona se dogodila. I točka. Informacije o tome mogu stići do svih sudionika u različito vrijeme, ali na kraju će sve čvorove primiti ovu transakciju i saznati da se dogodila.
Da je to bio blockchain, rudari bi odlučivali što se događa. Sve što rudar odluči uključiti u blok – to se događa. Sve što ne uključi u blok – ne događa se.
U blockchainima, rudari također rješavaju drugi problem konsenzusa: redoslijed. Imaju pravo uređenja transakcija unutar bloka kako žele.
Kako odrediti redoslijed transakcija u DAG-u?

Samo zato što je naš graf usmjeren, već imamo neki redoslijed. Svaka transakcija se odnosi na jednu ili više prethodnih, roditeljskih. Roditelji, zauzvrat, se odnose na svoje roditelje, i tako dalje. Roditelji se očito pojavljuju prije djece transakcija. Ako se bilo koja od transakcija može doseći prijelazima preko veza "roditelj-dijete", sigurno znamo redoslijed između transakcija u ovom lancu transakcija.

Ali redoslijed između transakcija ne može se uvijek odrediti samo iz oblika grafa. Na primjer, kada dvije transakcije leže na paralelnim granama grafa.

Kako bismo razriješili nejasnoće u takvim slučajevima, oslanjamo se na takozvane pružatelje reda. Također ih nazivamo "svjedocima". To su obični korisnici, čija je zadaća konstantno slanje transakcija u mrežu u skladu s redom, tj. tako da svaka njihova prethodna transakcija može biti ostvarena prijelazima preko veza "roditelj-dijete". Pružatelji reda - pouzdani korisnici, i cijela mreža se oslanja na to da oni neće prekršiti ovo pravilo. Kako bismo razmjerno im vjerovali, zahtijevamo da svaki pružatelj reda bude poznata (neanonimna) osoba ili organizacija te da ima nešto što može izgubiti ako prekrši pravila, poput reputacije ili poslovanja temeljenog na povjerenju.

Pružatelji reda biraju se od strane korisnika, a svaki korisnik uključuje popis svojih pouzdanih pružatelja u svaku transakciju koju šalje u mrežu. Ovaj popis se sastoji od 12 pružatelja. To je prilično mali broj, kako bi osoba mogla provjeriti identitete i reputaciju svakog od njih, i dovoljno da mreža nastavi raditi u slučaju neizbježnih problema s manjinskim pružateljima reda.
Ovaj popis pružatelja varira od korisnika do korisnika, ali popisi susjednih transakcija mogu se razlikovati najviše za jednog pružatelja.

Sada kada imamo pružatelje reda, možemo istaknuti njihove transakcije u DAG-u i urediti sve ostale transakcije oko reda koji su stvorili. Mogućnost stvaranja takvog algoritma postoji (vidi za tehničke detalje).
No, red u cijeloj mreži ne može biti odmah definiran, potrebna nam je vrijeme da provajderi reda pošalju dovoljno svojih transakcija kako bismo se uvjerili u konačni red prošlih transakcija.
I, budući da se red definira samo pozicijama transakcija provajdera u DAG-u, svi čvorovi mreže prije ili kasnije dobit će sve transakcije i doći do istog zaključka o redu transakcija.

Dakle, imamo saglasnost oko onoga što smatramo da se dogodilo: svaka transakcija koja je ušla u DAG se dogodila. Također imamo saglasnost o redu događaja: to je ili vidljivo iz rodbinskih veza transakcija, ili se izvodi iz reda transakcija koje su poslali provajderi reda. Znači, imamo konsenzus.

Ovaj oblik konsenzusa imamo u Obyteu. Iako je pristup registru Obyte potpuno decentraliziran, konsenzus o redu transakcija je i dalje centraliziran, jer 10 od 12 provajdera kontrolira osnivač (Anton Čurjumov), a samo su dva od njih neovisna. Tražimo kandidate koji žele postati jednim od neovisnih provajdera reda kako bismo nam pomogli decentralizirati uspostavljanje reda u registru.
Nedavno se pojavio treći neovisni kandidat koji želi uspostaviti i održavati čvor provajdera reda – Sveučilište u Nikoziji.

Kako kontroliramo dvostruke troškove (double-spends)?
Prema pravilima, kada se otkriju dvije transakcije koje troše istu kovanicu, transakcija koja se pojavi ranije u konačnom redu svih transakcija pobjeđuje. Druga se invalidira konsenzusnim algoritmom.

U slučaju da postoji mogućnost uspostavljanja reda između dvije transakcije koje troše jednu kovanicu (prema vezi roditelj-dijete), sve čvorove odmah odbacuju takvu pokušaj dvostrukog trošenja.

Ako red nije vidljiv iz roditeljskih veza između dvije takve transakcije, obje se prihvaćaju u registar, a mi ćemo morati čekati konsenzus i uspostavljanje reda između njih putem provajdera reda. Tada će pobijediti ranija transakcija, a druga će postati nevaljana.

Iako druga transakcija postaje nevaljana, ona ostaje u registru jer već ima naknadne transakcije koje se na nju referiraju, a koje nisu prekršile pravila niti su znale da će ova transakcija postati nevaljana u budućnosti. U suprotnom, morali bismo ukloniti roditelja dobrih naknadnih transakcija, što bi prekršilo glavno pravilo mreže – svaka ispravna transakcija se prihvaća u registar.

To je veoma važno pravilo koje omogućava cijelom sustavu da bude otporan na pokušaje cenzure.
Zamislimo da svi pružatelji usluga reda uđu u zavjeru kako bi 'cenzurirali' jednu određenu transakciju. Oni je mogu ignorirati i nikada je ne izabrati kao 'roditelja' za svoje transakcije, ali to nije dovoljno; ta transakcija se i dalje može uključiti posredno kao roditelj neke druge transakcije koju izdaje bilo koji korisnik mreže koji ne sudjeluje u zavjeri. S vremenom će takva transakcija dobivati sve više i više potomaka, unuka i praunuka od običnih korisnika, šireći se poput snježne grude, a svim dogovorenim pružateljima usluga reda će biti potrebno ignorirati i te transakcije također. Na kraju, morat će cenzurirati cijelu mrežu, što je ekvivalentno sabotaži.

Na taj način, DAG ostaje otporan na cenzuru, čak i ako postoji zavjera pružatelja usluga reda, čime nadmašuje blockchain u otpornosti na cenzuru, gdje ne možemo učiniti ništa ako rudari odluče ne uključiti neku od transakcija. To je rezultat glavne karakteristike DAG-a: sudjelovanje u registru je potpuno neovisno i bez posrednika, a transakcije su nepovratne.
Izvor: habr.com
