Ebben a cikkben a DAG-ról (Irányított Akliklikus Graf, Directed Acyclic Graph) és a decentralizált nyilvántartásokban való alkalmazásáról fogok beszélni, és összehasonlítjuk a blokklánccal.

A DAG nem új dolog a kriptovaluták világában. Talán hallott róla, mint a blokkláncok skálázhatósági problémáinak megoldásáról. De ma nem a skálázhatóságról beszélünk, hanem arról, ami a kriptovalutákat megkülönbözteti mindentől: a decentralizáció, a közvetítők hiánya és a cenzúrával szembeni ellenálló képesség.

Azt is megmutatom Önnek, hogy a DAG valójában ellenállóbb a cenzúrával szemben, és nincs közvetítő a nyilvántartás eléréséhez.

A megszokott blokkláncokban a felhasználóknak nincs közvetlen hozzáférésük magához a nyilvántartáshoz. Amikor tranzakciót szeretne hozzáadni a nyilvántartáshoz, 'kérnie' kell a blokkgyártót (block producer, más néven 'bányász') ennek megtételére. A bányászok döntik el, hogy melyik tranzakciót adják hozzá a következő blokkhoz, és melyiket nem. Csak a bányászoknak van kizárólagos hozzáférésük a blokkokhoz és joguk arra, hogy eldöntsék, melyik tranzakciót fogadják el a nyilvántartásba.
A bányászok azok a közvetítők, akik Ön és a decentralizált nyilvántartás között állnak.

A gyakorlatban azonban általában egy kis számú bányászpool kollektívan ellenőrzi a hálózat számítási kapacitásának több mint felét. A Bitcoin esetében négy pool, az Ethereum esetében kettő található. Ha ezek összejátszanak, bármilyen tranzakciót blokkolhatnak, amit csak akarnak.

Az utóbbi években számos olyan blokklánc-változatot javasoltak, amelyek eltérnek a blokkgyártók kiválasztásának elveiben. De maguk a blokkgyártók nem tűntek el, még mindig 'a sorompón állnak': minden tranzakciónak át kell mennie a blokkgyártón, és ha ő nem fogadja el, akkor a tranzakció valójában nem létezik.

Ez elkerülhetetlen probléma a blokklánc esetében. És ha meg akarjuk oldani, radikálisan meg kell változtatnunk a formatervezést, és teljesen meg kell szabadulnunk a blokkoktól és a blokkgyártóktól. Ahelyett, hogy blokk láncot építenénk, összekapcsoljuk magukat a tranzakciókat, így minden tranzakcióba beillesztjük több korábbi tranzakció hash-ét. Ennek eredményeként egy olyan struktúrát kapunk, amelyet a matematikában irányított aklikus grafként ismernek – DAG.
Most már mindenki közvetlen hozzáféréssel rendelkezik a nyilvántartáshoz, közvetítők nélkül. Amikor tranzakciót szeretne hozzáadni a nyilvántartáshoz – egyszerűen hozzáadja. Kiválaszt több szülő tranzakciót, hozzáadja az adatait, aláírja, és elküldi tranzakcióját a hálózaton. Kész. Nincs senki, aki megakadályozhatná ezt, így a tranzakciója már a nyilvántartásban van.
Ez a legdecentralizáltabb, legtartósabb megoldás a tranzakciók nyilvántartásba való bejegyzésére közvetítők nélkül. Mert mindenki, aki akarja, egyszerűen hozzáadhatja a tranzakcióit a nyilvántartáshoz, senkitől sem kérve engedélyt.

A DAG a nyilvántartások evolúciójának harmadik szakaszának tekinthető. Először központosított nyilvántartások léteztek, ahol egy fél ellenőrizte a hozzáférést. Utána jöttek a blokkláncok, amelyekben már több ellenőr volt, akik rögzítették a tranzakciókat a nyilvántartásban. Végül a DAG-ban egyáltalán nincsenek ellenőrök, a felhasználók közvetlenül adhatják hozzá tranzakcióikat.

