Во оваа статија ќе ви кажам за DAG (Directed Acyclic Graph) и неговата примена во дистрибуирани книги, а ние ќе го споредиме со блокчејн.

ДАГ не е ништо ново во светот на криптовалутите. Можеби сте слушнале за него како решение за проблемите со приспособливост на блокчејн. Но, денес нема да зборуваме за приспособливост, туку за она што ги прави криптовалутите различни од сè друго: децентрализација, недостаток на посредници и отпорност на цензура.

Ќе ви покажам и дека ДАГ е всушност поотпорен на цензура и нема посредници за пристап до книгата.

Во блокчејновите што ни се познати, корисниците немаат директен пристап до самата книга. Кога сакате да додадете трансакција во книгата, треба да го „замолите“ производителот на блокови (познато како „рудар“) да го направи тоа. Рударите се тие кои одлучуваат која трансакција да ја додадат на следниот блок, а која не. Рударите се тие кои имаат ексклузивен пристап до блоковите и право да одлучат чија трансакција ќе биде прифатена за вклучување во книгата.
Рударите се посредници кои стојат помеѓу вас и дистрибуираната книга.

Во пракса, обично мал број рударски базени колективно контролираат повеќе од половина од компјутерската моќ на мрежата. За Биткоин ова се четири базени, за Ethereum - два. Ако се договараат, можат да блокираат какви било трансакции што сакаат.

Во текот на изминатите неколку години, беа предложени многу варијации на блокчејн, кои се разликуваат во принципите на избор на производители на блокови. Но, самите блок-производители не одат никаде, тие сè уште „стојат на бариерата“: секоја трансакција мора да оди преку блок-производителот, а ако тој не ја прифати, тогаш трансакцијата, всушност, не постои.

Ова е неизбежен проблем со блокчејнот. И ако сакаме да го решиме, мора радикално да го промениме дизајнот и целосно да се ослободиме од блоковите и производителите на блокови. И наместо да изградиме синџир од блокови, ќе ги поврземе самите трансакции, вклучувајќи ги и хашовите на неколку претходни во секоја трансакција. Како резултат на тоа, добиваме структура позната во математиката како насочен ацикличен граф - ДАГ.
Сега секој има директен пристап до регистарот, без посредници. Кога сакате да додадете трансакција во книгата, едноставно ја додавате. Избирате неколку родителски трансакции, ги додавате вашите податоци, потпишувате и ја испраќате вашата трансакција до врсниците на мрежата. Подготвени. Нема кој да ве спречи да го направите ова, така што вашата трансакција е веќе во книгата.
Ова е најдецентрализираниот, најдоказ за цензура начин за додавање трансакции во книгата без посредници. Затоа што секој едноставно ги додава своите трансакции во регистарот без да побара дозвола од никого.

ДАГ може да се сметаат за трета фаза во еволуцијата на регистрите. Прво имаше централизирани регистри, каде што една партија го контролираше пристапот до нив. Потоа дојдоа блокчејнови, во кои веќе имаше неколку контролори кои евидентираа трансакции во книгата. И, конечно, нема контролори во ДАГ, корисниците директно ги додаваат своите трансакции.

Сега кога ја имаме оваа слобода, таа не треба да води до хаос. Мора да имаме договор за состојбата на регистарот. И овој договор, или консензус, обично значи договор за две работи:
- Што се случи?
- По кој редослед се случи ова?
Можеме лесно да одговориме на првото прашање: откако правилно креираната трансакција е додадена во книгата, таа се случила. И период. Информациите за ова може да стигнат до сите учесници во различни периоди, но на крајот сите јазли ќе ја добијат оваа трансакција и ќе знаат дека тоа се случило.
Да беше блокчејн, рударите ќе одлучат што ќе се случи. Што и да одлучи рударот да го вклучи во блок, се случува. Сè што тој не го вклучи во блокот не се случува.
Во блокчејн, рударите решаваат и втор проблем на консензус: ред. Дозволено е да ги нарачаат трансакциите во блокот како што сакаат.
Како да се одреди редоследот на трансакции во ДАГ?

Само затоа што нашиот график е насочен, веќе имаме одреден редослед. Секоја трансакција се однесува на една или повеќе претходни, матични. Родителите, пак, се однесуваат на своите родители итн. Родителите очигледно се појавуваат пред детските трансакции. Ако до некоја од трансакциите може да се дојде со транзиции на врската родител-дете, точно го знаеме редоследот помеѓу трансакциите во тој синџир на трансакции.

Но, редоследот помеѓу трансакциите не може секогаш да се одреди само од обликот на графикот. На пример, кога две трансакции лежат на паралелни гранки на графикот.

