Plokiahelast DAG-i: vahendajatest vabanemine

Selles artiklis räägin teile DAG-ist (Directed Acyclic Graph) ja selle rakendamisest hajutatud pearaamatutes ning võrdleme seda plokiahelaga.

Plokiahelast DAG-i: vahendajatest vabanemine

DAG pole krüptovaluutade maailmas midagi uut. Võib-olla olete kuulnud sellest kui lahendusest plokiahela mastaapsuse probleemidele. Kuid täna ei räägi me skaleeritavusest, vaid sellest, mis eristab krüptorahasid kõigest muust: detsentraliseerimine, vahendajate puudumine ja tsensuurile vastupanu.

Plokiahelast DAG-i: vahendajatest vabanemine

Samuti näitan teile, et DAG on tegelikult tsensuurikindlam ja pearaamatule juurdepääsuks pole vahendajaid.

Plokiahelast DAG-i: vahendajatest vabanemine

Meile tuttavates plokiahelates pole kasutajatel otsest juurdepääsu pearaamatule endale. Kui soovite tehingut pearaamatusse lisada, peate seda "paluma" plokitootjal (teise nimega "kaevur"). Kaevurid otsustavad, milline tehing järgmisse plokki lisada ja milline mitte. Kaevandajatel on eksklusiivne juurdepääs plokkidele ja õigus otsustada, kelle tehing pearaamatusse kandmiseks vastu võetakse.

Kaevurid on vahendajad, kes seisavad teie ja jagatud pearaamatu vahel.

Plokiahelast DAG-i: vahendajatest vabanemine

Praktikas kontrollib tavaliselt väike arv kaevanduskogumeid ühiselt üle poole võrgu arvutusvõimsusest. Bitcoini jaoks on need neli basseini, Ethereumi jaoks kaks. Kui nad teevad koostööd, saavad nad blokeerida kõik soovitud tehingud.

Plokiahelast DAG-i: vahendajatest vabanemine

Viimastel aastatel on välja pakutud palju plokiahelate variante, mis erinevad plokitootjate valimise põhimõtete poolest. Kuid plokitootjad ise ei kao kuhugi, nad seisavad endiselt "tõkkepuul": iga tehing peab käima läbi plokitootja ja kui ta seda vastu ei võta, siis tehingut tegelikult polegi.

Plokiahelast DAG-i: vahendajatest vabanemine

See on plokiahela paratamatu probleem. Ja kui me tahame seda lahendada, peame radikaalselt muutma disaini ja täielikult vabanema plokkidest ja plokkide tootjatest. Ja plokkide ahela ehitamise asemel ühendame tehingud ise, sealhulgas igas tehingus mitme varasema räsi. Selle tulemusena saame struktuuri, mida matemaatikas tuntakse suunatud atsüklilise graafikuna - DAG.

Nüüd on kõigil otsene juurdepääs registrile, ilma vahendajateta. Kui soovite tehingut pearaamatusse lisada, lisage see lihtsalt. Valite mitu vanematehingut, lisate oma andmed, allkirjastate ja saadate tehingu võrgus olevatele kaaslastele. Valmis. Keegi ei keela teid seda tegemast, seega on teie tehing juba pearaamatus.

See on kõige detsentraliseeritum ja tsensuurikindel viis tehingute lisamiseks pearaamatusse ilma vahendajateta. Sest kõik lihtsalt lisavad oma tehingud registrisse, kelleltki luba küsimata.

Plokiahelast DAG-i: vahendajatest vabanemine

DAG-e võib pidada registrite arengu kolmandaks etapiks. Kõigepealt olid olemas tsentraliseeritud registrid, kus üks osapool kontrollis neile juurdepääsu. Seejärel tulid plokiahelad, millel oli juba mitu kontrollerit, kes tehinguid pearaamatusse registreerisid. Ja lõpuks, DAG-is pole üldse kontrollereid; kasutajad lisavad oma tehingud otse.

Plokiahelast DAG-i: vahendajatest vabanemine