Most, hogy ilyen szabadságunk van, nem szabad káoszhoz vezetnie. Meg kell állapodnunk a nyilvántartás állapotáról. És ez a megállapodás, vagy konszenzus, általában két dologra vonatkozik:
- Mi történt?
- Milyen sorrendben történt?
Az első kérdésre könnyen válaszolhatunk: amint a megfelelően létrehozott tranzakciót hozzáadták a nyilvántartáshoz, megtörtént. Ennyi. Az információ erről különböző időpontokban érkezhet el minden résztvevőhöz, de végül minden csomópont megkapja ezt a tranzakciót, és megtudja, hogy megtörtént.
Ha ez blokklánc lenne, a bányászok döntenék el, hogy mi történik. Minden, amit a bányász bele akar foglalni a blokkba – az történik. Amit nem foglal bele a blokkba – az nem történik meg.
A blokkláncokban a bányászok a konszenzus második problémáját is megoldják: a sorrendet. Szabadon rendezhetik a tranzakciókat a blokk belsejében tetszésük szerint.
Hogyan határozhatjuk meg a tranzakciók sorrendjét a DAG-ban?

Csak azért, mert a grafikonunk irányított, már van egyfajta rendünk. Minden tranzakció egy vagy több korábbi, szülő tranzakcióra hivatkozik. A szülők viszont a saját szüleikre hivatkoznak, és így tovább. A szülők nyilvánvalóan korábban jelennek meg, mint a gyermek tranzakciók. Ha bármelyik tranzakció elérhető a "szülő-gyermek" linkek mentén, pontosan tudjuk a sorrendet a tranzakciók között ebben a tranzakciós láncban.

De a tranzakciók közötti sorrendet nem mindig lehet meghatározni pusztán a grafikon formájából. Például, amikor két tranzakció párhuzamos ágakon helyezkedik el a grafikonban.

A bizonytalanság feloldása érdekében az úgynevezett sorrend szolgáltatókra támaszkodunk. Ezt a szerepet is betölthetik a "tanúk". Ők olyan hétköznapi felhasználók, akiket az alapján választanak ki, hogy folyamatosan tranzakciókat küldenek a hálózatra, betartva a sorrendet, azaz úgy, hogy minden előző tranzakciójuk elérhető legyen a "szülő-gyermek" linkek mentén. A sorrend szolgáltatók - megbízható felhasználók, és az egész hálózat az ő szabályaik megszegésére nem támaszkodik. Annak érdekében, hogy racionálisan bízhassunk bennük, megköveteljük, hogy minden sorrend szolgáltató egy ismert (nem névtelen) személy vagy szervezet legyen, és legyen valami, amit elveszíthet, ha megszegi a szabályokat, például hírnév vagy bizalom alapú üzlet.

A sorrend szolgáltatókat a felhasználók választják ki, és minden felhasználó minden tranzakcióhoz beletartozik a megbízható szolgáltatók listája, amely 12 szolgáltatóból áll. Ez egy viszonylag kis szám ahhoz, hogy az ember ellenőrizhesse mindegyik személyazonosságát és hírnevét, és elegendő ahhoz, hogy a hálózat működjön a sorrend szolgáltatók kisebbségével számolható elkerülhetetlen problémák esetén.
Ez a szolgáltatói lista felhasználónként változik, de a szomszédos tranzakciók listái legfeljebb egy szolgáltatóval eltérhetnek.

Most, hogy már vannak sorrend szolgáltatók, kiemelhetjük a tranzakcióikat a DAG-ban, és minden más tranzakciót körülöttük ütemezhetünk az általuk létrehozott rend körül. Létezik arra lehetőség, hogy ilyen algoritmust hozzunk létre (lásd: a technikai részletekért).
A hálózaton belüli sorrendet nem lehet azonnal meghatározni, időre van szükségünk ahhoz, hogy a sorrend biztosítói elegendő számú tranzakciót küldjenek, hogy megerősítsék a korábbi tranzakciók végső sorrendjét.
Mivel a sorrend csupán a tranzakciók pozíciói alapján határozódik meg a DAG-ban, minden csomópont a hálózaton előbb-utóbb megkapja az összes tranzakciót, és azonos következtetésre jut a tranzakciók sorrendjével kapcsolatban.

Tehát egyetértés van abban a kérdésben, hogy ami történt: bármely tranzakció, amely bekerült a DAG-ba, megtörtént. Ezen kívül egyetérteszünk az események sorrendjével is: ez vagy a tranzakciók rokon kapcsolataiból látható, vagy a sorrend alapján feltételezhető, amelyet a sorrend biztosítói küldtek. Így konszenzusunk van.

Ez a konszenzus típus az Obyte-ban található. Bár az Obyte nyilvántartásához való hozzáférés teljesen decentralizált, a tranzakciók sorrendjéről szóló konszenzus még mindig centralizált, mivel a 12 sorrend biztosítóból 10 az alkotó (Anton Churyumov) irányítása alatt áll, és csak kettő független. Keresünk olyan jelölteket, akik szeretnének független sorrend biztosítók lenni, hogy segítsenek a sorrend decentralizálásában a nyilvántartásban.
Nemrégiben megjelent egy harmadik független jelölt, aki szeretné létrehozni és fenntartani a sorrend biztosítói csomópontját – a Nicosiai Egyetem.

Most hogyan kezeljük a dupla költéseket (double-spends)?
A szabályok szerint, ha két tranzakciót észlelünk, amelyek ugyanazt a érmét költik el, az a tranzakció nyer, amelyik korábban került a tranzakciók végső sorrendjébe. A második érvénytelen lesz a konszenzus algoritmus által.

Ha lehetőség van a sorrend megállapítására két olyan tranzakció között, amelyek ugyanazt a érmét költik el (szülő-gyermek kapcsolatok alapján), akkor minden csomópont azonnal elutasítja az ilyen dupla költési próbálkozást.

Ha azonban a sorrend nem látható a két ilyen tranzakció közötti szülői kapcsolatokból, mindkettőt elfogadják a nyilvántartásba, és várnunk kell a konszenzusra és a sorrend megállapítására a sorrend biztosítói révén. Ekkor a korábban érkező tranzakció nyer, a második pedig érvénytelen lesz.

Bár a második tranzakció érvénytelen lesz, még mindig a nyilvántartásban marad, mivel már vannak olyan következő tranzakciók, amelyek hivatkoznak rá, amelyek nem sértették meg a szabályokat, és nem tudták, hogy ez a tranzakció a jövőben érvénytelen lesz. Ellenkező esetben el kellene távolítanunk a jónak ítélt következő tranzakciók szülőjét, ami megsértené a hálózat alapelveit – minden érvényes tranzakciót be kell fogadni a nyilvántartásba.

Ez egy nagyon fontos szabály, amely lehetővé teszi, hogy az egész rendszer ellenálljon a cenzúra kísérleteinek.
Képzeljük el, hogy az összes rendfenntartó szolgáltató összeesküszik abban a kísérletben, hogy 'cenzúrázzon' egy adott tranzakciót. Figyelmen kívül hagyhatják és soha nem választhatják 'szülőnek' a tranzakcióikhoz, de ez nem elegendő; ez a tranzakció így is közvetve szülőként szerepelhet bármely más tranzakciónál, amelyet a hálózat bármely olyan felhasználója bocsátott ki, aki nem vesz részt az összeesküvésben. Az idő múlásával az ilyen tranzakciók egyre több gyermekkel, unokával és dédunokával bővülnek a normál felhasználók által, mint egy hógolyó, és az összes összeesküvő rendfenntartónak figyelmen kívül kell hagynia ezeket a tranzakciókat is. Végül az egész hálózatot cenzúrázniuk kell, ami egyenértékű a szabotázzsal.

Így a DAG cenzúraálló marad, még akkor is, ha a rendfenntartók között összeesküvés zajlik, ezzel felülmúlva a blokkláncot a cenzúrával szembeni ellenállásban, ahol nem tehetünk semmit, ha a bányászok úgy döntenek, hogy nem választanak ki egy tranzakciót. Ez a DAG fő tulajdonságából következik: a nyilvántartásban való részvétel teljesen független és közvetítők nélkül történik, a tranzakciók pedig visszafordíthatatlanok.
Forrás: habr.com
