computer crypto hashПонятие майнинг криптовалют знакомо многим не понаслышке, т.к. запускать программу для майнинга пробывали наверно уже все опытные пользователи ПК. Тот факт, что с помощью майнинга добывается криптовалюта и на этом можно заработать, знаком тоже многим. А вот, что конкретно делает компьютер или asic (специализированное устройство для майнинга) во время майнинга, зачем перебирать какие-то хеши, т.е. техническую сторону вопроса, уже знакома более узкому кругу пользователей. Из-за этого в сети возникает множество "теорий заговора", на подобие того, что Bitcoin это чей-то проект по завладению огромной вычислительной мощности для взламывания Пентагона или других подобных организаций. Что компьютерные мощности криптовалют используются для секретных научных разработок, общения с инопланетным разумом, а сами криптовалюты придумали как прикрытие для всех этих "темных дел". Далее мы постараемся наиболее понятно осветить процесс майнинга биткойна и какие задачи решает Ваш компьютер в это время, что бы Вы смогли более точно представлять техническую часть процесса майнинга, а на все "теории заговора" Вы смотрели как на не самую удачную шутку. 

 Сначала приведем небольшую теорию по технологии Блокчейн (Blockchain) для тех кто еще не знаком с этим понятием. 

Blockchain - в переводе цепочка блоков, что отражает суть, т.е. последовательная запись блоков. Блок это список транзакций (переводов). Т.е. получаем блокчейн это список переводов между криптовалютными кошельками, записываемых не по отдельности, а сразу большой партией.

Для аналогии blockchain можно представить как папку с листами, а блок здесь будет листом, на котором записаны транзакции между кошельками. Нахождение очередного блока означает, что в папку был добавлен новый лист с новыми данными (переводами). Все листы при этом пронумерованы и лежат по порядку.

При этом уже добавленные данные в блокчейн не подвергаются сомнению, т.е. это инструмент которому доверяют все участники сделки по передаче криптовалюты с одного кошелька на другой.

Т.е. Blockchain это архив всех переводов, которые существуют и его нельзя подделать.

Что бы Blockchain обладал 100% надежностью и люди полностью доверяли сделкам через блокчейн, используется несколько технологий, в том числе и проверка работы, т.е. Proof of Work майнинг.

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

Что бы понимать дальнейшие повествование нужно знать следующие термины: Хеширование,  Хещ-функция и Хеш-сумма и другие.

Хеширование - процесс преобразования информации в не читаемый вид для ее защиты от посторонних, а так же для сжатия информации в текстовую строку заданной длины.

Хеш-функция (алгоритм хеширования)- способ с помощью которого происходит шифрование. Написать текст задом наперед, заменить все буквы цифрами или объединить оба этих способа тоже можно назвать хеш-функцией. Для Bitcoin хеш-функция гораздо сложнее и называется SHA-256, Ethereum - Dagger Hashimoto, Litecoin - Scrypt.

Хеш-сумма - это результат, который получили после хеширования, т.е. зашифрованные первоначальные данные, которые невозможно узнать, не зная используемый алгоритм шифрования. Хеш-сумма всегда имеет заданное и неизменяемое количество символов. У криптовалют обычно хеш-сумма имеет длину в 64 символа или 32 бита.

Сложность хеширования (сложность майнинга) - для криптовалют сложность хеширования задается за счет включения дополнительного условия при создании хеш-сумм. Для этого в начале хеш-суммы добавляется неизменяемое число ноль (0). С увеличением сложности количество нулей в начале  хеш-суммы увеличивается. На данный момент хеш-сумма Bitcoin в обязательном порядке должна содержать 18 нулей.

Транзакция (перевод) - информация по передаче криптовалюты с одного адреса на другой, при этом эта информация так же хешируется в строку из 64 символов той же хеш-функцией (SHA-256 для биткойна), причем дважды. Хеширование транзакций происходит быстро, т.к. нету дополнительный условия к созданию хеш-функций, в отличии от нахождения хеш-функции всего блока. Хеш-сумму транзакции обычно называют TxID.

Nonce (случайное произвольное число) -  это число которое добавляется к данным блока для упрощения создания хеш-суммы с текущими условиями (сложностью майнинга).

Всю терминологию мы объясняем на обывательском уровне, для полного понимания обратитесь к другим источникам, например, википедии.

Зная и понимая терминологию можно уже понять что же на самом деле делает компьютер (процессор, видеокарта, asic, fpga) во время майнинга криптовалют

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

Наглядный пример поиска нового блока, хеш-суммы или майнинга криптовалюты:

bitcoin mining hashing

В данном примере рассчитано 4 хеш-суммы с разными Nonce числами (3001, 3002, 3003, 3004), хеш-суммы предыдущего блока и хеш-суммы транзакции остаются без изменений. 

Собственно из-за произвольного числа Nonce время появления нового блока не постоянно и может варьироваться в широких пределах, но в среднем математически время нахождения блока будет стремиться к одному заданному в программе числу.

Таким образом получаем, что майнинг криптовалют это подбор произвольного числа Nonce с последующим хешированием, что бы получаемая хеш-сумма блока после хеширования отвечала требованиям сложности сети (имела нужное количество нулей). Т.к. процесс хеширования не моментальный процесс и требует математических и логических операций от компьютера, поэтому для каждого алгоритма то или иное оборудование имеет свою скорость хеширования. Например, при хешировании по алгоритму Dagger-Hashimoto или Ethash видеокарта AMD Radeon RX580 в течении одной секунды хеширует 30 миллионов вариантов хеш-сумм с различным числом Nonce. Собственно поэтому и говорят, видеокарта RX580 выдает 30 мегахеш (MH/s). При этом скорость хеширования зависит не только от оборудования, но и от алгоритма шифрования, сложности майнинга и программного обеспечения (майнеров). 

Вся информация по блокам открыта в свободном доступе. Для биткоин можно посмотреть на сайте Blockchain.com. Пример блока под номером 613181 можно посмотреть ниже:

mining bitcoin block information 

Когда компьютер производит десятки или сотни тысяч математических операций, что бы получить одну хеш-сумму или просто хеш и при этом за одну секунду обрабатывается 30 миллионов таких хеш-сумм, то при таком объеме работ, производимых компьютером, говорить о каком-то подборе паролей для взлома пентагона или другом тайном заговоре становится просто смешно.

Теперь Вы, наверно, спросите: "Зачем вообще все этого нужно?". Ответ на этот вопрос лежит в самой технологии блокчейн, которой для защиты данных от взлома нужно обеспечить определенный интервал появления новых блоков. И этот временной интервал как раз регулируется сложностью майнинга, а сам майнинг служит доказательством работы (Proof of Work), за которую майнер получает награду в виде вновь выпущенной криптовалюты в найденом им блоке. Совершаемая при этом работа тоже не бесплатна, т.к. требует покупки оборудования и траты ресурсов (электроэнергии). Поэтому и выстраивается устойчивая экономическая модель криптовалют, за счет которой у криптовалют появляется начальная материальная ценность в обществе.

В заключение можно сказать, что blockchain это надежный архив, а процесс майнинга это запись подтвержденной информации в этот архив. Майнеры в этом процессе получают награду за вполне понятную и нужную работу по поддержанию всей системы в рабочем и устойчивом состоянии.