Proof-of-Work (Доказательство выполнения работы)

 

Определение Proof-of-Work

 

Proof-of-Work или сокращенно PoWДоказательство выполнения работы – метод защиты сетевых систем от какого-либо несанкционированного вмешательства (например, хакерских атак или рассылок спама), который основан на необходимости выполнения на стороне клиента определенной работы (отсюда название) - как правило решения задачи по заранее известному алгоритму за определенное время, и проверки решения на стороне сервера.

Особенность системы PoW заключается в асимметрии затрат времени на стороне клиента и сервера – на решение задачи затрачивается значительное время, в то время как проверка результата происходит довольно быстро.

Доказательство выполнения работы не стоит путать с так называемыми капчами, которые кажутся довольно легкими для человека, однако представляют собой практически неразрешимую задачу для компьютера. Как сказано выше, для Proof-of-Work характерно решение задачи именно на основании четкого заранне известного алгоритма, то есть результат данной задачи априори существует и может быть найден компьютером.

Наибольшее распространение Proof-of-Work получили в технологии блокчейн и криптовалютных системах.

Несколько моментов из истории Proof-of-Work

 

В 2004 году Хал Финней адаптировал концепцию Proof-of-Work к деньгам с помощью идеи «многоразового доказательства выполнения работы». В 2009 году биткоин стал первым масштабным применением идеи Финнея (Финней также стал получателем первой биткоин транзакции). В настоящее время Proof-of-Work является основой многих других криптовалют.

Как работает Proof-of-Work

 

В объяснении, приведенном ниже рассматривается принцип работы Proof-of-Work в сети биткоин. Биткоин - это цифровая валюта, основой которой является блокчейн. Блокчейн – это реестр, содержащий записи всех транзакций биткоинов. Эти записи располагаются в последовательных «блоках», так что ни один пользователь не может дважды потратить свои средства. Чтобы предотвратить несанкционированное вмешательство, реестр является общедоступным или «распределенным», - измененная версия будет быстро отвергнута другими пользователями (см. «Что такое распределенный реестр?»).

На практике обнаружение вмешательства происходит с помощью так называемых хешей – длинных строк букв и цифр, которые и служат доказательством работы. При помещении заданного набора данных в хэш-функцию (биткойн использует SHA-256), он генерирует определенный хэш. Даже незначительно изменение исходных данных приведет к полному изменению хэша. Однако, независимо от размера исходного набора данных, хэш, генерируемый данной функцией, будет иметь одинаковую длину.

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

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

Эта настройка работает таким образом, что новый блок «добывается» (или «майнится») – т.е. добавляется к блокчейну путем генерации валидного хэша - примерно каждые 10 минут. Настройка уровня сложность осуществляется путем установки «цели» для хэша: чем ниже цель, тем меньше будет количество валидных хэшей и тем сложнее их генерировать.

Хеш начинается с длинной строки нулей, например, хэш для блока #429818, имеет вид 000000000000000004dd3426129639082239efd583b5273b1bd75e8d78ff2e8d. Этот блок содержит 2012 транзакции с участием чуть более 1000 биткоинов, а также заголовок предыдущего блока. Если пользователь изменит одну транзакционную сумму всего лишь на 0,0001 биткоин, результирующий хеш также изменится до неузнаваемости, и сеть сразу распознает мошенничество.

Если определенный набор данных может генерировать только один хэш, как майнеры убеждаются, что они генерируют хэш ниже значения «цели»?

Майнеры изменяют ввод, добавляя целое число, называемое nonce («число, используемое один раз»). Как только действительный хеш найден, он передается в сеть, и блок добавляется к блокчейну. Это чрезвычайно краткое объяснения процесса, более подробно вы можете прочитать в статье («Что такое майнинг?», «Что такое nonce?»).

Майнинг - конкурентный процесс, но это скорее лотерея, чем гонка. В среднем, приемлемое Proof-of-Work генерировать каждые десять минут, но кто это будет - неизвестно. Иногда майнеры объединяются вместе, чтобы увеличить свои шансы на добычу блоков, благодаря чему зарабатывают транзакционные сборы и получают вознаграждение за создание биткоинов.

Proof-of-Work затрудняет изменение любого аспекта блокчейна, поскольку при каждом таком изменении потребуется переделывать (перемайнивать) все последующие блоки. Это также затрудняет пользователю или пулу пользователей монополизировать вычислительную мощность сети, поскольку машины и мощность, необходимые для реализации хеш-функций, являются дорогостоящими.