Про удачу в майнинге
Большой процент майнеров как начинающих, так и уже опытных не понимают, что такое удача в майнинге. В этот раз я попытаюсь простыми словами вам рассказать о таком важном аспекте при майнинге криптовалюты.
Что такое майнинг?
реклама
У тех людей, кто не знаком с этим процессом, зарождаются конспирологические теории, якобы майнинг – это спланированная акция, а вся крипта придумана некими людьми, дабы использовать ваше оборудование как «бесплатный суперкомпьютер» для просчета возможных ущербов при ядерной атаке и т.д.
На самом деле все куда проще. Если говорить простыми словами, то майнинг – это процесс создания криптовалюты с помощью специального алгоритма. На ПК генерируются уникальные наборы данных (блоки), подтверждающие достоверность платежных транзакций. Эти блоки состоят из хеша заголовков предыдущих блоков, хеша транзакций и случайных чисел. Блокчейн – это цепь. В ней содержатся все транзакции. За нахождение блока начисляется награда.
Одним из важнейших параметров любой крипты считается время блока. Это такие временные рамки нахождения новых блоков. Так, например, блок Биткоин находится, в среднем, за 10 минут, а у Эфириума – 13,2 секунды. То есть, в сети Биткоина раз в 10 минут создается новый блок, у Эфириума – 13,2 секунды. Однако не все так просто: это не означает, что каждые 10 минут вы стабильно находите по 1 блоку Биткоина или каждые 13,2 секунды — блок Эфириума. Этот процесс может занять и минуту, и час. Это лишь среднее значение. Оборудование всех майнеров решает одну и ту же задачку. Всеми видеокартами мира каждые 13,2 секунды или же каждые 10 минут получается одна и та же задача.
Так, ферме, занимающейся майнингом Эфириума, каждые 13,2 секунды дается новая задачка. Эта самая ферма пробует выиграть в «угадайку», для создания нового блока.
реклама
Разные алгоритмы майнинга являются разными уравнениями. Допустим, первый алгоритм M+N=R, второй M*N=R. Каждым блокам дается постоянное значение M, а ответ – число R с 2 нулями в конце. В случайном порядке перебирается число N, пока не найдется ответ. Сетью подбирается такое число нолей, чтобы блок находился в среднем за то самое значение (10 минут Биткоин или 13,2 секунд Эфириум).
Приведу простой пример.
Допустим, есть сеть крипты G. Вы там один занимаетесь майнингом. Время блока – 5 минут. Сетью дается задача, в конце ответа которой (R) два ноля.
Ваш знакомый также пришел для майнинга этой валюты. По логике блоки должны находиться в 2 раза быстрее — за 2,5 минут. На практике все по-другому: время блока – это один из важнейших параметров, поэтому сеть усложняет задачу, ответ (R) в которой имеет уже 3 ноля.
реклама
Вычисление примера идет путем подбора чисел. Специальных методик, патчей и т.д, с помощью которых примеры решаются быстрее, нет. Есть лишь разница в скорости подстановки этих чисел. Все дело в мощности карты: чем мощнее, тем быстрее.
Затем приходят еще друзья. Сеть опять же усложняет задачку так, чтобы время появления блока было все те же 5 минут
Если количество майнеров уменьшается, то сеть опять реагирует на это, но теперь уже упрощает задачку так, чтобы блок создавался раз в 5 минут.
Удача в майнинге.
Итак, что же из себя представляет эта удача?
реклама
Приведу излюбленный многими пример с бросанием кубика. Допустим, вы бросаете кубик, и вам нужно, чтобы выпало число 6. В идеале шанс выпадения цифры 6 равен 16,6%, то есть каждый 6 раз, так как у куба 6 граней. На практике это число может выпасть как несколько раз подряд, так и не выпасть с 10 бросков.
Поиск решений блоков точно такой же. Допустим, вы обладаете одной видеокартой, а у знакомого их десять. Это равносильно тому, что у вашего знакомого десять кубиков, а в ваших руках только один.
Шанс того, что у вашего знакомого выпадет нужная цифра намного больше. Однако, это не означает, что шансов выиграть у него у вас совсем нет. Представим, что наградой за блок будет 110 долларов. Вам доступны следующие варианты:
- Объединяться с знакомым в пул и найти блок, затем честно поделив награду: вам достанется 10 долларов, ему 100 долларов.
- Попробовать искать блок самостоятельно. При условии, что вы нашли этот самый блок, вам достанется вся награда – 110 долларов.
Выбрав второй вариант, в идеальных условиях вам нужно в 11 раз больше времени, чем в пуле с знакомым, но у нас не идеальные условия.
Иначе говоря, майнеры играют в «угадайку». Чем выше мощность, которой располагает майнер (МХ/с), тем его оборудование быстрее перебирает эти цифры с целью нахождения решения блока. Чем большей мощностью вы обладаете (больше видеокарт и их мощность), тем вами быстрее проходится эта игра.
В вашем распоряжении, к примеру, оборудование на 100 МХ/с, а у знакомого – 600 МХ/с. Разумно было бы предположить, что знакомый вас обыграет. Причем это будет выглядеть так: на 1 вашу победу приходится 6 его побед. Это в идеальных условиях.
Однако в реальной жизни работает та же логика, что и в ситуации с кубиками: может повезти, а может и нет.
Главное знать, что везти вам будет максимум день-два. Затем вычислительные мощности вашего знакомого возьмут верх. В среднем, соотношение ваших побед к победам вашего знакомого будет равно 1/6.
Удача в майнинг-пуле.
Это такое значение в %, указывающее значение удачи в момент поиска пулом блока. В идеале пулом всякий раз находился бы блок при значении в 100 процентов. Если пул испытывает везение, то блок будет найден до отметки 100%, если же нет – то может быть 100 процентов и больше.
Приведу пример.
Период нахождения блока равняется 10 минутам. Ежедневно это равняется 144 блокам. Допустим, хешрейт сети – 40 MS/s. Если хешрейт пула равен 10 MS/s, то им находится примерно каждый 4 блок, следовательно, это 36 блоков за сутки. Если им найдено «сверх нормы», для примера, 43 блока – значит в этот раз он был более удачлив, а если 23 блока –повезло меньше. В среднем, значение параметра удача всякий раз стремится к 100%.
Давайте посмотрим все это на примере нескольких валют: Aeternity, Эфириум, Эфириум Классик.
Как мы видим, значение удачи всегда почти равно 100%. Здесь главное терпение. Сперва значение удачи могло равняться 10 процентам или 500 процентам, но она все время приближается к значению в 100 процентов. Поэтому не нужно постоянно метаться с одного пула к другому.
Удача в соло-майнинге
Все, что написано выше, распространяется и на соло-майнинг. Будете ли вы владельцем одной видеокарты или целой майнинг-фермы размером с комнату – вы столкнетесь с параметром «удача».
Возможно ли падение удачи?
Рост удачи в майнинге продолжается до того момента, пока не найдется решение блока, затем она сбросится до нуля. Бывает и такое, что значение удачи падает, например, с 95 до 85 процентов. Такое возможно, когда падает или поднимается сложность сети. Но это не означает, что вам резко повезет.
Источник
Майним 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 квадриллионов раз выше. Да-а-а, понятно, что я не ухвачу удачу за хвост ручным майнингом биткойнов, и это еще не учитывая стоимость бумаги и ручек!
Источник