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 МБ), который используется для быстрого доступа к данным. Процесс инициализации включает:
- Вычисление seed-хеша из заголовка блока.
- Генерация Cache с помощью Argon2d.
- Генерация 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-9900K | x86 | ~10 000 |
| AMD Ryzen 9 3900X | x86 | ~12 000 |
| ARM Cortex-A72 (Raspberry Pi 4) | ARM | ~200 |
| Intel Xeon E5-2680 v4 | x86 | ~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 был протестирован на суперкомпьютере, но из-за ограничений памяти и задержек производительность оказалась низкой.
Источники
- RandomX Technical Specification (Monero Research Lab, 2019).
- Monero Hard Fork v0.15 (RandomX) — официальный блог Monero, 2019.
- «RandomX: A Proof-of-Work Algorithm for CPU-Friendly Mining» — технический документ, 2019.
- Анализ производительности RandomX на различных процессорах — форум Monero, 2020.
- Отчёт о централизации майнинга Monero — Coin Metrics, 2020.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →