Në këtë artikull do t'ju tregoj për DAG (Grafi i Orientuar Akciklinik, Directed Acyclic Graph) dhe aplikimin e tij në regjistrat e shpërndarë, dhe do të krahasojmë atë me blockchain-in.

DAG nuk është diçka e re në botën e kriptomonedhave. Ndoshta keni dëgjuar për të si një zgjidhje për problemet e shkallëzueshmërisë së blockchain-eve. Por sot do flasim jo për shkallëzueshmërinë, por për atë që bën kriptomonedhat ndryshe nga çdo gjë tjetër: decentralizimi, mungesa e ndërmjetësve dhe qëndrueshmëria ndaj censurës.

Gjithashtu do t'ju tregoj se DAG në fakt është më i qëndrueshëm ndaj censurës dhe se nuk ka ndërmjetës për aksesin në regjistër.

Në blockchain-et që njohim, përdoruesit nuk kanë akses të drejtpërdrejtë në regjistrin vetë. Kur dëshironi të shtoni një transaksion në regjistër, ju duhet të 'kërkoni' që të bëjë këtë prodhuesi i bllokut (bllok-prodhuese, ose 'mineri'). Pikërisht minierët vendosin se cili transaksion të shtohet në bllokun e ardhshëm dhe cili jo. Vetëm minierët kanë akses ekskluziv në blloqet dhe të drejtën për të vendosur se çfarë transaksioni të pranohet për tu shtuar në regjistër.
Minerët janë ndërmjetës, që qëndrojnë midis jush dhe regjistrit të shpërndarë.

Në praktikë, zakonisht një numër i vogël i baseneve të minerëve kontrollojnë kolektivisht më shumë se gjysmën e kapacitetit llogaritës të rrjetit. Për Bitcoin, kjo është katër basene, për Ethereum — dy. Në rast se ata bien në marrëveshje, ata mund të bllokojnë çdo transaksion që dëshirojnë.

Në vitet e fundit, janë propozuar shumë variacione të bllokchain-eve, të cilat ndryshojnë në parimet e zgjedhjes së prodhuesve të bllokut. Por prodhuesit e bllokut nuk ikin askund; ata ende ‘qëndrojnë në portë’: çdo transaksion duhet të kalojë përmes prodhuesit të bllokut, dhe nëse ai nuk e pranon, atëherë transaksioni, në fakt, nuk ekziston.

Ky është një problem i pashmangshëm në rastin e bllokchain-it. Dhe nëse duam ta zgjidhim atë, ne duhet ta ndryshojmë radikalisht dizajnin dhe të eliminojmë plotësisht blloket dhe prodhuesit e bllokut. Në vend që të ndërtojmë një zinxhir bllokesh, ne do të lidhim vetë transaksionet, duke përfshirë në çdo transaksion hash-et e disa bllokëve të mëparshëm. Si rezultat, ne do të kemi një strukturë, e njohur në matematikë si graf i orientuar aciklik – DAG.
Tani çdo kush ka qasje të drejtpërdrejtë në regjistër, pa ndërmjetës. Kur dëshiron të shtosh një transaksion në regjistër – thjesht e shton atë. Zgjedh disa transaksione prindërore, shton të dhënat e tua, nënshkruan dhe dërgon transaksionin tuaj përmes rrjetit. Përtë, nuk ka askënd që mund të të ndalojë ta bësh këtë, kështu që transaksioni yt është tashmë në regjistër.
Ky është mënyra më e decentralizuar, më e paprekshme nga censura për të shtuar transaksione në regjistër pa ndërmjetës. Sepse çdo njeri mund të shtojë thjesht transaksionet e tij në regjistër, pa kërkuar leje nga askush.

DAG mund të mendohet si faza e tretë e evolucionit të regjistrave. Në fillim ishin regjistrat e centralizuar, ku një palë kontrollonte qasjen në to. Pastaj erdhën blockchain-et, ku kishte disa kontrollorë që regjistronin transaksionet në regjistër. Dhe, së fundi, në DAG nuk ka asnjë kontrollor, përdoruesit shtojnë transaksionet e tyre drejtpërdrejt.

