Суть майнинга

В основе майнинга лежат довольно простые принципы и несколько ключевых процессов. Остановимся на них подробнее.

Одним из главных процессов является хеширование. Этот термин означает преобразование большого количества данных, которые мы имеем на входе, на довольно короткую строку. При этом ее уникальность позволяет отличить данные от любых других. Выходные данные, полученные в результате этого процесса, называются хешем.

Одним из главных функций хеширования является удобность в пользовании. Ведь благодаря ему уже не нужно сравнивать каждый бит данных. Кроме того, это способ передать информацию целостно. Например, можно передать количество данных, а потом захешировать их и передать хеш. Получатель тоже может захешировать данные. Если хеши совпадают – значит, информация передана в полном объеме.

Также важным есть понятие «дерево Меркла». Это специфическая структура данных, которая служит для проверки контента и упорядочения информации. Например, если вы хотите отправить четыре файла и сохранить их в изначальном виде, дерево Меркла может в этом помочь. Для этого нужно получить хеши с каждого файла, объединить хеши первого и второго, снова высчитать хеш. Так же стоит поступить с 3 и 4 файлом. Потом остается только объединить полученные хеши и получить новый. Этот конечный хеш (merkle root) будет включать в себя «отпечатки» всех четырёх файлов.

Благодаря дереву Меркла в майнинге проверяются, какие транзакции и в каком порядке включены в блок. Потому что изменение хотя бы одной транзакции приведет к изменению всего merkle root. Это дает возможность защитить систему от «подделанных» транзакций в блоке. Проверить подлинность довольно просто: подсчитайте merkle root самостоятельно, а потом сравните с тем, что записано в заголовке блока.

Какая связь между merkle root и хешем блока?

Merkle root и хеш блока имеют много общего, но есть одна ключевая разница. З помощью merkle root нельзя узнать место блока в блокчейне. Исправить эту ситуацию может добавление к данному хешу хеша последнего блока в блокчейне. После этого остается только снова вычислить хеш. То есть процесс будет выглядеть так:

SHA256(SHA256(хеш предыдущего блока + merkle root)).

SHA256 – это алгоритм, однонаправленные хеш-функции, которые позволяют создавать «отпечатки» различной длины.

Этот процесс лежит в основе майнинга. Благодаря ему можно создать огромное количество блоков.

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

Этот порог называют сложностью. Она меняется каждые 2016 блоков, примерно раз в две недели. Именно из-за этого, в среднем, интервал появления блоков составляет примерно 10 минут.

Как можно предугадать результат хеширования, чтобы он не был выше установленного порога?

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

SHA256(SHA256(хеш предыдущего блока + merkle root + nonce))

То есть если сложность, например, составляет 1000000000000000000000000000000000000000000000000000000000000000, то хеш должен начинаться с нуля. Если сложность в начале будет иметь ноль, хеш должен начинаться з двух нулей.

В этом и заключается суть майнинга – подобрать такой nonce, чтоби хеш имел достаточное количество нулей вначале.

 

Ускоряй взросление общества