Selles artiklis räägin teile DAG-ist (suunatud akükliline graaf) ja selle rakendustest jaotatud registrites ning võrreldes seda plokiahelaga.

DAG ei ole krüptovaluutade maailmas uus asi. Võib-olla olete kuulnud sellest lahendusena plokiahelate skaleeritavuse probleemidele. Kuid täna räägime mitte skaleeritavusest, vaid sellest, mis muudab krüptovaluutad eriliseks: detsentraliseerimine, vahendajate puudumine ja tsensuuri taluvus.

Samuti näitan teile, et DAG on tegelikult tsensuuri vastu veelgi vastupidavam ja sellel puuduvad vahendajad registrisse pääsemiseks.

Tavapärastel plokiahelatel ei ole kasutajatel juurdepääsu registrile. Kui soovite tehingut registrisse lisada, peate paluma bloki tootjat (bloki produtsent või „kaevandaja”) seda teha. Just kaevandajad otsustavad, millised tehingud lisatakse järgmisse blokki ja millised mitte. Just kaevandajatel on eksklusiivne juurdepääs plokkidele ja õigus otsustada, kelle tehingut aktsepteerida registrisse lisamiseks.
Kaevandajad on vahendajad, kes seisavad teie ja jaotatud registri vahel.

Praktikas kontrollib tavaliselt väike hulk kaevureid kollektiivselt üle poole võrgu arvutusvõimsusest. Bitcoini jaoks on need neli kaevandamisvõrku, Ethereumi jaoks kaks. Kui nad peaksid koostööd tegema, saavad nad blokeerida kõik tehingud, mida nad soovivad.

Viimaste aastate jooksul on esitatud mitmeid erinevaid plokiahelate variante, mis erinevad plokki tootvate tootjate valimise põhimõtetes. Kuid plokki tootjad ei kao kuskile, nad seisavad endiselt «tõkke peal»: iga tehing peab läbima plokkide tootja, ja kui ta ei aktsepteeri seda, siis tehingut, tegelikult, ei eksisteeri.

See on plokiahela puhul vältimatu probleem. Ja kui me tahame seda lahendada, peame me radikaalselt muutma disaini ja täielikult loobuma plokkidest ja plokki tootjatest. Ja selle asemel, et ehitada plokkide ahelat, ühendame me ise tehingud, lisades igasse tehingusse mitme eelmise hashid. Tulemuseks on struktuur, mida matemaatikas tuntakse suunatud aktsüklilise graafina – DAG.
Nüüd on igaühel otsene juurdepääs registrile, ilma vahendajateta. Kui soovite tehingu registrisse lisada – lisate selle lihtsalt. Valite mõned vanemtehingud, lisate oma andmed, allkirjastate ja saadate oma tehingu võrgus. Valmis. Ei ole kedagi, kes võiks teie tegemisi takistada, seega on teie tehing juba registris.
See on kõige detsentraliseeritum ja tsensuuri suhtes kõige vastupidavam viis tehingute lisamiseks registrisse ilma vahendajateta. Sest iga soovija saab lihtsalt lisada oma tehingud registrisse, küsimata kelleltki luba.

DAG-i võib pidada registrite evolutsiooni kolmandaks etapiks. Esmalt olid tsentraliseeritud registrid, kus üks osapool kontrollis juurdepääsu neile. Siis tulid plokiahelad, kus oli juba mitu kontrollijat, kes registreerisid tehingud. Lõpuks, DAG-is ei ole kontrollijaid, kasutajad lisavad oma tehingud otse.

Nüüd, kui meil on selline vabadus, ei tohiks see viia kaoseni. Me peame olema nõus registri seisundiga. Ja see nõusolek, või konsensus, tähendab tavaliselt kahe asja osas kokkulepet:
- Mis juhtus?
- Millises järjekorras see juhtus?
Esimesele küsimusele saame kergesti vastata: niipea kui õigesti loodud tehing lisatakse registrisse, on see toimunud. Ja punkt. Selle kohta saadud info võib jõuda kõigi osaliste juurde erineval ajal, kuid lõpuks saavad kõik sõlmed selle tehingu ja saavad teada, et see toimus.
Kui see oleks plokiahel, otsustaksid kaevandajad, mis juhtub. Kõik, mida kaevandaja otsustab plokki lisada - see juhtub. Kõik, mida ta plokki ei lisa - ei juhtu.
Plokiahelates lahendavad kaevandajad ka teise konsensuse probleemi: järjekord. Neil on lubatud järjestada tehingud ploki sees kuidas iganes nad soovivad.
Kuidas määrata tehingute järjekorda DAG-is?

Kuna meil on suunatud graaf, on meil juba mingi järjekord. Iga tehing viitab ühele või mitmele eelmisele, vanemale tehingule. Vanemad viitavad omakorda oma vanematele ja nii edasi. Vanemad ilmuvad ilmselgelt enne tütartehingute tehingut. Kui mõnda tehingut on võimalik saavutada "vanem-laps" linkide kaudu, siis me teame täpselt järjekorda nende tehingute vahel selle tehingute ahela sees.

Aga tehingute vaheline järjekord ei pruugi alati olla määratav ainult graafi kujust. Näiteks juhul, kui kaks tehingut asuvad graafi paralleelsetes harudes.

