Как я blakecoin майнер делал
Не знаю кому как, а меня прошедший 2017 год шокировал стремительным взлетом биткоина. Сейчас, конечно, ажиотаж уже ушел, а в 17-м году про криптовалюты говорили и писали все кому не лень.
Я видел, что люди пытаются зарабатывать на криптовалютах. Кто как умеет. Кто-то на все сбережения скупал видеокарты и начинал самостоятельно майнить в гараже. Кто-то вкладывался в облачный майнинг. Кто-то пытается организовать свой пул. Кто-то запустил в производство шоколадные биткоины, а кто-то выпускает минеральную воду:
Я тоже стал изучать, что же такое эти самые биткоины. Когда-то я даже начал свое собственное иследование алгоритма SHA256 и написал статью здесь на хабре «Можно ли вычислять биткоины быстрее, проще или легче?». Мои исследования алгоритмов хеширования до сих пор продолжаются и еще и близко не завершены… Может быть когда нибудь напишу про это отдельную статью. А сейчас пока вот это..
Я попробовал запустить bitcoin майнер в FPGA. Я понимал, что время уже ушло, но хотелось все же прикоснуться к технологии. Уже в конце прошлого года я вдруг почему-то вспомнил, что у меня совершенно без дела лежит плата Terasic DE10-Standard с ПЛИС Intel Cyclone V 5CSXFC6D6F31C6 — это тот чип, который со встроенным процессором ARM. Я подумал, что было бы интересно запустить какой нибудь альткоин майнер в этой плате. А что? Инвестировать в оборудование мне уже не надо, оно и так есть. Главное, чтобы плата зарабатывала больше, чем потребляет энергии.
Поиск подходящего альткоина был весьма прост. Я искал готовые проекты для FPGA, которые я смогу адаптировать под свою плату. Таковых оказалось не очень много. На самом деле как я понимаю во всем мире есть всего несколько человек, которые делали FPGA проекты и главное публиковали их в открытом доступе, например, на github.
Таким образом, я взял проект github.com/kramble/FPGA-Blakecoin-Miner и адаптировал его под имеющуюся у меня плату Марсоход3, а так же адаптировал этот проект для DE10-Standard.
Собственно о том, как я адаптировал проект для платы Марсоход3 написано здесь. Для Cyclone V в принципе все то же самое — только ревизия проекта квартуса blake_cv, мои исходники вот.
К моему сожалению в имеющийся у меня Cyclone V помещается только три хэш функции blake.
Чуть-чуть не хватает емкости ПЛИС до четырех хэшеров. Я запускаю проект на частоте 120МГц и за один такт рабочей частоты вычисляется один хэш blake. Значит производительность моего проекта 120*3=360MH/sec. Не очень много честно говоря, однако, как я уже сказал, плата у меня уже была, и возвращаеть ее стоимость мне не нужно… Тут еще Quartus говорит, что Fmax=150MHz. Можно попытаться поднять частоту, но боюсь придется ставить кулер, будет гудеть — ну не на столько мне нужны эти крипты, чтоб еще гул в комнате слушать.
Общая задумка проекта такая: плата имеет микросхему у которой есть и ПЛИС и Dual-ARM:
Когда плата стартует, то из U-BOOT первым делом загружается ПЛИС, затем стартует Linux и в нем программа майнинга cgminer. Я сперва думал, что я смогу устроить виртуальный канал связи между ARM и FPGA, и это на самом деле возможно, но так не получилось. Дело в том, что программа майнера cgminer работает с аппаратными майнерами через USB и использует библиотеку libusb. То есть мне проще подключить ПЛИС к Linux системе через преобразователь USB-COM на FTDI, чем городить городушку соединяя ПЛИС на шину ARMа. Я таким уже как-то занимался и это было не очень просто.
Сейчас мой «майнер» выглядит вот так (на Cyclone V поставил радиатор на термопасте, а то сильно греется):
Сказать по правде основные проблемы у меня как раз возникли не с FPGA проектом, а с cgminer.
1) Какой cgminer брать за основу своей разработки? И связанный с этим вопрос «Куда подключаться, чтобы начать майнить?». А какая связь между этими вопросами? Казалось бы, где тут проблема — бери самый свежий cgminer, какой найдешь. Но позвольте: на github есть 98 форков программы cgminer. Все они чем-то отличаются, какой есть хороший, а какой плохой, какой есть вообще хотя бы рабочий? Вот вам и опенсоурс. Каждый автор чего-то там себе добавлял и исправлял, или ломал… или делал свою монету. Разобраться не просто. Нашел для себя сайт, где на одной странице есть ссылка и на github проект и на github проект для FPGA. То есть эти два проекта видимо как-то могут и должны пересекаться.
2) Поскольку я взял за основу FPGA проект от автора kramble, то на самом деле, конечно, логично было бы взять его патчи, которые он приложил к своему проекту. Но и тут не без проблем. У него есть патчи к программе cgminer-3.1.1 и cgminer-3.4.3. Я решил, что лучше брать ту, что новее 3.4.3, но только потерял с ней время. Похоже автор начал адаптировать для этой версии, но что-то там не довел до конца и эта версия совсем сырая. Пришлось брать 3.1.1 а это кажется вообще старючая версия.
3) Авторы изменяющие программу cgminer в своих форках для своих альткоинов не следят за правильностью комментариев и именованием функций в коде. Зачастую в коде тут и там встречается слово bitcoin, а сам этот форк cgminer-а уже кажется не может считать для биткоина, а может только в альткоин.
4) Тесты. ГДЕ ТЕСТЫ? Я чего-то не понимаю, как можно делать сложный продукт без тестов? Я их не нашел.
Сказать по правде даже начинать что-то делать было не просто. Представьте себе, что нужно запустить некоторый проект в FPGA, но не очень понятно, что он должен делать, как получать данные, какие данные и в каком виде нужно выдавать результат. К этому FPGA проекту должна прилагаться некоторая программа, которую не известно точно где взять, но она должна обнаружить плату майнера, что-то туда посылать (неизвестно что) и что-то из нее получать. В каком формате, какими блоками, как часто — ничего не известно.
На самом деле, изучая патчи cgminer от kramble я примерно представляю себе как оно должно работать.
В файле usbutils.c прописаны устройства, которые могут рассматриваться как аппаратные внешние майнеры на шине USB:
Я в эту структуру добавил описатель своего USB-to-COM преобразователя FTDI-2232H. Теперь, если cgminer обнаружит устройство с VendorId/DeviceId = 0x0403:0x6010, то он попробует работать с этим устройством, как с платой Icarus, хоть она таковой и не является.
Дальше смотрим файл driver-icarus.c и тут есть функция icarus_detect_one:
Смысл такой. Программа передает плате заведомо известное задание на поиск хэша, причем в задании сказано с какого нонсе начинать вычисление и это нонсе немного меньше настоящего GOLDEN nonce. Таким образом, плата начнет считать с указанного места и буквально сразу в считанные доли секунды наткнется на GOLDEN nonce и вернет его. Программа тут же получит этот результат, сравнит его с правильным ответом и сразу становится понятно — это действительно тот HW майнер с которым можно работать или нет.
И вот тут была ужасная проблема — в проекте есть патчи на языке C, есть тестовая программа на питоне и тестбенч для FPGA.
В патчах на C тестовые данные выглядят вот так:
1) патч для cgminer-3.1.1
1) патч для cgminer-3.4.3
И что тут правильно, а что нет? Исходные данные одинаковые, а golden nonce объявлен разным. Парадокс… (заранее скажу, что в патче для cgminer-3.4.3 ошибка — нонсе 0x000187a2 не верный, а сколько времени я на это потратил..)
В проекте есть тестовая программа на питоне, которая читает текстовый файл, извлекает из него данные и передает в плату через последовательный порт… Там тестовые данные вот такие:
0000007057711b0d70d8682bd9eace78d4d1b42f82da7d934fac0db4001124d600000000cfb48fb35e8c6798b32e0f08f1dc3b6819faf768e1b23cc4226b944113334cc45255cc1f1c085340967d6c0e000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000
0000007057711b0d70d8682bd9eace78d4d1b42f82da7d934fac0db4001124d6000000008fa40da64f312f0fa4ad43e2075558faf4e6d910020709bb1f79d0fe94e0416f5255cc521c085340df6b6e01000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000
0000007095696e4529ae6568e4b2a0057a18e82ccf8d370bf87e358900f8ab5000000000253c6078c7245036a36c8e25fb2c1f99c938aeb8fac0be157c3b2fe34da2fa0952587a471c00fa391d2e5b02000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000
000000704445e0446fcf2a84c47ce7305722c76507ba74796eaf39fe0007d44d00000000cac961f63513134a82713b172f45c9b5e5eea25d63e27851fac443081f453de1525886fe1c01741184a5c70e000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000
00000070a3ac7627ca52f2b9d9a5607ac8212674e50eb8c6fb1219c80061ccd500000000ed5222b4f77e0d1b434e1e1c70608bc5d8cd9d363a59cbeb890f6cd433a6bd8d5258a0141c00b4e770777200000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000
000000706c90b789e84044d5be8b2fac01fafe3933ca3735269671e90043f8d900000000d74578c643ab8e267ab58bf117d61bb71a04960a10af9a649c0060cdb0caaca35258b3f81c00b4e7b1b94201000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000
00000070171d2644781cccf873ce3b6e54967afda244c47fc963bb240141b4ad00000000d56c4fbdc326e8f672834c8dbca53a087147fe0996d0c3a908a860e3db0589665258da3d1c016a2a14603a0a000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000
00000070d03c78cb0bb0b41a5a2c6ce75402e5be8a705a823928a5640011110400000000028fb80785a6310685f66a4e81e8f38800ea389df7f16cf2ffad16bb98e0c4855258dda01c016a2ae026d404000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000
0000007091a7eef446c4cb686aff8908ab5539d03a9ab2e975b9fe5700ed4ca9000000000f83bb385440decc66c10c0657fcd05f94c0bc844ebc744bba25b5bc2a7a557b5258e27c1c016a2a6ce1900a000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000
00000070856bd0a3fda5dac9ede45137e0c5648d82e64fbe72477f5300e96aec0000000026ca273dbbd919bdd13ba1fcac2106e1f63b70f1f5f5f068dd1da94491ed0aa45258e51b1c017a7644697709000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000
Ну то есть совершенно другие! Потом я уже понял, что это не те даннае, что посылаются в плату, из этих только извлекаются данные, специальным образом конвертируются в задание и отсылаются в плату.
Но все равно, среди этих тестовых данных для программы на питоне НЕТ задания похожего на то, которое описано в программе на C.
Ну хорошо, тогда смотрю тестовую программу-тестбенч на verilog:
Здесь есть предполагаемый пакет данных, который плата должна принять. Но опять этот предполагаемый пакет данных никак не похож на пакет данных в программе на C или на данные для тестовой программы на питоне.
Вот это отсутствие общих тестовых данных для программы на питоне, C и Verilog очень сильно портит картину. Получается, что между компонентами как бы нет общих точек соприкосновения, общих тестов и это печально.
Вообще, в верилог проекте blakecoin майнера было скрыто еще одно форменное издевательство над моим организмом.
Если проводить симуляцию проекта с verilog тестбенчем, то в симуляторе с вот этими тестовыми данными 416’h000007ffffbd9207ffff001e11f35052d5544… замечательно находится и возвращается результат GOLDEN nonce.
Потом проект компилирую для реальной FPGA платы, эти же самые данные подаю из программы на питоне и… плата не находит GOLDEN nonce…
Оказывается, что тестовые данные в verilog тестбенче «немного плохие». Они для низкой сложности, когда в результирующем хэше всего 24 ведущих нуля, а не 32, как требуется.
В файле experimental/LX150-FourPiped/BLAKE_CORE_FOURPIPED.v есть вот такой код
В Verilog симуляторе проверяется не так, как будет будет работать в железе! То есть для реальной FPGA платы будем проверять на 32 бита ведущих нулей, а в симуляции будем проверять только 24 бита. Это просто прелестно. Хочется побить автора.
Я конечно, все это победил. По крайней мере, тестовая программа на питоне выдает бодрые сообщения:
Ладно, что в результате? Сколько намайнил? К сожалению нисколько.
Как только я был уже готов начать майнить, буквально в конце января сложность блейка сильно возросла:
Теперь я мог оставить на сутки плату и она хоть и находила решения, но их не принимал пул — все еще мало ведущих нулей.
Я пробовал переключиться на другую валюту — VCASH. С этой валютой пул хотя бы иногда выдавал мне бодрящие сообщения вроде вот этого:
Но все равно и VCASH пул ничего не начисляет. Печаль-беда.
Пользуясь случаем хотел бы спросить у знающих людей. Вот у меня есть видеокарта Nvidia 1060. Она выдает 1,25GHash/sec на блейкоине и за час два-три раза выдает nonce, который принимает пул (и начисляет копеечку). Я думал, что если моя FPGA плата считает 360MHash/sec, ну то есть примерно в 3 раза хуже, чем видеокарта, то я за два часа получу хотя бы один нонсе принятый пулом. Однако, этого не происходит. Даже за сутки нет ни одной копеечки… Где тут подвох для меня так и осталось загадка…
Сейчас я на досуге пытаюсь понять можно ли как-то оптимизировать имеющийся FPGA проект, скажем задействовать встроенную память или еще что-то. Может быть, если повезет, что-то и придумаю.
Добыча криптовалюты по шагам
Майнинг – единственный способ добычи криптовалют, суть которого заключается в вычислении криптографической подписи блока по специальному алгоритму. За расшифровку каждого блока начисляется вознаграждение (сумма определяется видом добываемых монет). Однако, чтобы заняться майнингом, потребуется немало сил и капиталовложений. Инструкция из 5 простых шагов поможет разобраться в том, как добыть криптовалюту в домашних условиях.
Шаг №1. Собрать оборудование («железо»)
В первую очередь необходимо подготовить «базу» – компьютер высокой мощности, который выступит в качестве «фермы». Рекомендуемая оперативная память – не менее 4 Гб. В виде оптимальной операционной системы майнеры предпочитают 64-разрядую версию Windows (10 Pro 64-bit). Существуют также ОС, разработанные исключительно для добычи определенных криптомонет. К примеру, для Ethereum предусмотрена ethOS.
Основой успешного майнинга станут графические процессоры GPU, встроенные в компьютерные видеокарты (ни в коем случае не бюджетные). Такие обычно используются при обработке 3D-графики для видеоигр. Также могут применяться вентильные матрицы (FPGA), программируемые пользователем или профессиональные интегральные микросхемы специального назначения ASIC (Application-specific Integrated Circuit). Последние найти непросто, поэтому лучше собрать ферму из видеокарт. Стойку можно приобрести готовую,
или соорудить самостоятельно:
Успешность майнинга криптовалют будет прямопропорциональна вычислительным мощностям оборудования. Именно от них зависит скорость расчета очередного блока blockchain и вероятность получения вознаграждения. Это значит, что системную плату нужно выбирать с максимальным количеством слотов для установки нескольких видеокарт.
Подходящие модели для добычи криптовалют:
Главная характеристика, на которую надо обратить внимание при выборе карты – скорость хеширования.
Отдельно следует выделить USB-майнеры для добычи биткоинов: BPMC Red Fury USB, Avalon Nano 3, GekkoScience, AntMiner U2.
Важно заранее подобрать эффективную систему охлаждения, так как ПК будет работать круглосуточно. Помимо этого, необходимо предусмотреть стабильное подключение к интернет-сети. Обязательное условие – хороший пинг. Блок питания должен соответствовать энергопотреблению.
Шаг №2. Выбор криптовалюты и регистрация кошелька
Чтобы решить, какие криптомонеты добывать, надо учитывать мощность оборудования, стоимость и популярность валюты. Естественно, хочется сначала узнать, какую криптовалюту сейчас выгодно майнить. Первое, что приходит на ум – биткоины. Сегодня добывать их очень сложно в связи с условиями выработки самих монет и высокими требованиями к мощности оборудования. К тому же, надо помнить о большом количестве крупных майнеров, которые занимаются этим с первых дней появления BTC. Вычислительные мощности их специализированного оборудования существенно превосходят те, что способен обеспечить среднестатистический пользователь. И еще один немаловажный момент: больше 50% BTC уже добыто, а каждый следующий блок вычислять все сложнее. Даже с 5 видеокартами процесс будет скучным, долгим (примерно 1 биткоин за 130 дней, который прежде добывали за 40 дней), и скорее всего, бесполезным. Стоит ли подобная игра свеч, – решать вам.
Ethereum или Эфириум занимает 2-е место по стоимости и популярности. Майнить эти монеты проще, поскольку требуются меньшие вычислительные мощности, а обменять их на биткоин можно в любой момент (на биржах или обменниках). Также стоит обратить внимание на Monero, Zcash, Ripple, Dash. Фаворита определить трудно. Можно самостоятельно следить за их стоимостью на биржах или доверить выбор программам-майнерам. Они в автоматическом режиме отслеживают курсы криптовалют и добывают наиболее выгодные на текущий момент, зачастую переключаясь между ними каждые несколько минут.
На данном этапе нужно зарегистрировать криптовалютный кошелек, на котором будут храниться добытые монеты. Сделать это поможет инструкция.
Шаг №3. Выбор пула для майнинга
Пул – сервер для совместного майнинга, который разделяет задачи вычисления подписи блока между участниками. В случае коллективной работы добыча криптовалюты (простыми словами) заключается в том, чтобы объединить технические возможности майнеров с целью генерации большего количества блоков за меньшее время. В итоге у каждого участника пула умножаются шансы заработать монеты, которые потом распределяются пропорционально вкладу в общее дело.
Пулов существует множество: AntPool (добыча относительно всех новых блоков – 15%), DiscusFish/F2Pool (12%), BitFury Pool (12%), Bitclub.Network (5%), GBMiners (5%). Хорошо зарекомендовали себя также Claimbtc, FreeBitcoin, MoonBitcoin. На форумах майнеры положительно отзываются о nanopool.org, www2.coinmine.pl, dwarfpool.com.
Чтобы сделать правильный выбор пула, необходимо учитывать:
Тем, кто любит работать самостоятельно, следует выбирать монеты, которые недавно появились на рынке, поскольку их добывать проще. Для одиночного майнинга биткоина оптимально подойдет функциональный и простой в использовании официальный клиент BitcoinCore (BitCore). Однако майнинг криптовалюты новичкам с нуля лучше начинать через пул.
Шаг №4. Софт
Скачать, установить и настроить подходящую программу для майнинга. В качестве многофункционального программного обеспечения для Windows, Linux и macOS подойдут:
Майнер NiceHashMiner выглядит так:
Можно использовать дополнительные утилиты, например, для разгона видеокарты.
Шаг №5. Активация оборудования и принцип его работы
Итак, оборудование собрано, подключено к интернету и готово к работе. Перед тем, как майнить криптовалюту, необходимо запустить скрипт. После активации выбранного ПО процесс майнинга будет смотреться примерно так:
Программа активирует видеокарты, «заставляя» графический процессор вырабатывать определенные коды. Криптомонета – это и есть длинный код, элементы которого вычисляют видеокарты. Когда собраны воедино все части кода – получается монета. Обычному человеку вовсе не обязательно понимать, каким образом это происходит, главное – что программа все сделает сама. Процесс осуществляется в автоматическом режиме, но нужно, чтобы компьютер работал круглосуточно.
Окупаемость фермы
Майнеры утверждают, что срок окупаемости оборудования составляет около 7-8 месяцев. На самом деле вычислить, за какой период будут возмещены расходы на создание собственной фермы, как и спрогнозировать доходность, весьма сложно. Все зависит от выбора оборудования, вида добываемых монет, сложности майнинга, и даже количества майнеров.
Рассчитывать потенциальную прибыльность удобно при помощи онлайн-калькулятора – http://profit-mine.com/#!/gpucalc. Еще один сервис, который поможет определить, насколько выгодно в данный момент заниматься добычей той или другой криптовалюты – https://whattomine.com/. Он анализирует динамику курсов и на основе полученных данных прогнозирует уровень доходов от майнинга.
Если смотреть на вещи независимым «человеческим» взглядом, то можно примерно подсчитать.
Оборудование и текущие расходы
Все это в сумме обойдется примерно в 200 000 рублей. К ней надо добавить расходы на электроэнергию, которая будет потребляться непрерывно. Ферма из 5 видеокарт будет «кушать» около в 1,5 руб./мес.
Затраты предусматривает также кондиционирование помещения, использование интернета и пулов (им придется платить комиссию в размере от 0,5% до 3% + отдельно за вывод криптовалюты).
Доходность и риски
Минус в том, что независимо от активности добычи, никто не может угадать, сколько виртуальных монет заработает. Майнить одну криптовалюту до бесконечности не получится – большинство монет имеет ограниченную эмиссию, которая известна заранее. К тому же, растущее количество майнеров приводит к снижению вознаграждения после каждой завершенной транзакции и увеличению сложности процесса. К примеру, награда за создание блока биткоина изначально составляла 50 BTC, в конце 2012 г. она сократилась до 25 BTC, а в 2016 г. – до 12,5 BTC. В 2020 г. эта цифра, скорее всего, опять уменьшится в 2 раза. Награда за найденный блок эфириума еще ниже – около 5 ETH.
Стоит ли заниматься добычей криптовалют?
Не исключено, что цены на добываемые криптовалюты подскочат, в результате чего даже пара добытых монет окупится сторицей. Однако, курс может упасть в любой момент и ситуация кардинально изменится. А если добавить к этому статистику кибератак, никто не сможет дать гарантий, что майнер в итоге получит прибыль. Стоит ли добыча всех затрат, усилий и рисков – каждый решает для себя самостоятельно.
Эксперты утверждают, что майнинг – это «сбор золотой пыли, а не самих слитков». Поэтому его лучше рассматривать, как вариант получения дополнительных доходов, но рассчитывать на него, как на способ гарантированного обогащения, нельзя.
Рекомендации
Прежде, чем приступать к майнингу, сделайте «первые шаги»:
Не забывайте, что для получения ощутимых доходов нужны крупные инвестиции – в оборудование, охлаждение помещения, обслуживание системы. Стоимость «входа» в процесс добычи криптовалют с каждым днем возрастает, при том, что само оборудование быстро устаревает «морально» и приходит в негодность.
Выход из положения для ленивых/умных: облачный майнинг
Данный способ подразумевает аренду либо покупку оборудования для добычи криптовалют, которое находится на стороннем ресурсе. В этом случае настройку, подключение и обслуживание системы выполняет специальный сервис, а значит, облачный майнинг подходит для начинающих. Доход от него также пропорционален мощности выбранного вами оборудования.
Преимущества такого решения:
Недостатки и риски:
Компании облачного майнинга, которые продержалась на протяжении нескольких лет – Genesis Mining и HashFlare.io. И все-же, если решитесь начинать, то стартуйте с минимальных инвестиций.
Мобильный майнинг
С недавнего времени появилась возможность для начинающих опробовать майнить биткоины или другие монеты без больших капиталовложений. С этой целью разработаны специализированные приложения для смартфонов. Например:
Следует отметить, что мощности и производительности среднестатистического смартфона не хватает для удовлетворяющего заработка на майнинге. К тому же, при запуске приложений зачастую появляется сомнительная реклама и срабатывают антивирусные сканеры.
Вывод
Извлечь существенную выгоду из майнинга могут только те, у кого есть бесплатное электричество, задатки Великого Майнера и готовность вложить в хорошую «ферму» солидные средства. В противном случае, майнинг лучше обходить стороной. Но это всего лишь меры предосторожности.
Обнаружили ошибку? Выделите ее и нажмите Ctrl + Enter.