DAG vs Blockchain. «Вилка» развития технологий

Экономика меняется глазах, и новые технологии могут закрыть потребности рынка. Сегодня главная проблема в том, что товарообмен излишне обременен трансакционными издержками, снизить которые может только открытая инвестиционно-предпринимательская экосреда. Ее участники создадут сообщества, партнерства, правила сотрудничества и будут взаимодействовать напрямую. Предполагается, что такая среда будет жить и развиваться, если сможет обеспечить изменения в онлайн-режиме. Для этого необходима технологическая база в виде децентрализованного решения.
Организовать открытую децентрализованную ИТ-среду взаимодействия можно двумя путями – на базе блокчейн-технологий или используя архитектуру на базе направленного ациклического графа (directed acyclic graph, DAG). Блокчейн-решений масса, они обладают схожими

ограничениями. В первую очередь речь идет о проблеме масштабируемости и отсутствии равноправного доступа к реестру трансакций. DAG-алгоритм позволяет достичь консенсуса – пользователи получают равный и беспрепятственный доступ к реестру при отсутствии блоков, майнеров, любых посредников. Архитектуру и алгоритм решения на базе DAG обсудили на открытом семинаре DAG vs Blockchain. «Вилка» развития технологий, организованном Лабораторией ИПИ.

Терминология и основные положения

«Дети» – новые трансакции, которые добавляются в конец реестра.

«Свидетели» – трансакции участников, которым доверяет новый пользователь. В данном примере каждый пользователь перед тем, как совершать трансакции, должен назначить 12 участников-свидетелей. Поскольку доверие может быть потеряно, свидетелей можно постепенно заменять, по одному. Свидетели не имеют никаких преференций, не могут принимать решения в отношении чужих трансакций.

«Родители» – трансакции, совершенные до «детей».

«Лучший родитель» – один из родителей, выбранный автором дочерней транзакции как «лучший». Подробнее о выборе лучшего родителя рассказывается в видеозаписи лекции.

«Главная цепочка» – цепочка, которая начинается из данной транзакции и составляется из связей «лучшего родителя». Все главные цепочки неизбежно сливаются в одну. Таким образом, глобальный порядок транзакций по отношению к «ребенку» основан на выборе лучшего «родителя». Получаем упорядоченную цепь трансакций с опорой на лучших родителей. И можем упорядочить другие цепочки относительно последней трансакции.

Как достигается консенсус

Пожалуй, самое «больное» место распределенных решений – двойная трата (двойная трансакция), когда недобросовестный (или невнимательный) пользователь пытается продублировать операцию, в которой распоряжается активом, например хочет дважды потратить один и тот же биткоин. В блокчейне майнер создает блок и произвольно выбирает одну из двух трансакций.

В DAG-системе никто не обладает таким правом выбора, определение дубликата должно происходить автоматически. Мало того, нельзя удалить дубликат, потому что вслед за ним уже появились новые трансакции. Пользователи не обязаны знать о мошенничестве. Необходимо оставить дубликат, чтобы сохранить хеши и цепи, но сгенерировать информацию о попытке двойной траты.

Если оригинал и дубликат расположены в одной цепи и между ними есть родительские трансакции, то недействительной считается последняя трансакция. Если же оригинал и дубликат попали в параллельные цепи, необходимо выяснить, в какой цепи находится первичная трансакция.

Презентацию можно посмотреть здесь.

Упрощенно об алгоритме

Для каждой из недавних транзакций определяется «лучший родитель» – это один из родителей последней трансакции, такой что его собственный перечень свидетелей отличается не более чем на одного участника от перечня «ребенка». Аналогичным образом определяется «лучший дедушка» и так далее. В результате получается совместимый список свидетелей по всей главной цепи, построенной из новой трансакции.

Относительно этой цепи упорядочиваем все остальные транзакции. Та версия двойной траты, которая упорядочилась раньше, считается действительной, а другая – ложной.

У каждой новой транзакции своя главная цепь, но поскольку главные цепи разных транзакций сходятся, то и порядок, построенный на их основе, будет одинаковым для достаточно старых транзакций.

Поскольку уровень доверия к свидетелю является отправной точкой, процессы должны быть стабильными, а трансакции быстрыми, то свидетели должны часто выполнять трансакции, и их операции должны быть последовательными. Важно не путать свидетеля с майнером. Майнер в блокчейне – субъект, принимающий решения, а свидетель в DAG – объект, который все участники используют в своих интересах. Так обеспечивается открытый и равноправный доступ к записям в реестр.

Видеозапись лекции можно посмотреть здесь.