Наверное, вы много раз слышали о каких-то таниственных ASIC-майнерах и догадываетесь, что это как-то связано с высокоэффективным майнингом.
Сегодня будем разбираться, что это такое, почему это так и как это устроено.
Напомню, что майнинг — это тупо перебор всех возможных значений одного бессмысленного числа (nonce), а в результате такого перебора майнер однажды случайно находит значение, при котором выполняется специально придуманное неравенство. В этом неравенстве сравнивается результат вычисления хэша блока-кандидата и один числовой параметр. Этот параметр подбирается сетью так, чтобы менять сложность этого подбора в зависимости от того, какова суммарная вычислительная мощность майнеров. Нужно это, чтобы «дать всем равные шансы на нахождение подходящего nonce». Т.е. если вдруг пришел майнер с огромными вычислительными мощностями — то параметр подстроится так, что найти нужное значение nonce станет сложнее всем — и этому майнеру, и всем остальным. Но чем больше вычислительные возможности конкретного майнера, тем больше вероятность, что подходящий nonce он найдет быстрее конкурентов. Поэтому майнеры заинтересованы в том, чтобы эти вычислительные мощности наращивать.
Какие тут есть возможности?
Казалось бы — просто покупай себе компьютер с максимальной производительностью процессора и вычисляй что хочешь. Так-то логично, но это неэффективный путь. К обычному процессору полагается огромное количество дополнительных устройств: материнская плата, на которой всякие контролеры — PCI, USB, SATA (и множество других), видеокарта, дисковая подсистема и т.д. и т.п. Все они в вычислении не участвуют, но потребляют электроэнергию, выделяют тепло и стоят денег. Поэтому покупать множество компьютеров не интересно, сильно переплачиваешь и за само оборудование, и за электроэнергию, и за площадь, на которой всё это располагается (все-таки вдруг у нас майнинговая ферма). Ну и все это выделяет много тепла — надо тратиться на охлаждение, а это не то чтобы бесплатная вещь… Не зря есть множество майнинговых ферм, строящихся в северных районах — где отлично работает естественное охлаждение.
Хорошо, давайте размышлять дальше. На самом деле, при майнинге не нужно хранить огромные объемы данных, а значит, высоких требований к дисковой подсистеме нет. Да, конечно, размер локальной копии блокчейна для биткойна порядка 200 GB, но подавляющее большинство этих данных при майнинге лежит мертвым грузом, основная работа все-таки связана с перебором цифр и вычислением хэша от блока с этими подставленными цифрами. Так что файловая подсистема — точно не критическое место. Точно так же не критическое место — все интерфейсы с внешним миром, т.е. PCI, USB и т.д. Они, конечно, нужны, но опять там нагрузка не то чтобы средняя, а даже минимальная.
Смотрите.
Мы сформировали блок-кандидат (составили его из ряда служебных полей, транзакции «зачислить мне из ниоткуда 12,5 биткойнов» и нескольких транзакций пользователей). Для этого мы получили данные по сети, нашли те записи в локальной копии блокчейна, на которые ссылаются пользовательские транзакции, сделали несколько сравнительно несложных вычислений, и в итоге у нас получился блок-кандидат. Теперь нам становится ненужна сеть (единственное — надо смотреть, чтобы не пришло сообщение, что кто-то уже создал блок, и тогда работу надо прекращать над этим блоком). Также нам становится неважна дисковая подсистема (все данные уже собраны, кандидат блока находится в оперативной памяти). Теперь нам нужно производить самую главную (хотя и абсолютно бестолковую) работу. В этот кандидат блока перебором подставляем значение nonce и вычисляем хэш всего этого блока. Не выполнилось неравенство? Увеличиваем nonce на единицу и снова вычисляем. И так до тех пор, пока не наткнемся на значение nonce, при котором неравенство выполняется, или пока не станет известно, что кто-то уже собрал блок, и потому надо подготавливать новый блок-кандидат, потому что этот уже неактуален.
Так вот, для перебора, получается, надо только процессорную мощность и немного оперативной памяти. Все эти интерфейсы связи с внешним миром, дисковая подсистема, видеоподсистема — всё это основную работу не выполняет, а значит — напрасно жрёт электричество и деньги.
Логично, что майнерам захотелось увеличивать количество процессоров, а не компьютеров. Поэтому разумно было бы искать многопроцессорные платы и майнить на них. Но такие платы — редкие звери, стоят дорого, и они не рассчитаны на большое количество процессоров. К тому же, есть еще вот какой момент.
В самом процессоре тоже огромное количество «ненужного» для нашей задачи. Процессор — сложное устройство, он не зря называется «центральный». Он умеет делать абсолютно все. Но универсальный инструмент в каждой отдельной задаче менее эффективен, чем узкоспециализированный. Для вычисления хэша надо перемешивать биты, выполнять довольно простые операции сложения, умножения, а также не очень понятные обычному человеку, но все равно весьма простые по сути бинарные операции сдвига, конъюнкции, дизъюинкции, сложению «по модулю два» и т.д. А хорший центральный процессор умеет еще множество других, не нужных нам вещей. Разные там блочные вычисления, работа с большими объемами данных, предсказание следующих операций и т.д. Это очень характерно для работы с мультимедийными данными, и именно эти возможности делают современный процессор таким дорогим. А нам-то это не нужно! Если мы только майним, то мы здорово переплачиваем за все эти мультимедийные плюшки, покупая процессор.
Видеокарты
В общем, в какой-то момент кто-то догадался, что можно работу эту выполнять не только на центральном процессоре, а еще и на видеопроцессоре видеокарты. Видеопроцессоры не такие универсальные, как центральные процессоры, но зато они умеют хорошо решать очень характерную задачу — последовательную обработку огромных массивов данных. Потому что графические задачи именно таковы: есть огромное количество точек, координат, текстур и т.д., и надо последовательно и с большой скоростью все их обработать по довольно логически простым алгоритмам. В сумме это огромная вычислительная работа, но видеопроцессор уже специально ориентирован именно на такие блочные задачи. Задача вычисления большого количества хэшей уже больше похожа на последовательную массированную обработку графических данных, чем на привычный центральному процессору поток команд операционной системы и прикладных программ. А главное, у видеокарт есть пара дополнительных веских преимуществ: во-первых, их в обычную материнскую плату можно вставить несколько, а во-вторых, можно загрузить их только нужной нам работой, не заствляя их отвлекаться на работу с сетью, внешними интерйфейсами и т.п. А центральный процессор возьмет на себя всю сервисную работу — принять данные из сети, построить блок-кандидат, распределить работу между видеокартами, мониторить результаты выполнения и т.д. Да, кстати, видеокарта ничего на мониторе не отображает. Условно говоря, блок вывода картинки на монитор не используется и висит мертвым грузом.
Это был прорыв, и если посмотреть на график производительности сети биткойна, то на нем отчетливо виден существенный рост в момент, когда появился майнинг на видеокартах.
Но и это не предел мечтаний.
ASIC
Современная электронная промышленность позволяет изготавливать микросхемы по вашему проекту. Т.е. нанимаете инженера-микроэлектронщика (или команду из них), они чего-то там на компьютере рисуют и моделируют, а на выходе получают чертеж нужной микросхемы. Трафареты там для травления кристаллов и т.д. Вы этот чертеж отдаете производителю микросхем, и он за ваши деньги изготавливает серию микросхем по этим чертежам. Вкусность в том, что вы можете так разработать микросхему, которая будет максимально эффективно решать очень конкретную задачу. Их так и называют — специфичная-для-задачи-микросхема, или по-буржуйски, Application-Specific-Integrated-Circuit (ASIC). В мире электроники такие микросхемы используются весьма широко, просто до появления майнинга широкая публика, не связання с электроникой, ничего об этом не слышала.
Так вот, некоторые богатые майнеры именно так и поступили. Разработали чип и заказали его выпуск на контрактном производстве. И помимо дохода от майнинга стали зарабатывать еще и на продаже этих чипов и устройств на их основе.
В чем же преимущества и недостатки этих чипов?
Если предельно грубо, то ASIC для майнинга представляет собой очень маленький кусочек центрального процессора. Умеет он очень мало. Тупо вычислять хэш. Причем его схема тщательно оптимизирована для решения этой задачи. Никакие другие (кроме пары дополнительных) задачи он решать не умеет. Для народного хозяйства абсолютно бестолковая железка. Ну, это примерно как взять автомобиль, выкинуть в помойку кузов, коробку передач, ходовую систему, электропроводку, салон, сложную систему инжекции, которая подбирает режим работы под самые разные нагрузки и т.д. А оставить только коленвал, поршни на нем, предельно упрощеную систему питания и зажигания, и оставить вентилятор на валу. Но зато цилиндров сделать не четыре, а пару сотен. Вентилятор это устройство крутит, как надо, но ездить на такой штуке абсолютно невозможно. Равно как невозможно использовать ее еще для чего-то, кроме кручения вентилятора. Железа уйдет примерно столько же, как на целый автомобиль, но зато блин автомобиль по умению крутить вентилятор с фиксированной скоростью и рядом не стоит с этим монстром.
Понятно, что эффективность потребления электроэнергии на вычисление одного хэша многократно выше такого же показателя у компьютера (и даже у видеокарты). Стоимость… Тут не все так просто. Изготовление чипов выгодно только при огромных партиях, но тут этот вопрос как раз вроде решен. В общем, по цене получается нормально, особенно если считать в стоимости одного хэша (ну хорошо, не одного хэша, а миллиона хэшей или миллиарда хэшей — мегахэша и гигахэша соответственно). Короче, выгодно.
Ну а потом мы делаем плату, куда вставляем эти чипы. Эта плата умеет с ними взаимодействовать, передавать им задачу и принимать результаты. На плате несколько таких чипов (кстати, такая плата изображена на картинке к этой статье). А несколько плат объединяем в одно устройство — получаем ASIC-майнер. В нем еще стоит какой-нибудь мелкий компьютер типа Raspberry PI для организации связи между этими платами и внешним миром (тут вполне достаточно такой небольшой мощности). А нормальная ферма состоит из десятков (сотен, тысяч) таких ASIC-майнеров. И хотя устройства эти дорогие, при нынешнем курсе биткойна их выгодно разрабатывать, покупать и эксплуатировать. Как только курс рухнет ниже рентабельности этих ASIC-майнеров — их перестанут производить и использовать.
Эффективность вычисления хэшей у такой схемы уже не в разы, а на порядки выше, чем у обычного процессора.
На всякий случай, напомню, «один порядок» — это в десять раз. «На три порядка выше» — это «в тысячу раз больше».
Но это уже как-то нечестно. Потому что мы создаем огромных монстров, которые умеют только жрать, а на выходе дают небольшую циферку, которая сама по себе для народного хозйяства ничего не значит, пока не попадет на крипто-рынок. А главное, для того, чтобы что-то майнить, обычного компьютера уже будет недостаточно. Надо специальное оборудование (купить asic-майнер), который уже стоит хороших денег (сотни тысяч рублей). Это добавляет неравенства участникам сети. А в криптосообществе есть подразумеваемая, но не всегда явно высказываемая идея о том, что крипта противопоставляется диктату мирового капитала, и вроде бы дает равные возможности участникам. Ну да это вопрос дискуссионный, тем паче, что здесь он преломлен через мое сознание, а я — яркий идеалист. Поэтому не буду настаивать на этой мысли.
Противодействие ASIC-майнингу
В любом случае, такая ASIC — тенденция, да и вообще идея создавать специальные устройства для майнинга, пришлась не по вкусу очень многим. Поэтому криптосообщество кинулось разрабатывать алгоритмы, которые было бы невыгодно реализовывать с помощью специальных устройств.
Ну как разрабатывать… Просто взяли готовые стандартные криптографические функции (надо сказать, что одних только хэш-функций в прикладной криптографии известно великое множество) и стали их комбинировать. Ну типа берем блок-кандидат, высчисляем от него хэш по вот этому алгоритму, потом результат пропускаем через хэш-функцию по другому алгоритму, потом добавляем вычисление от чего-то еще, смешиваем по пятнадцатому алгоритму, пропускаем через сорок третий алгоритм и т.д. Это один из способов. Есть и другие способы «противодействовать» ASIC-майнингу, но мы не будем на этом останавливаться.
Зачем это нужно?
Вот зачем. Та вычислительная работа, которая при этом производится, уже очень плохо упрощается. И двухсотцилиндровый монстр с вентилятором с ней не справится. Придется ему добавлять контроллер впрыска, подвеску, коробку передач, кузов и т.д. Т.е. разработка специализированного устройства уже будет сложна так же, как сложна разработка обычного центрального процессора (или близко к этому). А центральные процессоры, на минуточку, разрабатывают огромные корпорации с многочисленными командами разработчиков с суммарным IQ отсюда и до альфы Центавра. Дорого и долго с ними конкурировать. И ладно бы только ASIC разрабатывать… Но ряд алгоритмов в некоторых криптовалютах намерено выбраны так, что для вычисления нужны большие объемы памяти. А современная подсистема памяти в персональном компьютере — довольно замороченная вещь, и по сложности не только разработки, но и даже использования сторонними устройствами довольно затратна. Я к тому, что если вы решите разработать ASIC, который бы умел работать со стандартными модулями памяти DDR4 (или любыми другими, не сишком старыми), то на реализацию взаимодействия с ними уйдет много усилий, времени и денег. Разрабатывать же свой вариант DDR4… Ну вы поняли.
Короче, дешевле и выгоднее просто собрать мощный компьютер, чем разрабатывать специальные микросхемы, которые бы вычисляли эти алгоритмы дешевле и хоть капельку эффективнее.
В общем, есть огромное количество интересных криптовалют, где методы вычисления проверочного числа (это уже не хэш в чистом виде) разработанны именно так, чтобы майнинг с помощью специализированных устройств был нерентабелен. Но пока биткойн с огромными ASIC-фермами все равно лидирует по капитализации. У биткойна вообще много некрасивых инженерных решений, но капитализация зависит не от инженерной изящности. Да и вообще, в мире рулит не осознанность, а алчность, но это к технологиям денег отношения не имеет.