Nüüd, kui meil on see vabadus, ei tohiks see kaoseni viia. Meil peab olema kokkulepe registri oleku osas. Ja see kokkulepe või konsensus tähendab tavaliselt kokkulepet kahes asjas:

  1. Mis juhtus?
  2. Millises järjekorras see juhtus?

Esimesele küsimusele saame lihtsalt vastata: kui korrektselt loodud tehing on pearaamatusse lisatud, on see toimunud. Ja periood. Teave selle kohta võib jõuda kõikide osalejateni erinevatel aegadel, kuid lõpuks saavad kõik sõlmed selle tehingu kätte ja teavad, et see juhtus.

Kui see oleks plokiahel, otsustaksid kaevurid, mis juhtub. Mida iganes kaevandaja otsustab plokki lisada, see juhtub. Kõik, mida ta plokki ei kaasa, ei juhtu.

Plokiahelates lahendavad kaevurid ka teise konsensuse probleemi: korra. Neil on lubatud tellida plokisiseseid tehinguid vastavalt oma soovile.

Kuidas teha kindlaks tehingute järjekord DAG-is?

Plokiahelast DAG-i: vahendajatest vabanemine

Lihtsalt sellepärast, et meie graafik on suunatud, on meil juba teatud järjekord. Iga tehing viitab ühele või mitmele eelmisele põhitehingule. Vanemad omakorda viitavad oma vanematele jne. Vanemad ilmuvad ilmselgelt laste tehingute ette. Kui mõne tehinguni on võimalik jõuda vanema ja lapse lingi üleminekuga, teame täpselt tehingute järjekorda selles tehinguahelas.

Plokiahelast DAG-i: vahendajatest vabanemine

Kuid tehingute vahelist järjekorda ei saa alati määrata ainult graafiku kuju järgi. Näiteks kui kaks tehingut asuvad graafiku paralleelsetel harudel.

Plokiahelast DAG-i: vahendajatest vabanemine

Ebaselguse lahendamiseks tugineme sellistel juhtudel nn tellimuse pakkujatele. Kutsume neid ka "tunnistajateks". Tegemist on tavakasutajatega, kelle ülesandeks on pidevalt tehinguid korrapäraselt võrku saata, s.t. nii et iga nende varasemate tehinguteni on võimalik jõuda üleminekutega mööda vanem-laps linke. Tellimuste pakkujad on usaldusväärsed kasutajad ja kogu võrk loodab, et nad seda reeglit ei riku. Selleks, et ratsionaalselt usaldage neid, nõuame, et iga tellimuse pakkuja oleks tuntud (mitteanonüümne) isik või organisatsioon ja tal oleks midagi kaotada, kui ta rikub reegleid, näiteks maine või usaldusel põhinev äri.

Plokiahelast DAG-i: vahendajatest vabanemine

Tellimuse pakkujad valivad kasutajad ja iga kasutaja lisab oma usaldusväärsete pakkujate loendi igasse võrku saadetavasse tehingusse. See loend sisaldab 12 pakkujat. See on piisavalt väike arv, et inimene saaks kontrollida igaühe identiteeti ja mainet, ning piisav, et tagada võrgu toimimine ka edaspidi, kui tellimuste pakkujate vähemusega tekivad vältimatud probleemid.

See pakkujate loend on kasutajati erinev, kuid naabertehingute loendid võivad erineda kuni ühe teenusepakkuja lõikes.

Plokiahelast DAG-i: vahendajatest vabanemine

Nüüd, kui meil on tellimuste pakkujad, saame isoleerida nende tehingud DAG-i ja tellida kõik muud tehingud nende loodud tellimuse alusel. Sellist algoritmi on võimalik luua (vt. Obyte valge raamat tehniliste üksikasjade jaoks).

Kuid kogu võrgu järjekorda ei saa kohe kindlaks teha, vajame aega, et tellimuste pakkujad saaksid saata piisava arvu oma tehinguid, et kontrollida varasemate tehingute lõplikku järjekorda.

Ja kuna järjekorra määravad ainult pakkujate tehingute positsioonid DAG-s, saavad kõik võrgu sõlmed varem või hiljem kõik tehingud ja jõuavad tehingute järjekorra osas samale järeldusele.

Plokiahelast DAG-i: vahendajatest vabanemine

Seega oleme ühel meelel selles, mis meie arvates juhtus: juhtus iga tehing, mis DAG-sse jõuab. Meil on ka kokkulepe sündmuste järjekorra osas: see kas ilmneb tehingute seostest või tuleneb tellimuste esitajate saadetud tehingute järjekorrast. Seega on meil üksmeel.

Plokiahelast DAG-i: vahendajatest vabanemine

Meil on see konsensuse versioon Obyte'is. Kuigi juurdepääs Obyte'i pearaamatule on täielikult detsentraliseeritud, on konsensus tehingute järjekorra osas siiski tsentraliseeritud, kuna 10-st pakkujast 12 on looja (Anton Churyumov) kontrolli all ja ainult kaks neist on sõltumatud. Otsime kandidaate, kes soovivad saada üheks sõltumatuks tellimuste pakkujaks, et aidata meil detsentraliseerida pearaamatu tellimist.

Hiljuti on ilmunud kolmas sõltumatu kandidaat, kes soovib installida ja hooldada tellimuste pakkuja sõlme – Nicosia ülikool.

Plokiahelast DAG-i: vahendajatest vabanemine

Kuidas me nüüd kontrollime topeltkulutusi?

Reeglite kohaselt võidab kahe tehingu sama mündi kulutamise korral tehing, mis on kõigi tehingute lõppjärjestuses esimene. Teine on konsensusalgoritmiga kehtetu.

Plokiahelast DAG-i: vahendajatest vabanemine
Kui on võimalik luua järjekord kahe sama mündi kulutamise tehingu vahel (vanema-lapse ühenduste kaudu), siis kõik sõlmed lükkavad sellise kulutuse kahekordistamise katse kohe tagasi.

Plokiahelast DAG-i: vahendajatest vabanemine

Juhul, kui tellimus ei ole nähtav kahe sellise tehingu vahelisest emasuhetest, võetakse need mõlemad pearaamatusse ning peame ootama nende vahel konsensust ja tellimuse vormistamist tellimuste pakkujate kaudu. Siis võidab varasem tehing ja teine ​​muutub kehtetuks.

Plokiahelast DAG-i: vahendajatest vabanemine

Kuigi teine ​​tehing muutub kehtetuks, jääb see siiski registrisse, sest sellel on juba sellele viitavad hilisemad tehingud, mis ei rikkunud midagi ega teadnud, et see tehing tulevikus kehtetuks muutub. Vastasel juhul peaksime eemaldama heade järgnevate tehingute vanema, mis rikuks võrgu põhiprintsiipi - iga õige tehing võetakse pearaamatusse.

Plokiahelast DAG-i: vahendajatest vabanemine

See on väga oluline reegel, mis võimaldab kogu süsteemil olla tsensuurikatsetele vastupidav. 

Kujutagem ette, et kõik tellimuste pakkujad teevad kokkumängu, püüdes "tsenseerida" ühte konkreetset tehingut. Nad võivad seda ignoreerida ja mitte kunagi valida seda oma tehingute jaoks "vanemaks", kuid sellest ei piisa, tehingu saab siiski kaudselt kaasata mõne muu tehingu emale, mille on välja andnud mis tahes võrgu kasutaja, kes ei tee koostööd. Aja jooksul saab selline tehing tavakasutajatelt üha rohkem lumepallina kasvamas lapsi, lapselapsi ja lapselapselapsi ning ka kõik kokkulepitud tellimuste pakkujad peavad neid tehinguid ignoreerima. Lõpuks peavad nad kogu võrgu tsenseerima, mis on samaväärne sabotaažiga.

Plokiahelast DAG-i: vahendajatest vabanemine

Nii jääb DAG tsensuurikindlaks isegi siis, kui tellimuste pakkujate vahel on kokkumäng, ületades sellega tsensuurikindlat plokiahelat, milles me ei saa midagi teha, kui kaevurid otsustavad ühtegi tehingut mitte kaasata. Ja see tuleneb DAG-i põhivarast: registris osalemine on täiesti sõltumatu ja ilma vahendajateta ning tehingud on pöördumatud.

Allikas: www.habr.com

Lisa kommentaar