Что такое Proof-of-Work?
Узлы (ноды) поддерживают работу блокчейна, взаимодействуя друг с другом. Для их эффективной работы разработчики придумали набор правил, чтобы они могли договориться между собой — алгоритм консенсуса.
Proof-of-Work (PoW) или «доказательство работы» — первый алгоритм консенсуса в криптовалютной сфере, реализованный в протоколе Bitcoin. Главная задача PoW — защитить децентрализованную сеть от различных атак и манипуляций транзакциями.
Как работает Proof-of-Work
Транзакции пользователей после отправки рассылаются всем нодам децентрализованной сети, которые объединяют их в блок. Перед добавлением в распределённый реестр блок проверяют и подтверждают специальные узлы — майнеры.
Блоки хранят данные о текущих и предыдущих транзакциях. Например, в блокчейне записано, что Боб получил от Алисы 5 BTC. Если при проверке выяснится, что Боб попытался отправить 10 BTC, майнеры отклонят транзакцию, ведь каждому узлу известно, что Боб может потратить только 5 BTC. Транзакцию добавят в блок только после прохождения проверки, но для записи в блокчейн её ещё нужно подтвердить.
Каждый блок имеет хеш — уникальный идентификатор входных данных в виде шестнадцатеричного числа фиксированной длины. Хеш является своего рода «отпечатком пальца» для блока. По правилам алгоритма Proof-of-Work узлы должны расшифровать хеш блока путем перебора через хеш-функцию — набор математических формул с использованием криптографии, необходимых для решения вычислительной задачи в блокчейне.
Майнеры перебирают числа до тех пор, пока не угадают подходящий хеш, который состоит из двух частей: постоянной и переменной. Постоянная часть, как нетрудно догадаться, не меняется, поэтому при её использовании на выходе всегда получался бы одинаковый результат. Главная задача майнера и состоит в том, чтобы найти переменную часть (nonce) в блоке данных для получения нового хеша. Процесс поиска нового хеша называется майнингом или добычей криптовалюты.
Майнинг — это соревновательный процесс: первый узел, который найдет новый хеш, добудет блок и получит вознаграждение. После подтверждения транзакций каждый узел обновляет свою копию для синхронизации всех записей. В сети Bitcoin награда за добытый блок составляет 6,25 BTC.
Примечание: в протоколе Bitcoin заложен механизм халвинга, который уменьшает вознаграждение майнеров в два раза каждые четыре года.
На решение головоломки майнер тратит вычислительные ресурсы. Их количество зависит от сложности сети. Показатель измеряется в хешах (H) и рассчитывается в динамике для обеспечения равномерной скорости генерации блоков. Сложность сети Bitcoin по состоянию на март 2023 года, например, составила 45,5 Терахешей (T).
Сложность сети зависит от хешрейта — совокупной вычислительной мощности всех майнеров. Хешрейт вычисляется в хешах/секунду (H/s). Сложность хеширования пересчитывается каждые 2016 блоков так, чтобы новый блок находился примерно каждые десять минут. Если хешрейт растет, майнеры начинают добывать новые блоки быстрее и сложность хеширования возрастает.
Вероятность добычи блока зависит от соотношения собственной вычислительной мощности к хешрейту сети, который у Биткоина на момент написания статьи составил 360 EH/s.
Чтобы вы не запутались, приводим таблицу единиц измерения хешрейта:
Единица | Обозначение | Эквивалент |
Хеши | H/s | Минимальная единица хешрейта |
Килохеши | KH/s | 1 KH/s = 1 000 H/s |
Мегахеши | MH/s | 1 MH/s = 1 000 KH/s = 1 000 000 H/s |
Гигахеши | GH/s | 1 GH/s = 1000 MH/s = 1 000 000 000 H/s |
Терахеши | TH/s | 1 TH/s = 1000 GH/s = 1 000 000 000 000 H/s |
Петахеши | PH/s | 1 PH/s = 1 000 TH/s = 1 000 000 000 000 000 H/s |
Экзахеши | EH/s | 1 EH/s = 1 000 PH/s = 1 000 000 000 000 000 000 H/s |
Зеттахеши | ZH/s | 1 ZH/s = 1 000 EH/s = 1 000 000 000 000 000 000 000 H/s |
Например, если мощность вашего оборудования равна 1 EH/s, то вероятность добычи блока составит 1 к 360 — всего 0,2%. Из-за роста сложности хеширования доходы майнеров постоянно падают в долгосрочном периоде.
Изначально майнерам было достаточно стандартного процессора (CPU) для добычи криптовалюты. Когда для майнинга начали использовать видеокарты (GPU), хешрейт резко вырос, и процессоры стали практически бесполезными. Позже появились более мощные специальные майнинговые устройства (ASIC), которые вытеснили и видеокарты.
Чтобы повысить шансы на успех, майнеры соединяют несколько устройств в майнинг-ферму, а также объединяются в пулы. Например, крупнейшему пулу Foundry USA принадлежит 35,6% общего хешрейта, AntPool — 20,16%, а BinancePool — 11,52%.
Пользователей, которые добывают криптовалюту поодиночке, называют соло-майнерами. На практике даже высокий процент от суммарного хешрейта сети не гарантирует успех: изредка бывали случаи, когда блок добывали одиночные майнеры со скромным хешрейтом.
Пример работы PoW
Повторим материал: результат работы майнера — найденный хеш блока с правильным минимальным количеством начальных нулей. Пример хеша блока, добытого 13 марта 2023 года под номером 780 623:
00000000000000000004fec2609050adeb99b0c50921d608bf112b9c177e9f44
За этот блок майнер получил фиксированную награду за блок в размере 6.25 BTC и ~0,11 BTC с комиссий. Значение nonce составило 0xffb5ba6 или 268 131 238 в десятичной системе исчисления — столько циклов хеширования совершил майнер, прежде чем найти подходящий уникальный идентификатор.
Зачем блокчейну «доказательство работы»?
Первая задача Proof-of-Work — предотвратить DDoS-атаки на блокчейн-сеть и снизить количество «пыли» — спам-транзакций с незначительными суммами криптовалюты. Distributed Denial of Service (DDoS) или «распределенный отказ в обслуживании» — это вид атаки на информационную систему с целью заставить её прекратить обрабатывать запросы от узлов.
В блокчейне под запросами понимают транзакции с криптовалютой. Из-за того, что перед записью в блокчейн транзакция требует подтверждения, вероятность успешной DDoS-атаки стремится к нулю.
Примечание: в первые дни после запуска сети Bitcoin из-за отсутствия конкуренции среди пользователей транзакции были бесплатными. Никто не платил дополнительную комиссию майнерам за подтверждение. Например, в первой биткоин-транзакции человек или группа лиц под псевдонимом Сатоши Накамото отправил Хэлу Финни 50 BTC без комиссии.
Механизм протокола устроен так, что по мере роста нагрузки на сеть пользователи начинают конкурировать между собой для добавления транзакции в блок.
Вторая функция доказательства работы — защита от двойного расходования или повторной траты одних и тех же средств. Этот феномен стал актуальным с приходом цифровых денег. Вы не можете потратить дважды одну банкноту, но с виртуальными валютами всё иначе: цифровые файлы можно копировать неограниченное число раз.
Proof-of-Work решает эту проблему путем записи полной истории транзакций в блокчейне: все блоки логически связаны друг с другом и упорядочены. Допустим, вы отправляете кому-то 5 BTC. Вот как транзакцию видят майнеры: «пользователь Боб отправляет Кэрол 5 биткоинов, которые ранее получил от Алисы». Если Боб отправил 5 BTC, и майнеры подтвердили транзакцию, ещё раз потратить монеты будет нельзя.
В сети Bitcoin более 10 000 майнеров. Чтобы смухлевать, Бобу придется убедить ту часть узлов, которой принадлежит более 50% хешрейта сети, что он на самом деле не тратил свои BTC. В этом случае большая часть майнеров сможет создать альтернативную цепочку с измененными записями и заменить ею оригинальный блокчейн.
Существует ещё два вида атаки с двойным расходованием на сеть Биткоина:
- Атака типа «гонки» (Race Attack)
Транзакциям в POW-сетях вроде Bitcoin нужно не менее 12 подтверждений, чтобы попасть в блокчейн. Валидация длится несколько минут или часов, а сами транзакции можно отменить. Вот, как работает атака типа «гонки»: Алиса увидела объявление Боба о продаже лицензионной копии Windows за 0.01 BTC и договорилась с ним о сделке.
Покупательница переводит биткоины на кошелек Боба и сообщает ему TX ID — уникальный идентификатор транзакции. По этому идентификатору Боб видит транзакцию в блокчейн-обозревателе и убеждается, что Алиса действительно перевела 0.1 BTC. Боб передает Алисе лицензионный ключ, не дожидаясь подтверждений.
Алиса решила обмануть Боба и отправила еще одну транзакцию с этой же суммой, но на свой адрес и повышенной комиссией. В PoW-сетях нельзя дважды потратить одни и те же активы, поэтому майнеры подтверждают только вторую транзакцию Алисы, а первую отклоняют. Боб не знал этого, поэтому не дождался подтверждения транзакции и был обманут.
Алиса даже может воспользоваться функцией частично подписанной биткоин-транзакции (Partial Signed Bitcoin Transaction или PSBT) и заранее её подготовить, а затем транслировать в сеть
- Атака Финни (Finney Attack)
Для реализации этой атаки злоумышленнику понадобятся большие вычислительные ресурсы: 10—20% от общего хешрейта сети. Разберем атаку на том же примере: представим, что Алиса обладает таким хешрейтом.
Алиса заранее готовит вторую транзакцию и ищет блок, который может её содержать. После нахождения блока Алиса сразу отправляет первую транзакцию для оплаты товара Боба.
В результате появляется развилка с двумя идентичными блоками, и майнеры могут подтвердить блок злоумышленницы. Результат атаки не гарантирован, но Алиса может повысить шансы, подставив несколько блоков. Подменить блоки возможно даже после 1—2 подтверждений.
Примечание: чтобы не оказаться на месте Боба, дожидайтесь не менее 6 подтверждений сети.
История создания PoW
Впервые концепцию, лежащую в основе доказательства работы предложили в 1993 году. Изначально механизм придумали с целью защиты от почтового спама: каждому пользователю требовалось выполнить ресурсоёмкую задачу для отправки письма. Это ограничивало число возможных для отправки писем.
Впервые данную концепцию в 1997 году реализовал британский бизнесмен и криптограф Адам Бек в системе под названием Hashcash, которую позднее решили использовали в протоколе Bitcoin. Сам термин «Proof-of-Work» появился в 1999 году, а в 2004 американский разработчик Хэл Финни предложил использовать похожую технологию – многоразовое доказательство работы (Reusable Proof-of-Work или RPoW) при создании электронной валюты.
В 2008 году Сатоши Накамото представил протокол Биткоин, который использовал механизм Proof-of-Work для нахождения блоков через хеш-функцию SHA-256.
SHA или Secure Hash Algorithm — «безопасный алгоритм хеширования». SHA-256 относится к семейству SHA-2, разработанному Агентством национальной безопасности США. Алгоритм шифрования SHA-256 предназначен для преобразования набора данных в фиксированную строку размером, не превышающим 256 бит.
Спустя некоторое время появились и другие блокчейны на основе Proof-of-Work, но с другими алгоритмами шифрования, например, Ethash и Scrypt.
Блокчейны на Proof-of-Work
- Bitcoin (SHA-256);
- Litecoin (Scrypt);
- Ethereum (Ethash до перехода на Proof-of-Stake);
- Dogecoin (Scrypt);
- Ethereum Classic (Ethash);
- Monero (CryptoNight);
- Zcash (Equihash);
- Kadena (KDA).
Полный список блокчейнов на PoW можете найти на CoinMarketCap, выбрав соответствующий фильтр в разделе «Algorithms».
Преимущества Proof-of-Work
Доказательство работы надежно защищает блокчейн от злоупотребления доверием и проведения атак, делая их невыгодными. Для успешного взлома сети Bitcoin майнерам потребуется оборудование на сотни миллиардов долларов, однако в таком случае курс первой криптовалюты почти мгновенно обрушится. Экономический смысл атаки на главную криптовалюту просто теряется.
Proof-of-Work обеспечивает целостность данных: никто не может изменить или удалить транзакцию из блокчейна, если её не подтвердят майнеры. В сделках отсутствует третья сторона, которая может манипулировать данными в своих интересах.
Недостатки Proof-of-Work
Сложность сети и хешрейт постоянно растут, требуя больше электроэнергии на выполнение одних и тех же задач. Например, майнеры Биткоина потребляют примерно столько же энергии, сколько Таиланд. Непрекращающийся рост хешрейта в перспективе может негативно сказаться на экологии.
У одиночных майнеров шанс успеха на добычу блока достаточно мал. Особенно при хешрейте менее 1 EH/s. Высокая стоимость майнингового оборудования служит главным барьером для входа в эту отрасль предпринимателей.
Майнеры и полные узлы, которые тоже проверяют транзакции и блоки, обязаны хранить всю историю блокчейна. Сегодня размер копии распределенного реестра Bitcoin уже превышает 480 Гб и продолжает увеличиваться, создавая проблему для масштабирования его сети.
Заключение
Proof-of-Work продемонстрировал мировому сообществу возможность создания надежной системы взаимодействия независимых узлов в информационных системах. Несмотря на то, что PoW уже устарел технически и имеет серьёзные недостатки с масштабируемостью, доказательство работы по-прежнему остается одним из самых устойчивых алгоритмов консенсуса.