Доказательство работы

Материал из Bitcoin Wiki
(перенаправлено с «Proof of work»)
Перейти к: навигация, поиск

Доказательство работы (proof of work) в терминологии биткоин подразумевает некие данные, которые требуют определенных затрат ресурсов (вычислительных, времени) для того чтобы быть найденными а также соответствовать определенным требованиям. Производство proof of work может быть случайным процессом с низкой вероятностью нахождения, вследствие чего требуется множество пробных и ошибкочных попыток (в среднем) прежде чем будет отыскано подходящее значение.

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

Нас интересует proofs of work используемое в системе генерации биткоинов - это часть данных которая необходима для того чтобы генерируемый блок был признан ликвидным. Сложность этой работы подстраивается таким образом чтобы соответственно текущей вычислительной мощности сети, каждый блок находился примерно раз в 10 минут.

Для того чтобы блок был валидным его хэш должен быть меньше текущей цели; это значит что каждый блок подтверждает что была выполнена работа для его генерации. Каждый блок содержит хэш предыдущего блока, таким образом вся цепочка блоков содержит подтверждение огромного количества работы для их генерации. Это позволяет защитить историю транзакций от фальсификации.

Пример

Предположим что исходной строкой, над которой будут производиться манипуляции является "Hello, world!". Наша цель - найти варианты SHA-256 хэшей, значение которых начинается на '000'. Мы изменяем строку добавляя цифровое значение вконце строки. Это называется nonce и увеличиваем его каждый раз. Нахождение соответствия для "Hello, world!" требует 4251 повторений:

"Hello, world!0" => 1312af178c253f84028d480a6adc1e25e81caa44c749ec81976192e2ec934c64
"Hello, world!1" => e9afc424b79e4f6ab42d99c81156d3a17228d6e1eef4139be78e948a9332a7d8
"Hello, world!2" => ae37343a357a8297591625e7134cbea22f5928be8ca2a32aa475cf05fd4266b7
...
"Hello, world!4248" => 6e110d98b388e77e9c6f042ac6b497cec46660deef75a55ebc7cfdf65cc0b965
"Hello, world!4249" => c004190b822f1669cac8dc37e761cb73652e7832fb814565702245cf26ebb9e6
"Hello, world!4250" => 0000c3af42fc31103f1fdc0151fa747ff87349a4714df7cc52ea464e12dcd4e9

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