Sellistes olukordades, et vältida ebaselgust, toetume nn järjekorra pakkujatele. Me nimetame neid ka "tunnistajateks". Need on tavalised kasutajad, kelle ülesanne on pidevalt saatma tehinguid võrku järkjärgulise korra säilitamisega, st nii, et iga nende eelmine tehing on saavutatakse "vanem-laps" linkide kaudu. Järjekorra pakkujad – usaldusväärsed kasutajad, ning kogu võrgu usaldab, et nad ei riku seda reeglit. Selleks et mõistlik usaldama neid, nõuame, et iga korraldaja oleks tuntud (anonüümne) isik või organisatsioon ning omaks midagi, mida nad võivad kaotada, kui nad reegleid rikuvad, näiteks mainet või usaldusväärsusele põhinevat äri.

Korraldajad valitakse kasutajate poolt, ja iga kasutaja lisab oma usaldusväärsete korraldajate nimekirja igasse tehingusse, mille nad võrku saadavad. See nimekiri koosneb 12 korraldajast. See on piisavalt väike number, et inimene saaks kontrollida igaühe isikuid ja mainet, ning piisav, et võrk jätkaks töötamist, kui kohalike korraldajate seas tekivad vältimatult probleemid.
See korraldajate nimekiri varieerub kasutajalt kasutajale, kuid naabertehingute nimekirjad võivad erineda maksimum ühe korraldaja võrra.

Nüüd, kui meil on korraldajad, saame neid tehinguid DAG-is esile tõsta ja korrastada kõik teised tehingud nende poolt loodud korra ümber. Sellise algoritmi loomise võimalus on olemas (vt. tehniliste detailide jaoks).
Kuid järjekord kogu võrgus ei saa olla kohe määratud; meil on vaja aega, et korrakaitsjad saadaksid piisavalt oma tehinguid, et veenduda möödunud tehingute lõppjärjekorras.
Ja kuna järjekord määratakse ainult korrakaitsjate tehingute kohtade järgi DAG-is, saavad kõik võrgu sõlmed varem või hiljem kõik tehingud ja jõuavad sarnasele järeldusele tehingute järjekorra osas.

Nii et meil on kokkulepe selle osas, mida peame juhtunuks: iga tehing, mis on DAG-i jõudnud, on toimunud. Samuti on meil kokkulepe sündmuste järjekorra osas: see on kas nähtav tehingute sugulussidemete põhjal või järeldatakse see korrakaitsjate saadetud tehingute järjekorrast. Seega on meil konsensus.

Selle konsensuse variandi oleme Obyte'is. Kuigi Obyte'i registri juurde pääs on täielikult detsentraliseeritud, on tehingute järjekorra osas konsensus endiselt tsentraliseeritud, kuna 10 12 teenusepakkujast on selle loojate (Anton Churyumov) kontrolli all, ja ainult kaks neist on sõltumatud. Otsime kandidaate, kes sooviksid saada üheks sõltumatuks järjekorra teenusepakkujaks, et aidata meil detsentraliseerida järjekorra seadmine registris.
Hiljuti on ilmunud kolmas sõltumatu kandidaat, kes soovib rajada ja toetada järjekorra teenusepakkuja sõlme – Nikosia Ülikool.

Kuidas me kontrollime topeltkulutusi (double-spends)?
Reeglite kohaselt, kui avastame kaks tehingut, mis kulutavad sama münte, võidab see tehing, mis on esimesena kõigi tehingute lõplikus järjekorras. Teine muudab konsensuse algoritmi abil tühiseks.

Kui on võimalik kehtestada järjekord kahe tehingu vahel, mis kulutavad sama münti (vanemate-laste seoste kaudu), lükatakse kõik sõlmed selline topeltkulutuse katse kohe tagasi.

Kui kahte sarnast tehingut ei seosta ülemineku seosed, lisatakse mõlemad registeri ning peame ootama konsensuse saavutamist ja nende järjestuse määratlemist korraldaja pakkujatega. Siis võidab varasem tehing ja teine muutub kehtetuks.

Kuigi teine tehing muutub kehtetuks, jääb see ikkagi registrisse, kuna sellel on juba sellele viitavad järgnevad tehingud, mis ei ole midagi rikkunud ega teadnud, et tulevikus muutub see tehing kehtetuks. Vastasel korral peaksime headelt järgnevatelt tehingutelt vanema eemaldama, mis rikuks võrgu peamist põhimõtet – igasugune õige tehing lisatakse registrisse.

See on väga oluline reegel, mis tagab kogu süsteemi vastupidavuse tsensuuri katsedele.
Kujutage ette, et kõik korralduspakkumiste teenusepakkujad lähevad kokku, et "tsenseerida" ühte konkreetset tehingut. Nad võivad selle lihtsalt kõrvale jätta ja kunagi mitte valida oma tehingute „vanemaks“, kuid sellest ei piisa; see tehing võib ikka kaudselt kuuluda mõnele teisele tehingule, mille on välja andnud mõni võrgu kasutaja, kes ei osale kokkuleppes. Aja jooksul hakkab sellele tehingule ilmuma järjest rohkem ja rohkem lapsi, lapselapsi ja lapselapsi tavalistelt kasutajatelt, kogunedes nagu lumepall, ja kõik kokku leppinud korralduspakkumiste teenusepakkujad peavad ka need tehingud kõrvale jätma. Lõpuks peavad nad kõrvale jätma kogu võrgu, mis on samaväärne sabotaažiga.

Seega jääb DAG tsensuuri suhtes vastupidavaks, isegi kui korralduspakkumiste teenusepakkujate vahel on kokkulepe, ületades seeläbi plokiahela tsensuuri suhtes vastupidavust, kus me ei saa midagi teha, kui kaevurid otsustavad mitte lisada mingit tehingut. See tuleneb DAG peamisest omadusest: osalemine registeris on täiesti sõltumatu ja vahendajateta, ning tehingud on tagasiulatuvalt kehtivad.
Allikas: habr.com
