Доказательство Работы [Proof of Work] Как работает

3 мин на чтение

Представь себе страну, где невозможно найти работу из-за сокращённого производства и банкротства компаний. pow

Чтобы реализовать распределенный одноранговый сервер меток времени, мы используем схему «доказательства работы», подобную системе Hashcash Адама Бека.

Суть заключается в поиске такого значения, чей хеш (например, SHA-256) начинался бы с некоторого числа нулевых битов. Требуется выполнить объем работы, экспоненциально зависящий от числа нулей, но для проверки найденного значения достаточно вычислить лишь один хеш.

В нашем сервере меток времени поиск значения с нужным хешем происходит путем перебора значения итерируемого поля-добавки (nounce) в блоке данных. Как только блок, удовлетворяющий условию, найден, его содержимое нельзя изменить, не выполнив заново всей работы. И если он не является последним в цепочке, эта работа включает в себя и перевычисление всех блоков, следующих за ним.

pow

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

Если более половины вычислительной мощи принадлежит честным узлам, то цепочка честных транзакций будет расти быстрее и опередит любую конкурирующую цепь.

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

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

Сеть

Система работает по следующим правилам:

  1. Новые транзакции рассылаются всем узлам.
  2. Каждый узел объединяет пришедшие транзакции в блок.
  3. Каждый узел пытается подобрать хеш блока, удовлетворяющий текущей сложности.
  4. Как только такой хеш найден, этот блок отправляется в сеть.
  5. Узлы принимают блок, только если все транзакции в нем корректны и не используют уже потраченные средства.
  6. Свое согласие с новыми данными узлы выражают, начиная работу над следующим блоком и используя хеш предыдущего в качестве новых исходных данных.

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

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

Новые транзакции не обязательно должны достигать всех узлов. Если о них будет знать достаточно много узлов, вскоре они попадут в один из блоков.

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

Стимулы

По умолчанию первая транзакция в блоке является специальной, здающей новую монету, которая принадлежит создателю блока.

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

В роли последних в нашем случае выступают процессорное время и электричество.

Другим способом стимулирования может быть комиссия за транзакции.

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

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

Такая форма стимулирования может также способствовать уменьшению случаев мошенничества.

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

Более выгодным для него является вариант «игры по правилам», который обеспечивает получение более половины всех новых денег, чем вариант «саботажа системы» и поддержания своего капитала на постоянном уровне.

Оставайтесь на связи.

Добавляйте мой блог в закладки потому, что здесь самая правдивая и экспертная информация!

Оставить комментарий