За да се реши двосмисленоста во вакви случаи, се потпираме на таканаречените даватели на нарачки. Ги нарекуваме и „сведоци“. Ова се обични корисници чија работа е континуирано да испраќаат трансакции до мрежата на уреден начин, т.е. така што до секоја претходна трансакција може да се стигне со следење на врските родител-дете. Давателите на нарачки се доверливи корисници, и целата мрежа се потпира на нив да не го прекршат ова правило. За да рационален верувајте им, бараме секој добавувач на нарачки да биде познато (неанонимно) лице или организација и да има што да изгуби доколку ги прекрши правилата, како што е угледот или бизнисот заснован на доверба.

Корисниците ги избираат давателите на нарачки и секој корисник вклучува список на доверливи провајдери во секоја трансакција што ја испраќа на мрежата. Оваа листа се состои од 12 провајдери. Ова е доволно мал број за едно лице да го потврди идентитетот и угледот на секој од нив, и доволно за да се осигура дека мрежата ќе продолжи да работи во случај на неизбежни проблеми со малцинство даватели на нарачки.
Оваа листа на провајдери варира од корисник до корисник, но списоците на соседните трансакции може да се разликуваат до еден провајдер.

Сега, кога имаме даватели на нарачки, можеме да ги изолираме нивните трансакции во ДАГ и да ги нарачаме сите други трансакции околу нарачката создадена од нив. Можно е да се создаде таков алгоритам (види. за технички детали).
Но, редоследот на целата мрежа не може да се одреди веднаш, ни треба време за давателите на нарачки да испратат доволен број од нивните трансакции за да го потврдат конечниот редослед на минатите трансакции.
А, бидејќи редоследот се одредува само според позициите на трансакциите на провајдерите во ДАГ, сите јазли на мрежата порано или подоцна ќе ги добијат сите трансакции и ќе дојдат до ист заклучок во однос на редоследот на трансакциите.

Значи, имаме договор за тоа што сметаме дека се случило: се случила секоја трансакција што ќе заврши во ДАГ. Имаме договор и за редоследот на настаните: тоа или е очигледно од односот на трансакциите или се заклучува од редоследот на трансакции испратени од давателите на нарачки. Значи имаме консензус.

Ја имаме оваа верзија на консензус во Obyte. Иако пристапот до книгата на Obyte е целосно децентрализиран, консензусот во врска со редоследот на трансакциите е сè уште централизиран бидејќи 10 од 12 провајдери се контролирани од креаторот (Антон Чурумов), а само двајца од нив се независни. Бараме кандидати кои сакаат да станат еден од независните даватели на нарачки за да ни помогнат да го децентрализираме нарачувањето на книгата.
Неодамна, трет независен кандидат се појави подготвен да инсталира и одржува јазол за доставувач на нарачки - Универзитетот во Никозија.

Сега како да ги контролираме двојното трошење?
Според правилата, ако се најдат две трансакции кои трошат иста монета, победува трансакцијата што е прва во конечниот редослед на сите трансакции. Вториот е поништен од консензусниот алгоритам.

Ако е можно да се воспостави ред помеѓу две трансакции кои трошат иста монета (преку врски родител-дете), тогаш сите јазли веднаш го отфрлаат таквиот обид за двојно трошење.

Во случај нарачката да не е видлива од матичните односи помеѓу две такви трансакции, и двете се прифатени во книгата, и ќе треба да почекаме за консензус и воспоставување на редот меѓу нив користејќи ги давателите на нарачки. Тогаш претходната трансакција ќе победи, а втората ќе стане неважечка.

И покрај тоа што втората трансакција станува неважечка, таа сè уште останува во регистарот бидејќи веќе има последователни трансакции што се однесуваат на неа, што не прекршило ништо и не знаело дека оваа трансакција ќе стане неважечка во иднина. Во спротивно, ќе треба да го отстраниме родител на добри последователни трансакции, што би го прекршило главниот принцип на мрежата - секоја правилна трансакција се прифаќа во книгата.

Ова е многу важно правило кое овозможува целиот систем да биде отпорен на обиди за цензура.
Да замислиме дека сите даватели на нарачки се договараат во обид да „цензурираат“ една специфична трансакција. Тие можат да го игнорираат и никогаш да не го изберат како „родител“ за нивните трансакции, но тоа не е доволно, трансакцијата сепак може индиректно да се вклучи како родител на некоја друга трансакција издадена од кој било корисник на мрежата кој не е во дослух. Со текот на времето, таквата трансакција ќе добива се повеќе и повеќе деца, внуци и правнуци од обичните корисници, кои растат како снежна топка, а сите договорени даватели на нарачки ќе мора да ги игнорираат и овие трансакции. На крајот ќе мора да ја цензурираат целата мрежа, што е еднакво на саботажа.

На овој начин, ДАГ останува отпорен на цензура дури и ако има дослух меѓу давателите на нарачки, а со тоа го надминува блокчејнот отпорен на цензура во кој не можеме да направиме ништо ако рударите решат да не вклучат ниту една трансакција. И ова произлегува од главниот имот на ДАГ: учеството во регистарот е целосно независно и без посредници, а трансакциите се неповратни.
Извор: www.habr.com
