Открыть сервис

RandomX

RandomX — это алгоритм хеширования proof-of-work (PoW), разработанный командой Monero Research Lab (MRL) и введённый в эксплуатацию 30 ноября 2019 года. Алгоритм предназначен для использования в криптовалютах, ориентированных на анонимность, в первую очередь в Monero (XMR). RandomX спроектирован таким образом, чтобы быть устойчивым к майнингу на специализированных интегральных схемах (ASIC) и графических процессорах (GPU), обеспечивая преимущество для центральных процессоров (CPU) общего назначения. Ключевая особенность алгоритма — выполнение случайно сгенерированного программного кода, что делает его вычислительно сложным для аппаратной реализации, отличной от CPU.

История

Разработка RandomX была инициирована в ответ на растущую угрозу централизации майнинга Monero из-за появления ASIC-майнеров. Предыдущий алгоритм Monero, CryptoNight, также был направлен на противодействие ASIC, но со временем были созданы эффективные ASIC-устройства для его вычисления. В 2018 году Monero провела серию хардфорков (изменений протокола), чтобы заблокировать эти ASIC, но каждый раз производители адаптировались.

В марте 2019 года команда Monero Research Lab (MRL) анонсировала новый алгоритм — RandomX. Он был разработан на основе идей, изложенных в техническом документе «RandomX: A Proof-of-Work Algorithm for CPU-Friendly Mining» (авторы — Тейган Дейли, Ховард Чу, Говард Ву и др.). Алгоритм прошёл открытое рецензирование и аудит безопасности. Внедрение RandomX в сеть Monero произошло в ходе хардфорка 30 ноября 2019 года на высоте блока 1978433. С тех пор RandomX используется в Monero и нескольких других криптовалютах, таких как Arqma (ARQ) и Haven Protocol (XHV).

Принцип работы

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

Инициализация (Initialization)

На этом этапе создаётся виртуальная машина (VM) RandomX, которая эмулирует архитектуру, подобную x86, но с упрощённым набором инструкций. VM содержит:

  • Регистры общего назначения (64 бита).
  • Флаг регистра.
  • Память для данных (Dataset) и кэш (Cache).

Dataset — это большой массив данных (около 2 ГБ для Monero), который генерируется из хеша блока с использованием алгоритма Argon2d. Cache — это меньший массив (около 256 МБ), который используется для быстрого доступа к данным. Процесс инициализации включает:

  1. Вычисление seed-хеша из заголовка блока.
  2. Генерация Cache с помощью Argon2d.
  3. Генерация Dataset из Cache с помощью функции расширения памяти.

Выполнение (Execution)

После инициализации VM запускает программу, состоящую из случайных инструкций. Программа генерируется на основе seed-хеша и состоит из 256 инструкций (для Monero). Инструкции включают:

  • Арифметические операции (сложение, вычитание, умножение, деление).
  • Логические операции (AND, OR, XOR).
  • Операции с памятью (чтение, запись).
  • Условные переходы.

Программа выполняется в цикле, и каждый шаг изменяет состояние VM. После выполнения программы вычисляется хеш результата с помощью алгоритма Blake2b. Этот хеш является решением proof-of-work для данного блока.

Устойчивость к ASIC

RandomX спроектирован так, чтобы быть неэффективным для ASIC по нескольким причинам:

  • Случайность кода: Программа для каждого блока генерируется случайным образом, что делает невозможным создание фиксированной аппаратной схемы.
  • Высокое потребление памяти: Dataset размером 2 ГБ требует значительного объёма памяти, что увеличивает стоимость ASIC-устройств.
  • Зависимость от задержек памяти: Алгоритм активно использует случайный доступ к памяти, что делает его чувствительным к задержкам, характерным для CPU, а не для ASIC.

Производительность

RandomX оптимизирован для CPU с архитектурой x86 и ARM. На момент внедрения алгоритм демонстрировал следующую производительность (в хешах в секунду, H/s) на различных процессорах:

ПроцессорАрхитектураПроизводительность (H/s)
Intel Core i9-9900Kx86~10 000
AMD Ryzen 9 3900Xx86~12 000
ARM Cortex-A72 (Raspberry Pi 4)ARM~200
Intel Xeon E5-2680 v4x86~6 000

Для GPU производительность значительно ниже: например, NVIDIA GTX 1080 Ti выдаёт около 500 H/s, что в 20 раз меньше, чем у CPU среднего сегмента. Это делает майнинг на CPU экономически выгодным, особенно при низких ценах на электроэнергию.

Критика и ограничения

Несмотря на успешное внедрение, RandomX подвергался критике за несколько аспектов:

  • Высокое энергопотребление: Алгоритм требует интенсивного использования CPU, что приводит к высокому энергопотреблению по сравнению с ASIC-майнингом. Это может быть экологически неэффективным.
  • Централизация майнинга: Хотя RandomX препятствует ASIC, он может способствовать централизации майнинга на крупных фермах CPU, которые используют дешёвую электроэнергию (например, в Китае или России). В 2020 году сообщалось, что около 50% хешрейта Monero приходится на Китай.
  • Уязвимости: В 2020 году были обнаружены уязвимости, связанные с возможностью оптимизации алгоритма для GPU с использованием OpenCL. Однако команда Monero выпустила патчи, и эти уязвимости были устранены.

Применение

RandomX используется в следующих криптовалютах:

  • Monero (XMR): Основная криптовалюта, для которой был разработан алгоритм. Monero — это криптовалюта, ориентированная на анонимность, использующая кольцевые подписи и скрытые адреса.
  • Arqma (ARQ): Криптовалюта, основанная на протоколе Monero, но с дополнительными функциями, такими как защита от квантовых вычислений.
  • Haven Protocol (XHV): Криптовалюта, ориентированная на конфиденциальные транзакции и стабильные монеты (stablecoins).

Интересные факты

  • RandomX был разработан с открытым исходным кодом, и его код доступен на GitHub под лицензией BSD 3-Clause.
  • Алгоритм использует виртуальную машину, которая эмулирует архитектуру x86, но с упрощённым набором инструкций. Это позволяет ему быть совместимым с большинством современных CPU.
  • В 2020 году RandomX был протестирован на суперкомпьютере, но из-за ограничений памяти и задержек производительность оказалась низкой.

Источники

  1. RandomX Technical Specification (Monero Research Lab, 2019).
  2. Monero Hard Fork v0.15 (RandomX) — официальный блог Monero, 2019.
  3. «RandomX: A Proof-of-Work Algorithm for CPU-Friendly Mining» — технический документ, 2019.
  4. Анализ производительности RandomX на различных процессорах — форум Monero, 2020.
  5. Отчёт о централизации майнинга Monero — Coin Metrics, 2020.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →