I den hÀr artikeln kommer jag att berÀtta om DAG (Directed Acyclic Graph, riktad acyklisk graf) och dess tillÀmpningar i distribuerade register, och vi kommer att jÀmföra det med blockchain.

DAG Àr inget nytt inom kryptovalutavÀrlden. Du har kanske hört talas om det som en lösning pÄ blockchainens skalbarhetsproblem. Men idag kommer vi inte att prata om skalbarhet, utan om vad som gör kryptovalutor annorlunda Àn allt annat: decentralisering, avsaknad av mellanled och motstÄndskraft mot censur.

Jag kommer ocksÄ att visa dig att DAG faktiskt Àr mer motstÄndskraftig mot censur, och att det inte finns nÄgra mellanled för att fÄ Ätkomst till registret.

I vanliga blockchain-system har anvÀndare inte direkt Ätkomst till sjÀlva registret. NÀr du vill lÀgga till en transaktion i registret mÄste du "be" blockproducenten (blockproducent, Àven kallad "miner") att göra det. Det Àr minerna som avgör vilken transaktion som ska lÀggas till i nÀsta block och vilken som inte ska. Det Àr minerna som har exklusiv Ätkomst till blocken och rÀtten att besluta vems transaktion som ska accepteras för att lÀggas till i registret.
Miner Àr mellanled som stÄr mellan dig och det distribuerade registret.

I praktiken kontrollerar vanligtvis ett litet antal minerpooler tillsammans mer Àn hÀlften av nÀtverkets berÀkningskraft. För Bitcoin Àr det fyra pooler, för Ethereum tvÄ. Om de gÄr samman kan de blockera vilka transaktioner de vill.

Under de senaste Ären har mÄnga variationer av blockchain föreslagits, som skiljer sig Ät i principerna för att vÀlja blockproducenter. Men blockproducenterna finns fortfarande kvar, de stÄr fortfarande "vid bommen": varje transaktion mÄste gÄ igenom blockproducenten, och om den inte accepterar den sÄ existerar transaktionen i praktiken inte.

Detta Ă€r ett oundvikligt problem med blockchain. Och om vi vill lösa det mĂ„ste vi radikalt Ă€ndra designen och helt och hĂ„llet bli av med block och blockproducenter. IstĂ€llet för att bygga en kedja av block kommer vi att koppla samman transaktionerna sjĂ€lva, genom att inkludera hash av flera föregĂ„ende transaktioner i varje transaktion. Resultatet blir en struktur som inom matematiken kallas en riktad acyklisk graf â DAG.
Nu har alla direkt tillgĂ„ng till registret, utan mellanhĂ€nder. NĂ€r du vill lĂ€gga till en transaktion i registret â lĂ€gger du helt enkelt till den. Du vĂ€ljer nĂ„gra överordnade transaktioner, lĂ€gger till dina uppgifter, signerar och skickar din transaktion i nĂ€tverket. Klart. Det finns ingen som kan stoppa dig frĂ„n att göra det, sĂ„ din transaktion Ă€r redan i registret.
Detta Àr det mest decentraliserade och mest motstÄndskraftiga mot censur sÀttet att lÀgga till transaktioner i registret utan mellanhÀnder. Eftersom alla som vill kan lÀgga till sina transaktioner i registret utan att frÄga nÄgon om tillstÄnd.

DAG kan ses som den tredje fasen av registerutvecklingen. Först kom centraliserade register, dÀr en part kontrollerade tillgÄngen till dem. Sedan kom blockkedjor, dÀr det redan fanns flera kontrollerare som registrerade transaktioner i registret. Och slutligen, i DAG finns det överhuvudtaget inga kontrollerare, anvÀndarna lÀgger till sina transaktioner direkt.

Nu nÀr vi har denna frihet, fÄr den inte leda till kaos. Vi mÄste ha en överenskommelse om tillstÄndet för registret. Och denna överenskommelse, eller konsensus, innebÀr vanligtvis enighet om tvÄ saker:
- Vad hÀnde?
- I vilken ordning intrÀffade detta?
PÄ den första frÄgan kan vi enkelt svara: sÄ snart en korrekt skapad transaktion har lagts till i registret, har den intrÀffat. Punkt. Informationen om detta kan nÄ alla deltagare vid olika tidpunkter, men till slut fÄr alla noder denna transaktion och fÄr veta att den har intrÀffat.
Om det vore en blockkedja, skulle miners avgöra vad som hĂ€nder. Allt som en miner beslutar att inkludera i blocket â hĂ€nder. Allt som han inte inkluderar i blocket â hĂ€nder inte.
I blockkedjor avgör miners ocksÄ det andra konsensusproblemet: ordningen. De fÄr ordna transaktioner inom blocket hur de vill.
Hur kan man faststÀlla ordningen pÄ transaktioner i DAG?

Bara eftersom grafen Ă€r riktad har vi redan en viss ordning. Varje transaktion refererar till en eller flera tidigare, överordnade transaktioner. Ăverordnade transaktioner refererar i sin tur till sina överordnade, och sĂ„ vidare. De överordnade transaktionerna intrĂ€ffar uppenbarligen före de underordnade transaktionerna. Om nĂ„gon av transaktionerna kan nĂ„s genom att följa lĂ€nkarna 'överordnad-underordnad', vet vi exakt ordningen mellan transaktionerna i denna kedja av transaktioner.

Men ordningen mellan transaktionerna kan inte alltid bestÀmmas enbart frÄn grafens struktur. Till exempel nÀr tvÄ transaktioner befinner sig pÄ parallella grenar av grafen.

För att lösa tvetydigheten i sÄdana fall förlitar vi oss pÄ sÄ kallade ordningsleverantörer. Vi kallar dem ocksÄ 'vittnen'. Dessa Àr vanliga anvÀndare vars uppgift Àr att stÀndigt skicka transaktioner till nÀtverket i en viss ordning, sÄ att varje tidigare transaktion kan nÄs genom lÀnkarna 'överordnad-underordnad'. Ordningsleverantörerna Àr betrodda anvÀndare, och hela nÀtverket förlitar sig pÄ att de inte bryter mot denna regel. För att rationalt kunna lita pÄ dem krÀver vi att varje ordningsleverantör Àr en kÀnd (icke-anonym) person eller organisation och har nÄgot att förlora om de bryter mot reglerna, till exempel sitt rykte eller ett förtroendebaserat företag.

Ordningsleverantörerna vÀljs av anvÀndarna, och varje anvÀndare inkluderar en lista över sina betrodda leverantörer i varje transaktion som de skickar till nÀtverket. Denna lista bestÄr av 12 leverantörer. Det Àr ett relativt litet antal sÄ att en person kan verifiera identiteter och rykte för var och en av dem, och tillrÀckligt för att nÀtverket ska kunna fortsÀtta fungera vid ofrÄnkomliga problem med en minoritet av ordningsleverantörerna.
Denna lista över leverantörer varierar frÄn anvÀndare till anvÀndare, men listorna för angrÀnsande transaktioner kan skilja sig Ät med högst en leverantör.

Nu nÀr vi har ordningsleverantörer kan vi markera deras transaktioner i DAG och ordna alla andra transaktioner runt den ordning som skapats av dem. Det finns en möjlighet att skapa en sÄdan algoritm (se för tekniska detaljer).
Men ordningen i hela nÀtverket kan inte faststÀllas omedelbart, vi behöver tid för att ordningsleverantörerna ska skicka tillrÀckligt med sina transaktioner för att sÀkerstÀlla den slutliga ordningen av tidigare transaktioner.
Och eftersom ordningen endast bestÀms av positionerna för transaktionerna hos leverantörerna i DAG, kommer alla noder i nÀtverket förr eller senare att ta emot alla transaktioner och nÄ samma slutsats om ordningen av transaktionerna.

SÄledes har vi en överenskommelse om vad vi anser har intrÀffat: varje transaktion som kommer in i DAG har intrÀffat. Vi har ocksÄ en överenskommelse om ordningen av hÀndelser: detta kan antingen ses genom relationerna mellan transaktionerna eller hÀrledas frÄn ordningen av transaktionerna som skickats av ordningsleverantörerna. Det innebÀr att vi har konsensus.

Denna typ av konsensus finns i Obyte. Trots att Ätkomsten till Obytes register Àr helt decentraliserad Àr konsensus om ordningen av transaktioner fortfarande centraliserad, eftersom 10 av 12 leverantörer kontrolleras av skaparen (Anton Churjumov), och endast tvÄ av dem Àr oberoende. Vi söker kandidater som Àr villiga att bli en av de oberoende ordningsleverantörerna för att hjÀlpa oss decentralisera faststÀllandet av ordning i registret.
Nyligen har en tredje oberoende kandidat dykt upp, som vill etablera och underhĂ„lla en nod som ordningsleverantör â Universitetet i Nicosia.

SĂ„, hur kontrollerar vi dubbelutgifter (double-spends)?
Enligt reglerna, nÀr tvÄ transaktioner som spenderar samma mynt upptÀcks, vinner den transaktion som kom först i den slutliga ordningen av alla transaktioner. Den andra blir ogiltig genom konsensusalgoritmen.

Om det finns möjlighet att faststÀlla ordningen mellan tvÄ transaktioner som spenderar samma mynt (genom relationer mellan förÀlder-barn), avvisar alla noder omedelbart ett sÄdant försök till dubbelutgift.

Om ordningen inte kan ses genom förÀlder-barn-relationerna mellan dessa tvÄ transaktioner, accepteras de bÄda i registret och vi mÄste vÀnta pÄ konsensus och faststÀllande av ordning mellan dem med hjÀlp av ordningsleverantörerna. DÄ vinner den tidigare transaktionen, medan den andra blir ogiltig.

Ăven om den andra transaktionen blir ogiltig, förblir den Ă€ndĂ„ i registret, eftersom den redan har efterföljande transaktioner som hĂ€nvisar till den, som inte har brutit mot nĂ„gra regler och inte visste att denna transaktion skulle bli ogiltig i framtiden. Annars skulle vi behöva ta bort förĂ€ldern till bra efterföljande transaktioner, vilket skulle bryta mot det grundlĂ€ggande principen i nĂ€tverket â varje korrekt transaktion accepteras i registret.

Detta Ă€r en mycket viktig regel som gör att hela systemet kan stĂ„ emot försök till censur.Â
LÄt oss förestÀlla oss att alla ordningsleverantörer gÄr samman i ett försök att "censurera" en specifik transaktion. De kan ignorera den och aldrig vÀlja den som "förÀlder" för sina transaktioner, men det Àr inte tillrÀckligt, denna transaktion kan fortfarande inkluderas indirekt som förÀlder till nÄgon annan transaktion utfÀrdad av vilken anvÀndare av nÀtverket som helst som inte deltar i sammansvÀrjningen. Med tiden kommer en sÄdan transaktion att fÄ fler och fler barn, barnbarn och barnbarnsbarn frÄn vanliga anvÀndare, vÀxa som en snöboll, och alla överenskomna ordningsleverantörer mÄste ocksÄ ignorera dessa transaktioner. Slutligen mÄste de censurera hela nÀtverket, vilket motsvarar sabotage.

SÄledes förblir DAG censurtÄligt, Àven om det finns en sammansvÀrjning av ordningsleverantörer, vilket övertrÀffar blockkedjan i motstÄndskraft mot censur, dÀr vi inte kan göra nÄgot om gruvarbetarna beslutar att inte inkludera nÄgon av transaktionerna. Och detta följer av det grundlÀggande egenskapen hos DAG: deltagande i registret Àr helt oberoende och utan mellanhÀnder, och transaktioner Àr oÄterkalleliga.
KĂ€lla: habr.com
