Направленный ациклический граф (DAG) в блокчейне
Что такое DAG и чем он отличается от блокчейна?
Направленный ациклический граф (DAG) — это тип структуры данных, состоящий из вершин (узлов), соединенных направленными ребрами, которые никогда не образуют цикл. В контексте распределенных реестров, реестр на основе DAG организует транзакции или события в виде паутинообразного графа, а не единой последовательной цепочки. Это означает, что в отличие от традиционного блокчейна, где каждый новый блок ссылается только на одного предшественника (образуя линейную цепочку), узел в DAG может ссылаться на несколько предыдущих транзакций или блоков. В результате многие транзакции могут быть подтверждены параллельно, а не строго одна за другой в хронологических блоках.
Чтобы проиллюстрировать разницу, если блокчейн выглядит как длинная цепочка блоков (каждый блок содержит множество транзакций), то реестр на основе DAG больше похож на дерево или сеть отдельных транзакций. Каждая новая транзакция в DAG может присоединяться к (и тем самым подтверждать) одну или несколько более ранних транзакций, вместо того чтобы ждать упаковки в следующий единственный блок. Это структурное различие приводит к нескольким ключевым отличиям:
- Параллельная валидация: В блокчейнах майнеры/валидаторы добавляют по одному блоку в цепочку за раз, поэтому транзакции подтверждаются партиями для каждого нового блока. В DAG несколько транзакций (или небольших «блоков» транзакций) могут быть добавлены одновременно, поскольку каждая из них может присоединяться к разным частям графа. Эта параллелизация означает, что сетям DAG не нужно ждать, пока одна длинная цепочка будет расти по одному блоку за раз.
- Отсутствие глобального последовательного порядка: Блокчейн по своей сути создает полный порядок транзакций (каждый блок имеет определенное место в одной последовательности). Реестр DAG, напротив, формир ует частичный порядок транзакций. Нет единого «последнего блока», в очередь к которому выстраиваются все транзакции; вместо этого множество «вершин» графа могут сосуществовать и расширяться одновременно. Затем требуются протоколы консенсуса, чтобы в конечном итоге упорядочить или согласовать порядок или действительность транзакций в DAG.
- Подтверждение транзакций: В блокчейне транзакции подтверждаются, когда они включаются в добытый/валидированный блок, и этот блок становится частью принятой цепочки (часто после добавления новых блоков поверх него). В системах DAG новая транзакция сама по себе помогает подтверждать предыдущие транзакции, ссылаясь на них. Например, в Tangle IOTA (DAG) каждая транзакция должна подтвердить две предыдущие транзакции, фактически заставляя пользователей совместно проверять транзакции друг друга. Это устраняет строгое разделение между «создателями транзакций» и «валидаторами», которое существует в майнинге блокчейна — каждый участник, выпускающий транзакцию, также выполняет небольшую работу по валидации.
Важно отметить, что блокчейн на самом деле является частным случаем DAG — DAG, который был ограничен одной цепочкой блоков. Оба являются формами технологии распределенного реестра (DLT) и разделяют такие цели, как неизменяемость и децентрализация. Однако реестры на основе DAG имеют «бесблочную» или мульти-родительскую структуру, что придает им различные свойства на практике. Традиционные блокчейны, такие как Bitcoin и Ethereum, используют последовательные блоки и часто отбрасывают любые конкурирующие блоки (форки), тогда как реестры DAG пытаются включать и упорядочивать все транзакции, не отбрасывая ни одной, если они не конфликтуют. Это фундаментальное различие закладывает основу для различий в производительности и дизайне, подробно описанных ниже.
Техническое сравнение: архитектура DAG против блокчейна
Чтобы лучше понять DAG и блокчейны, мы можем сравнить их архитектуры и процессы валидации:
- Структура данных: Блокчейны хранят данные в блоках, связанных в линейной последовательности (каждый блок содержит множество транзакций и указывает на один предыдущий блок, образуя одну длинную цепочку). Реестры DAG используют графовую структуру: каждый узел в графе представляет транзакцию или блок событий и может ссылаться на несколько предыдущих узлов. Этот направленный граф не имеет циклов, что означает, что если вы будете следовать по ссылкам «назад», вы никогда не сможете вернуться к транзакции, с которой начали. Отсутствие циклов позволяет выполнять топологическую сортировку транзакций (способ их упорядочивания таким образом, чтобы каждая ссылка следовала за ссылаемой транзакцией). Короче говоря, блокчейны = одномерная цепочка, DAG = многомерный граф.
- Пропускная способность и параллелизм: Из-за структурных различий блокчейны и DAG обрабатывают пропускную способность по-разному. Блокчейн, даже в оптимальных условиях, добавляет блоки один за другим (часто ожидая, пока каждый блок будет проверен и распространен по всей сети, прежде чем будет добавлен следующий). Это по своей сути ограничивает пропускную способность транзакций — например, Bitcoin в среднем обрабатывает 5–7 транзакций в секунду (TPS), а Ethereum ~15–30 TPS при классическом дизайне Proof-of-Work. Системы на основе DAG, напротив, позволяют многим новым транзакциям/блокам одновременно входить в реестр. Множественные ветви транзакций могут расти одновременно и позже объединяться, что значительно увеличивает потенциальную пропускную способность. Некоторые современные сети DAG заявляют о пропускной способности в тысячи TPS, приближаясь или превосходя традиционные платежные сети по пропускной способности.
- Процесс валидации транзакций: В блокчейн-сетях транзакции ожидают в мемпуле и валидируются, когда майнер или валидатор упаковывает их в новый блок, затем другие узлы проверяют этот блок на соответствие истории. В сетях DAG валидация часто более непрерывна и децентрализована: каждая новая транзакция выполняет действие валидации, ссылаясь на (одобряя) более ранние транзакции. Например, каждая транзакция в Tangle IOTA должна подтвердить две предыдущие транзакции, проверив их действительность и выполнив небольшое доказательство работы, тем самым «голосуя» за эти транзакции. В DAG-структуре block-lattice Nano транзакции каждого аккаунта образуют свою собственную цепочку и валидируются посредством голосования узлами-представителями (подробнее об этом позже). Конечный эффект заключается в том, что DAG распределяет работу по валидации: вместо того, чтобы один производитель блоков валидировал пакет транзакций, каждый участник или множество валидаторов одновременно валидируют разные транзакции.
- Механизм консенсуса: И блокчейнам, и DAG нужен способ для сети договориться о состоянии реестра (какие транзакции подтверждены и в каком порядке). В блокчейнах консенсус часто достигается за счет Proof of Work или Proof of Stake, производящих следующий блок, и правила «самая длинная (или самая тяжелая) цепочка выигрывает». В реестрах DAG консенсус может быть более сложным, поскольку нет единой цепочки. Различные проекты DAG используют разные подходы: некоторые используют протоколы сплетен и виртуа льное голосование (как в Hedera Hashgraph) для достижения согласия по порядку транзакций, другие используют выбор вершин по методу Монте-Карло с цепями Маркова (ранний подход IOTA) или другие схемы голосования для определения предпочтительных ветвей графа. Мы обсудим конкретные методы консенсуса в системах DAG в последующем разделе. В целом, достижение общесетевого согласия в DAG может быть быстрее с точки зрения пропускной способности, но требует тщательного проектирования для обработки конфликтов (таких как попытки двойной траты), поскольку несколько транзакций могут существовать параллельно до окончательного упорядочивания.
- Обработка форков: В блокчейне «форк» (два блока, добытые почти одновременно) приводит к тому, что одна ветвь в конечном итоге выигрывает (самая длинная цепочка), а другая становится сиротской (отбрасывается), что приводит к потере всей работы, выполненной над сиротским блоком. В DAG философия заключается в том, чтобы принимать форки как дополнительные ветви графа, а не отбрасывать их. DAG будет включать оба форка; затем алгоритм консенсуса определяет, ка кие транзакции в конечном итоге подтверждаются (или как разрешаются конфликтующие транзакции), не отбрасывая всю одну ветвь. Это означает, что мощность майнинга или усилия не тратятся впустую на устаревшие блоки, что способствует повышению эффективности. Например, Tree-Graph Conflux (DAG на PoW) пытается включить все блоки в реестр и упорядочивает их, а не делает их сиротскими, тем самым используя 100% произведенных блоков.
Таким образом, блокчейны предлагают более простую, строго упорядоченную структуру, где валидация происходит блок за блоком, тогда как DAG предоставляют более сложную графовую структуру, позволяющую асинхронную и параллельную обработку транзакций. Реестры на основе DAG должны использовать дополнительную логику консенсуса для управления этой сложностью, но они обещают значительно более высокую пропускную способность и эффективность за счет использования полной пропускной способности сети, а не принудительного создания очереди блоков.