Tani që kemi një liri të tillë, ajo nuk duhet të çojë në kaos. Ne duhet të kemi një marrëveshje mbi gjendjen e regjistrit. Kjo marrëveshje, ose konsensusi, zakonisht do të thotë një konsensus mbi dy gjëra:
- Çfarë ndodhi?
- Në cilin rend ndodhi kjo?
Për pyetjen e parë ne mund të përgjigjemi lehtë: sa herë që një transaksion i krijuar siç duhet është shtuar në regjistër, ai ka ndodhur. Dhe pika. Informacioni për këtë mund të arrijë te të gjithë pjesëmarrësit në kohë të ndryshme, por përfundimisht të gjitha nodet do të marrin këtë transaksion dhe do të mësojnë se ai ndodhi.
Nëse do të ishte një bllok, minatorët do të vendosnin se çfarë ndodh. Çdo gjë që minatori vendos të përfshijë në bllok – ajo ndodh. Çdo gjë që ai nuk përfshin në bllok – nuk ndodh.
Në blloqet minatorët gjithashtu vendosin problemin e dytë të konsensusit: rendi. Atëherë ata lejohet ta rendisin transaksionet brenda bllokut siç duan.
Si mund të përcaktohet rendi i transaksioneve në DAG?

Vetëm sepse grafiku ynë është i orientuar, ne tashmë kemi një rend të caktuar. Çdo transaksion referohet në një ose më shumë transaksione të mëparshme, prindërore. Prindërit, nga ana e tyre, referohen në prindërit e tyre, dhe kështu me radhë. Prindërit, sigurisht, shfaqen më herët se transaksionet fëmijë. Nëse ndonjë nga transaksionet mund të arrihet përmes lidhjeve 'prind-fëmijë', ne e dimë saktësisht rendin midis transaksioneve në këtë zinxhir transaksionesh.

Por rendi midis transaksioneve nuk mund të përcaktohet gjithmonë vetëm nga forma e grafit. Për shembull, kur dy transaksione ndodhen në degë paralel të grafit.

Për të zgjidhur paqartësinë në këto raste, ne mbështetemi në ato që quhen ofrues të rendit. Ne gjithashtu i quajmë 'dëshmitarë'. Këta janë përdorues të zakonshëm, të cilët kanë detyrën e vazhdueshme për të dërguar transaksione në rrjet duke respektuar rendin, domethënë, që çdo transaksion i tyre i mëparshëm mund të arrihet përmes lidhjeve 'prind-fëmijë'. Ofruesit e rendit - përdorues të besuar, dhe e gjithë rrjeti mbështetet në faktin se ata nuk do ta shkelin këtë rregull. Për të racionalisht të besojmë atyre, ne kërkojmë që çdo ofrues rendi të jetë një person ose një organizatë e njohur (jo anonime) dhe të ketë diçka për të humbur në rast se shkel rregullat, si për shembull, reputacionin ose biznesin e bazuar në besim.

Ofruesit e rendit zgjidhen nga përdoruesit, dhe çdo përdorues përfshin një listë të ofruesve të tij të besuar në çdo transaksion që dërgon në rrjet. Kjo listë përbëhet nga 12 ofrues. Ky numër është mjaft i vogël për t'u siguruar që një person mund të verifikojë identitetet dhe reputacionin e secilit prej tyre, dhe i mjaftueshëm që rrjeti të vazhdojë të funksionojë në rastin e problemeve të pashmangshme me pakicën e ofruesve të rendit.
Kjo listë e ofruesve ndryshon nga përdoruesi në përdorues, por listat e transaksioneve fqinje mund të ndryshojnë maksimumi me një ofrues.

Tani që kemi ofruesit e rendit, ne mund të nxjerrim transaksionet e tyre në DAG dhe të rendisim të gjitha transaksionet e tjera rreth rendit të krijuar nga ata. Ka mundësi për të krijuar një algoritëm të tillë (shih për detajet teknike).
Porosit e gjithë rrjetit nuk mund të përcaktohen menjëherë, na nevojitet kohë që ofruesit e rendit të dërgojnë një numër të mjaftueshëm të transaksioneve të tyre për të verifikuar rendin e përfundimtar të transaksioneve të kaluara.
Dhe, pasi rendi përcaktohet vetëm nga pozitat e transaksioneve të ofruesve në DAG, të gjitha nodet e rrjetit herë pas here do të marrin të gjitha transaksionet dhe do të arrijnë në të njëjtin përfundim në lidhje me rendin e transaksioneve.

