Введение
Proof of Work (PoW) — это механизм предотвращения двойного расходования. Большинство криптовалют использует его в качестве алгоритма консенсуса, который служит способом защиты реестра.
Proof of Work — первый и самый популярный алгоритм консенсуса. Он был представлен Сатоши Накамото в вайтпейпере Биткоина, опубликованном в 2008 году, но сама технология была предложена задолго до этого.
HashCash от Адама Бэка — это ранний пример использования алгоритма Proof of Work до появления криптовалют. Необходимость выполнения небольшого количества вычислений перед отправкой электронной почты позволила бы существенно уменьшить количество спама. Такие вычисления практически ничего не стоят для обычного отправителя, но существенно усложняют процесс массовой рассылки.
Что такое двойное расходование?
Двойное расходование происходит, когда одни и те же средства расходуются более одного раза. Этот термин практически всегда используют в отношении цифровой валюты, поскольку в реальной жизни сложно представить ситуацию, когда можно потратить одни и те же деньги дважды. Например, при покупке кофе вы передаете деньги кассиру, который кладет их в кассу. У вас не получится пойти в кафе через дорогу и заплатить за второй кофе той же купюрой.
В сфере цифровых денежных средств такое возможно. Это можно сравнить с дублированием файла на компьютере. Всё что нам для этого понадобится, это скопировать его и вставить. Также вы можете отправить один и тот же файл десяти, двадцати и более людям.
Поскольку цифровые деньги — это просто данные, необходимо запретить людям копировать и отправлять/расходовать одни и те же единицы в разных местах. В противном случае подобную валюту ждет крах в кратчайшие сроки.
Для чего нужен Proof of Work?
Если вы уже знакомы с нашим руководством по технологии блокчейн, то знаете, что пользователи транслируют транзакции в сеть. Но транзакции становятся действительными не сразу, а только после проверки и добавления в блокчейн.
Блокчейн — это большая открытая база данных, в которой любой пользователь может проверить, были ли средства потрачены ранее. Представим следующий сценарий: у вас и трех ваших друзей есть блокнот. Каждый раз, когда кто-то хочет сделать перевод, вы делаете запись: Алиса отправила Бобу пять единиц, Боб перевел Кэрол две единицы и так далее.
Но есть одна особенность: каждый раз, когда вы совершаете перевод, то ссылаетесь на прошлую транзакцию, от которой вам пришли средства. Таким образом, если Боб отправляет Кэрол две единицы, то запись выглядит следующим образом: Боб переводит Кэрол две единицы, которые он ранее получил от Алисы.
Теперь у нас есть возможность отслеживать все переводы. Если Боб попытается совершить другую транзакцию, используя те же единицы, которые он только что отправил Кэрол, всем сразу станет известно об этом и коллектив не позволит ему записать данную транзакцию в блокнот.
Такая система может хорошо работать в небольшой группе людей где все участники хорошо знают друг друга, ведь им будет проще договориться о том, кто из них станет ответственным за добавление транзакций в общий список. Но что если мы хотим собрать группу из 10 000 участников? Суть использования блокнота плохо масштабируется, поскольку никто не станет доверять незнакомцу управление подобным финансовым регистром.
Именно так работает Proof of Work. Он гарантирует, что пользователи не потратят денежные средства, которые они не могут тратить. Используя комбинацию теории игр и криптографии, алгоритм позволяет любому пользователю обновить блокчейн в соответствии с правилами системы.
Как это работает?
Блокнот — это своеобразный блокчейн. Однако транзакции не добавляются в систему одна за другой, а объединяются в блоки, после чего пользователи, создающие блок, включают их в блок-кандидат. Транзакции будут считаться действительными только после подтверждения блока-кандидата и добавления в блокчейн.
Добавление блока в блокчейн — дорогостоящий процесс. Proof of Work требует, чтобы майнер (пользователь, создающий блок) использовал собственные ресурсы, вознаграждая его за это определенными привилегиями. Этот ресурс — вычислительная мощность, которая используется для хеширования данных блока до тех пор, пока не будет найдено решение задачи.
Хеширование блока предполагает процесс его прохождения через хеш-функции с целью генерации хеша. Хеш блока выполняет роль «отпечатка пальца» и служит идентификатором входных данных, уникальных для каждого блока.
Осуществить процесс в обратном направлении, т.е. получить входные данные на основе хеша, практически невозможно. Однако, зная входные данные, вы легко сможете подтвердить правильность хеша, для этого вам необходимо провести данные через хеш-функцию и проверить, совпадает ли вывод.
В Proof of Work вы должны предоставить данные, хеш которых соответствует определенным правилам, установленным в протоколе, при условии, что вы не знаете, как его извлечь напрямую. Единственный вариант, это пропустить данные через хеш-функцию и проверить, соответствуют ли они условиям. Если соответствия не будет, вам придется изменить данные, чтобы получить другой хеш. Изменение хотя бы одного символа в ваших данных приведет к совершенно другому результату, по этой причине невозможно просто так предугадать, каким именно может быть вывод.
Таким образом, чтобы создать блок, нужно угадать хеш. Для этого пользователь использует информацию обо всех транзакциях, которые нужно добавить в блоки, и некоторые другие данные, которые затем хешируются все вместе. Но так как набор данных не меняется, нужно добавить часть информации, которая станет переменной. В противном случае на выходе всегда будет получаться один и тот же хеш. Эти переменные данные, которые вводятся для получения нового хеша, называются nonce, а сам процесс — майнингом.
Таким образом, майнинг — это процесс сбора данных блокчейна и хеширования их вместе с одноразовым кодом до тех пор, пока вы не найдете подходящий хеш. Если вы найдете хеш, который удовлетворяет условиям, установленным протоколом, вы получаете право транслировать новый блок в сеть. На этом этапе другим участникам сети необходимо обновить свои блокчейны, чтобы включить новый блок.
Условия, установленные крупными криптовалютами, невероятно сложно удовлетворить. Чем выше хешрейт в сети, тем сложнее найти действительный хеш. Это сделано для того, чтобы блоки не генерировались слишком быстро.
Регулярные попытки угадать огромное количество хешей обходятся дорого, ведь при этом тратится огромное количество вычислительных ресурсов и электрической энергии. Однако если майнерам удается найти действительный хеш, протокол награждает их за проделанную работу.
Давайте повторим пройденный материал:
- Процесс майнинга является очень дорогостоящим по причине большого количества необходимых ресурсов.
- После выполненной работы и производства валидного/подтвержденного блока вы получаете вознаграждение.
- Зная входные данные, пользователь легко может проверить правильность произведенного хеша — любые участники могут проверить, что блок является действительным, не используя при этом большое количество вычислительных ресурсов.
Но что, если вы попытаетесь обмануть систему? Что мешает вам поместить в блок кучу мошеннических транзакций и создать действительный хеш?
Для этого была разработана криптография с открытым ключом. Чтобы больше узнать об этой теме, ознакомьтесь с нашей статьей Что такое криптография с открытым ключом. Если кратко, то алгоритм использует определенные криптографические приемы, которые позволяют любому пользователю проверить право отдельного участника сети переместить средства на другой адрес.
Когда вы создаете транзакцию, вы ее подписываете. Затем любой участник сети может сравнить подпись с вашим открытым ключом на предмет соответствия. Это позволяет узнать, можете ли вы тратить свои средства и не превышают ли ваши расходы допустимую сумму.
Любой блок, содержащий недопустимую транзакцию, будет автоматически отклонен. Попытка обмануть сеть обойдется вам очень дорого, ведь в конечном итоге вы просто потратите свои вычислительные ресурсы, не получив награду за это.
В этом и заключается идея Proof of Work: пользователям выгоднее действовать честно, чем пытаться обмануть систему. Протокол стимулирует майнеров пытаться окупить инвестиции, поэтому большинство из них будут соблюдать правила, чтобы получать гарантированный доход.
Proof of Work и Proof of Stake
Существует множество других алгоритмов консенсуса, но одним из самых ожидаемых стал Proof of Stake (PoS). Его концепция зародилась в 2011 году, и была реализована только в некоторых небольших протоколах. Ей еще только предстоит реализация в более крупных блокчейнах.
В сетях с консенсусом Proof of Stake роль майнеров играют валидаторы, так как протокол не связан с процессом майнинга и угадыванием хешей. Вместо этого пользователи выбираются случайным образом, а выбранный участник должен предложить новый блок. Если блок будет признан действительным, валидатор получит вознаграждение, состоящее из комиссий за транзакции данного блока.
Протокол выбирает нового валидатора на основе нескольких факторов. Чтобы получить шанс быть выбранным, необходимо заблокировать часть токенов, добавив их в стейкинг. Эта сумма выступает в качестве своеобразного залога: валидаторы блокируют в системе определенное количество монет, которые будут утеряны, если валидатор попытается обмануть систему. Добавленные в стейкинг монеты будут изъяты, если валидатор попытается подтвердить недействительный блок.
Proof of Stake обладает некоторыми преимуществами перед Proof of Work. Одно из них — меньший углеродный след. Это связано с тем, что Proof of Stake не требует содержания мощных майнинг-ферм, поэтому потребляет намного меньше электроэнергии, чем Proof of Work.
Тем не менее, это не имеет ничего общего с послужным списком PoW. Хотя такой подход и может восприниматься как расточительство, на текущий момент, майнинг является единственным способом достижения консенсуса, который зарекомендовал себя в глобальных масштабах. Всего за одно десятилетие данный механизм обработал транзакций более чем на триллионы долларов. Чтобы с уверенностью сказать, что PoS сможет выдержать такую конкуренцию с надлежащей безопасностью для пользователей, нам еще предстоит его проверить в более дикой среде.
Резюме
Proof of Work — надежное и безопасное решение проблемы двойного расходования. Биткоин доказал, что для этого не нужны централизованные организации. При грамотном использовании криптографии, хеш-функций и теории игр участники децентрализованной среды могут сами отслеживать правильность работы всей финансовой базы данных.