Протокол биткоина активно использует так называемую хеш-функцию для добавления новых блоков в блокчейн в процессе майнинга.
С технической точки зрения хеш-функция представляет собой алгоритм, который, начиная с данных произвольной длины, создаёт хеш фиксированной длины. Этот хеш является шестнадцатеричным кодом, представляющим собой исходный пакет данных, который использовался для его генерации. Как правило, длина этих данных становится значительно короче.
Основное использование этой функции — создание синтетического, относительно короткого кода, который представляет собой гораздо больший пакет данных. Будучи выполненным таким образом, этот процесс неизбежно влечёт за собой определённую потерю данных, что де-факто необратимо: хеш не может быть прослежен до стартового пакета данных, использованного для его генерации.
Алгоритм, используемый биткоином для хеш-функции SHA-256, создаёт 256-битный хеш и требует предсказуемый объём вычислительной мощности компьютера.
Чтобы добавить новый блок в блокчейн биткоина, в качестве входных данных для хеш-функции используется пакет данных транзакций, которые стоят в очереди в мемпуле и ожидают подтверждения.
Однако, задача майнера состоит не только в создании хеша этих входных данных, но и в создании хеша, который начинается с ряда дополнительных нулей и соответствует пакету входных данных.
На самом деле, несмотря на то, что хеш нельзя проследить до данных, которые его сгенерировали, всегда можно повторить операцию, чтобы убедиться, что она была выполнена правильно. Таким образом, поскольку все данные по транзакциям, введённые в блок, являются публичными, любой может проверить с помощью SHA-256, что хеш, созданный майнером, является правильным. И только если хеш сделан корректно, он будет добавлен в блокчейн, и майнер получит своё вознаграждение.
Хеш-функция и сложность майнинга
Число дополнительных нулей изменяется примерно каждые две недели и соответствует так называемой сложности: чем больше нулей необходимо, тем сложнее будет найти хеш, и тем больше времени это займёт.
Чтобы найти хеш с дополнительными нулями, майнер может работать исключительно методом проб и ошибок, и именно поэтому вычислительная мощность играет ключевую роль в процессе майнинга.
Блок может быть добыт одним майнером; вознаграждение предоставляется только тому майнеру, который сможет найти хеш, подтверждающий блок. Именно поэтому и создаётся конкуренция, при которой майнер с наибольшей вычислительной мощностью обладает наибольшим преимуществом.
Кроме того, даже самое маленькое изменение входных данных создаёт совершенно другой хеш, поэтому здесь необходимо обработать как можно больше хешей в кратчайшие сроки, запуская хеш-функцию много раз в секунду.
Например, хешрейт 130 экзахеш/сек означает, что устройства, которые пытаются добывать биткоин-блоки по всему миру, выполняют в общей сложности 130 экзахеш-функций в секунду, или 130 миллионов миллионов миллионов (или 130 миллиардов миллиардов, что называется квинтиллионами).
Биткоин-протокол также использует хеш-функцию для генерации хеша транзакции, который является уникальным идентификатором, используемым для идентификации каждой отдельно взятой транзакции.