Pra, kemi një marrëveshje mbi atë që e konsiderojmë të ndodhur: çdo transaksion që ka hyrë në DAG, ka ndodhur. Gjithashtu, kemi një marrëveshje mbi rendin e ngjarjeve: kjo është ose e dukshme nga lidhjet e afërta të transaksioneve, ose dedukohet nga rendi i transaksioneve të dërguara nga ofruesit e rendit. Kështu, kemi konsensus.

Ky variant konsensusi e kemi në Obyte. Megjithëse qasja në regjistrin Obyte është plotësisht e decentralizuar, konsensusi mbi rendin e transaksioneve është ende i centralizuar, pasi 10 nga 12 ofrues kontrollohen nga krijuesi (Anton Churyumov), dhe vetëm dy nga ata janë të pavarur. Po kërkojmë kandidatë që dëshirojnë të bëhen një nga ofruesit e pavarur të rendit, për t'u ndihmuar në decentralizimin e vendosjes së rendit në regjistër.
Së fundmi u shfaq një kandidat i tretë i pavarur, që dëshiron të vendosë dhe të mbështesë një nod të ofruesit të rendit – Universitas Nikosia.

Tani, si e kontrollojmë shpenzimin e dyfishtë (double-spends)?
Sipas rregullave, kur zbulohet dy transaksione që shpenzojnë të njëjtën monedhë, ajo transaksion që del më parë në rendin përfundimtar të të gjitha transaksioneve fiton. E dyta invalidizohet nga algoritmi i konsensusit.

Në rast se ka mundësi për të vendosur rendin mes dy transaksionesh që shpenzojnë një monedhë (në lidhjet prind-fëmijë), atëherë të gjitha nodet menjëherë refuzojnë një përpjekje të tillë të shpenzimit të dyfishtë.

Në rastin kur rendi nuk është i dukshëm nga lidhjet prindërore midis dy transaksioneve të tilla, të dyja pranohen në regjistër, dhe do të na duhet të presim konsensusin dhe vendosjen e rendit midis tyre përmes ofruesve të rendit. Atëherë do të fitojë transaksioni më i hershëm, ndërsa tjetri do të bëhet i pavlefshëm.

Megjithëse transaksioni i dytë bëhet i pavlefshëm, ai ende mbetet në regjistër, sepse tashmë ka transaksione pasuese që i referohen atij, të cilat nuk kanë shkelur asgjë dhe nuk e dinë se në të ardhmen ky transaksion do të bëhet i pavlefshëm. Në të kundërt, do të na duhej të fshinim prindin nga tranzaksionet e mira pasuese, gjë që do të shkelte parimin kryesor të rrjetit – çdo transaksion i saktë pranohet në regjistër.

Ky është një rregull shumë i rëndësishëm, që lejon që e tërë sistemi të jetë i qëndrueshëm ndaj përpjekjeve për censurë.
Le të supozojmë se të gjithë ofruesit e rregullave hyjnë në një marrëveshje për të 'censuruar' një transaksion të caktuar. Ata mund ta injorojnë atë dhe nuk do ta zgjedhin kurrë si 'prind' për transaksionet e tyre, por kjo është e pamjaftueshme, pasi ky transaksion ende mund të përfshihet në mënyrë të tërthortë si prind i ndonjë transaksioni tjetër, të lëshuar nga ndonjë përdorues të rrjetit që nuk merr pjesë në marrëveshje. Me kalimin e kohës, një transaksion i tillë do të përfitojë gjithnjë e më shumë fëmijë, nipëra dhe mbesa nga përdoruesit e zakonshëm, duke u zgjeruar si një grumbull bore, dhe të gjithë ofruesit e rregullave të marrëveshjes do të detyrohen të injorojnë edhe këto transaksione. Në fund, ata do të duhet të censurojnë të gjithë rrjetin, që është njësoj si sabota.

Kështu, DAG mbetet i qëndrueshëm ndaj cenzurës, edhe nëse ka një marrëveshje mes ofruesve të rregullave, duke e bërë atë më të qëndrueshëm ndaj cenzurës se blockchain, në të cilin nuk mund të bëjmë asgjë nëse minatorët vendosin të mos përfshijnë ndonjë nga transaksionet. Dhe kjo vjen nga cilësia kryesore e DAG: pjesëmarrja në regjistër është krejtësisht e pavarur dhe pa ndërmjetës, dhe transaksionet janë të pakthyeshme.
Burimi: habr.com
