DAG-файл в алгоритме Ethash¶
DAG-файл (Directed Acyclic Graph, направленный ациклический граф) в алгоритме консенсуса Ethash — это большой набор данных (файл), генерируемый на основе заголовков блоков блокчейна Ethereum и используемый для вычисления значений хеш-функции при майнинге и проверке блоков. Файл представляет собой псевдослучайную структуру, размер которой линейно увеличивается с ростом номера эпохи (каждые 30 000 блоков), что усложняет создание специализированных интегральных схем (ASIC) и способствует децентрализации майнинга.
¶Назначение и роль в алгоритме
Ethash был разработан как ASIC-устойчивый алгоритм Proof-of-Work (PoW), требующий значительного объёма памяти для вычислений. Основная идея заключается в том, что для нахождения валидного nonce (случайного числа) майнеру необходимо многократно считывать данные из DAG-файла. Это делает вычисления «память-зависимыми» (memory-hard), что повышает стоимость создания специализированного оборудования и позволяет обычным видеокартам (GPU) конкурировать с ASIC.
DAG-файл используется в двух ключевых операциях:
- Вычисление хеша — при подборе nonce майнер формирует 64-байтовые элементы (mix) и многократно обращается к случайным участкам DAG-файла, выполняя операции XOR и сложения.
- Верификация — при проверке блоков узлы сети также загружают DAG-файл для подтверждения корректности хеша, однако для проверки достаточно однократного прохода, что делает процесс валидации менее ресурсоёмким.
¶Структура и генерация
DAG-файл генерируется на основе seed-хэша (seed hash), который вычисляется из заголовков блоков текущей эпохи. Процесс создания включает несколько этапов:
- Вычисление seed-хэша — для каждой эпохи (каждые 30 000 блоков) вычисляется 32-байтовое значение, являющееся хешем seed-хэша предыдущей эпохи. Для первой эпохи seed-хэш равен нулю.
- Создание кэша (cache) — на основе seed-хэша генерируется кэш размером 16 МБ, который служит промежуточным массивом для построения DAG-файла. Кэш обновляется каждую эпоху и хранится в памяти для быстрого доступа.
- Построение DAG-файла — из элементов кэша с использованием функции расширения (expand) формируется полный DAG-файл. Каждый элемент DAG-файла (страница) вычисляется путём хеширования данных из кэша с учётом номера страницы.
Размер DAG-файла определяется номером эпохи и рассчитывается по формуле: 2.5 ГБ + 7.5 МБ * (эпоха - 1). На момент запуска Ethereum (июль 2015 года) размер составлял около 1 ГБ, к концу использования PoW (сентябрь 2022 года) превысил 100 ГБ.
¶Использование в майнинге
При майнинге Ethash каждый кандидат на nonce обрабатывается следующим образом:
- Вычисляется 128-байтовый «снимок» (mix) на основе заголовка блока и nonce.
- Выполняется 64 итерации, на каждой из которых выбирается случайная страница DAG-файла (размером 64 байта) и объединяется с текущим состоянием mix с помощью операций XOR и сложения.
- После завершения итераций mix сжимается до 32-байтового результата, который сравнивается с целевым порогом сложности.
Такой подход требует произвольного доступа к данным большого объёма, поэтому скорость майнинга напрямую зависит от пропускной способности памяти видеокарты (bandwidth), а не от вычислительной мощности ядра.
¶Обновление и жизненный цикл
DAG-файл не является статичным: каждые 30 000 блоков (примерно каждые 5,2 дня) наступает новая эпоха, и файл пересоздаётся с увеличенным размером. Майнинговые клиенты (например, Geth, Ethminer) автоматически загружают или генерируют новый DAG-файл при смене эпохи. Процесс генерации может занимать от нескольких минут до часа в зависимости от скорости диска и объёма оперативной памяти.
Для ускорения работы майнеры часто хранят DAG-файл в оперативной памяти (RAM) или на быстрых NVMe-накопителях, поскольку задержки чтения с жёсткого диска существенно снижают производительность.
¶Переход на Proof-of-Stake
С переходом Ethereum на алгоритм консенсуса Proof-of-Stake (обновление «The Merge», 15 сентября 2022 года) использование Ethash и DAG-файлов для основной сети было прекращено. Алгоритм продолжает применяться в тестовых сетях и форках (например, Ethereum Classic), где DAG-файлы по-прежнему генерируются и используются для майнинга.
¶Критика и ограничения
Основным недостатком DAG-файла является его постоянно растущий размер, что создаёт нагрузку на дисковое пространство и память майнеров. Для добычи на поздних эпохах требовалось более 100 ГБ свободного места, что делало майнинг на маломощных устройствах (например, одноплатных компьютерах) невозможным. Кроме того, генерация DAG-файла при смене эпохи приводила к кратковременным простоям оборудования.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →


