Объекты малого бизнеса в России

Что такое ASIC — майнинг

Наверное, вы много раз слышали о каких-то таниственных ASIC-майнерах и догадываетесь, что это как-то связано с высокоэффективным майнингом.

Сегодня будем разбираться, что это такое, почему это так и как это устроено.

Напомню, что майнинг — это тупо перебор всех возможных значений одного бессмысленного числа (nonce), а в результате такого перебора майнер однажды случайно находит значение, при котором выполняется специально придуманное неравенство. В этом неравенстве сравнивается результат вычисления хэша блока-кандидата и один числовой параметр. Этот параметр подбирается сетью так, чтобы менять сложность этого подбора в зависимости от того, какова суммарная вычислительная мощность майнеров. Нужно это, чтобы «дать всем равные шансы на нахождение подходящего nonce«. Т.е. если вдруг пришел майнер с огромными вычислительными мощностями — то параметр подстроится так, что найти нужное значение nonce станет сложнее всем — и этому майнеру, и всем остальным. Но чем больше вычислительные возможности конкретного майнера, тем больше вероятность, что подходящий nonce он найдет быстрее конкурентов. Поэтому майнеры заинтересованы в том, чтобы эти вычислительные мощности наращивать.

Какие тут есть возможности?

Казалось бы — просто покупай себе компьютер с максимальной производительностью процессора и вычисляй что хочешь. Так-то логично, но это неэффективный путь. К обычному процессору полагается огромное количество дополнительных устройств: материнская плата, купить асик майнер на которой всякие контролеры — PCI, USB, SATA (и множество других), видеокарта, дисковая подсистема и т.д. и т.п. Все они в вычислении не участвуют, но потребляют электроэнергию, выделяют тепло и стоят денег. Поэтому покупать множество компьютеров не интересно, сильно переплачиваешь и за само оборудование, и за электроэнергию, и за площадь, на которой всё это располагается (все-таки вдруг у нас майнинговая ферма). Ну и все это выделяет много тепла — надо тратиться на охлаждение, а это не то чтобы бесплатная вещь… Не зря есть множество майнинговых ферм, строящихся в северных районах — где отлично работает естественное охлаждение.

Хорошо, давайте размышлять дальше. На самом деле, при майнинге не нужно хранить огромные объемы данных, а значит, высоких требований к дисковой подсистеме нет. Да, конечно, размер локальной копии блокчейна для биткойна порядка 200 GB, но подавляющее большинство этих данных при майнинге лежит мертвым грузом, основная работа все-таки связана с перебором цифр и вычислением хэша от блока с этими подставленными цифрами. Так что файловая подсистема — точно не критическое место. Точно так же не критическое место — все интерфейсы с внешним миром, т.е. PCI, USB и т.д. Они, конечно, нужны, но опять там нагрузка не то чтобы средняя, а даже минимальная.

Смотрите.

Мы сформировали блок-кандидат (составили его из ряда служебных полей, транзакции «зачислить мне из ниоткуда 12,5 биткойнов» и нескольких транзакций пользователей). Для этого мы получили данные по сети, нашли те записи в локальной копии блокчейна, на которые ссылаются пользовательские транзакции, сделали несколько сравнительно несложных вычислений, и в итоге у нас получился блок-кандидат. Теперь нам становится ненужна сеть (единственное — надо смотреть, чтобы не пришло сообщение, что кто-то уже создал блок, и тогда работу надо прекращать над этим блоком). Также нам становится неважна дисковая подсистема (все данные уже собраны, кандидат блока находится в оперативной памяти). Теперь нам нужно производить самую главную (хотя и абсолютно бестолковую) работу. В этот кандидат блока перебором подставляем значение nonce и вычисляем хэш всего этого блока. Не выполнилось неравенство? Увеличиваем nonce на единицу и снова вычисляем. И так до тех пор, пока не наткнемся на значение nonce, при котором неравенство выполняется, или пока не станет известно, что кто-то уже собрал блок, и потому надо подготавливать новый блок-кандидат, потому что этот уже неактуален.

Так вот, для перебора, получается, надо только процессорную мощность и немного оперативной памяти. Все эти интерфейсы связи с внешним миром, дисковая подсистема, видеоподсистема — всё это основную работу не выполняет, а значит — напрасно жрёт электричество и деньги.

Логично, что майнерам захотелось увеличивать количество процессоров, а не компьютеров. Поэтому разумно было бы искать многопроцессорные платы и майнить на них. Но такие платы — редкие звери, стоят дорого, и они не рассчитаны на большое количество процессоров. К тому же, есть еще вот какой момент.

В самом процессоре тоже огромное количество «ненужного» для нашей задачи. Процессор — сложное устройство, он не зря называется «центральный». Он умеет делать абсолютно все. Но универсальный инструмент в каждой отдельной задаче менее эффективен, чем узкоспециализированный. Для вычисления хэша надо перемешивать биты, выполнять довольно простые операции сложения, умножения, а также не очень понятные обычному человеку, но все равно весьма простые по сути бинарные операции сдвига, конъюнкции, дизъюинкции, сложению «по модулю два» и т.д. А хорший центральный процессор умеет еще множество других, не нужных нам вещей. Разные там блочные вычисления, работа с большими объемами данных, предсказание следующих операций и т.д. Это очень характерно для работы с мультимедийными данными, и именно эти возможности делают современный процессор таким дорогим. А нам-то это не нужно! Если мы только майним, то мы здорово переплачиваем за все эти мультимедийные плюшки, покупая процессор.