Press "Enter" to skip to content

Що таке алгоритм консенсусу Proof-of-Work (PoW) в майнинге кріптовалюти?

Ви напевно чули, що блокчейн забезпечує безпечне зберігання даних. Але за рахунок чого йому це вдається?

У статті «Що таке блокчейн?» ми розібралися, що робить блокчейн децентралізованим, і торкнулися поняття Proof-of-Work (PoW) — доказ роботи. Однак ми не обговорили детально, як працює механізм, які проблеми вирішує і з якими труднощами стикається.

Децентралізація — ключове властивість блокчейна, але вона робить його потенційно вразливим. Коли один учасник мережі хоче завантажити свою копію блокчейна, як іншому користувачу дізнатися, що завантажується «правильний» блокчейн? Якщо в мережі тисячі комп’ютерів, що заважає сотень з них почати бомбардувати нового користувача даними, які вони разом підробили?

В інформатиці це називається завданням візантійських генералів. Це дуже складне питання, але ми все одно спробуємо в ній розібратися.

Якщо ви знайомі з грою у зіпсований телефон, то розумієте, як легко спотворити інформацію при передачі по ланцюжку заради жарту чи бажаючи підставити іншого. Справа в тому, що в цій грі правда і брехня коштують однаково. Але що якщо б за підроблені дані довелося доплачувати?

Алгоритм Proof-of-Work (PoW) дозволяє учасникам блокчейн-мережі знати, чи була запропонована їм інформація створена безкоштовно або її авторам довелося серйозно вкластися в її створення.

Навігація по матеріалу:

  • 1 Чому PoW настільки важливий
  • 2 Аналіз Proof-of-Work: Без коду зовсім нікуди
  • 3 Проблеми Proof-of-Work
    • 3.1 Високе енергоспоживання
    • 3.2 Централізація майнінгу

Чому PoW настільки важливий

PoW використовується в биткоине для вирішення декількох проблем, що стоять перед децентралізованої мережею, в якій немає «начальства». Розглянемо найважливіші з них.

  1. Яка версія історії правильна?

В мережі, де вам потрібно знати, хто має гроші, хто витрачав гроші і хто їх отримував, історія — це все. Раніше вважалося, що учасникам децентралізованої мережі, якої ніхто не керує, неможливо досягти повного консенсусу і погодитися один з одним.

  1. Таймінг мережі

Час в мережі має вирішальне значення, так як биткоин створює нові монети кожні десять хвилин. У традиційній системі ви просто скажете: «Подивися на годинник», але у децентралізованій глобальній системі постає питання, на чиї годинник дивитися.

Уявимо, що новий комп’ютер приєднується до мережі сьогодні. «Старожил» може сказати: «Ей, ось гроші, які я викарбував шість місяців тому, і гроші, які я викарбував ще через десять хвилин». Як новий учасник мережі зможе підтвердити дії, які були здійснені в минулому?

Щоб зрозуміти, як Proof-of-Work справляється з цими двома питаннями, ви спочатку повинні зрозуміти, що це за механізм і як він працює.

Аналіз Proof-of-Work: Без коду зовсім нікуди

Коли Стівен Хокінг писав свій шедевр «Коротка історія часу», колега сказав йому, що кожна наукова формула, яку він включить в книгу, зменшить кількість читачів на 50%. Так що в підсумку Він залишив тільки знамениту Эйнштейновскую E=mc2. Книгу Хокінга в результаті прочитали мільйони людей, багато з яких дуже далекі від фізики.

Оскільки ця стаття спрямована на широку аудиторію, постараємося використовувати в ній як можна менше коду.

Нагадаємо, що хеш-функція надає собою унікальний цифровий відбиток частини даних. Наприклад, унікальний хеш для імені Метт — це довгий фрагмент тексту:

4f31fa50e5bd5ff45684e560fc24aeee527a43739ab611c49c51098a33e2b469

Якщо хтось бачить цей хеш, він не знає, що за ним стоїть, але ми можемо сказати: «Якщо ви надрукуєте текст matt з допомогою комп’ютерної програми, то зможете довести, що ми знаємо, що являє собою цей хеш. Справа в тому, що ваша програма буде генерувати один і той же хеш, отже, ми знаємо, до чого відноситься цей хеш».

Коли майнер створює новий блок для блокчейна, він повинен надати мережі два хеш: один з них — хеш всіх транзакцій в блоці, а інший — хеш, який доводить, що майнер витратив величезну кількість енергії на створення блоку. Ці витрати роблять нерентабельним спотворення даних. Але для цього, якзгадувалося в попередній статті, майнер необхідно працювати в системі, що діє за типом лотереї, де може бути тільки один переможець. Обидві ці завдання вирішуються з допомогою Proof-of-Work.

Скажімо, якщо замість matt хешировать matt0, ми отримаємо такий хеш:

c5163e81b6dff231b46b584384718ffb734da51d51009399b4b5c73aaa55a811

Якщо порівняти його з хешем matt, легко помітити, що хеші абсолютно різні:

 

Hash(matt) =

4f31fa50e5bd5ff45684e560fc24aeee527a43739ab611c49c51098a33e2b469

Hash(matt+0) =

c5163e81b6dff231b46b584384718ffb734da51d51009399b4b5c73aaa55a811

Криптографічні хеш-функції завжди повертають однакове значення для певної частини даних.

Тепер хешируем, наприклад, matt14 і отримаємо:

 

Hash(matt + 14) =

0ec48972291a05f8b137468c709bf798dbd8b84bc113b5352e81d2bb20d43120

Але навіщо це робити? Уявіть, що комп’ютер поставив перед нами завдання: «Дайте мені перше число, доданий в кінці імені Метт, в результаті чого хеш буде починатися з нуля».

З допомогою свого комп’ютера ми починаємо генерувати хеші до першого збігу:

 

Hash(matt + 0) =

c5163e81b6dff231b46b584384718ffb734da51d51009399b4b5c73aaa55a811

Hash(matt + 1) =

4755a40d3769d7614fb31229fedea4d5e247b3ab8cdc223c4b4f5e3cf9910b4c

Hash(matt + 2) =

3f8aad849c3ac625d61ae58929ac1bbf5626592a28dc5368b19b2ef40f514f59

І так далі.

Зрештою, дійшовши до matt14, ми отримали б хеш, який починається з нуля:

0ec48972291a05f8b137468c709bf798dbd8b84bc113b5352e81d2bb20d43120

Наш комп’ютер відповідає текстом matt14 і включає хеш; приймаючий комп’ютер дивиться, чи відповідає отриманий хеш того, який був запитаний.

Це доводить, що наш комп’ютер провів розрахунки, додаючи цифри від 0 до 14, щоб знайти цей хеш. Це ефективно, оскільки наш комп’ютер виконав 15 дій, а приймаючий комп’ютер зміг перевірити це за допомогою однієї дії.

Фактично ми надали докази своєї роботи, тобто виконали доказ роботи.

Комп’ютер здатний створювати мільйони хешів в секунду, 15 операцій наведені тільки для прикладу: на ділі такий доказ роботи не має особливого сенсу. Але уявіть, що група інших комп’ютерів повідомляє наше наступне завдання: «Надайте нам дійсний блок транзакцій, його хеш, а також число, яке призведе до хешу, починається з 15 нулів».

Початкова команда надійде в обробку миттєво:

 

BlockHash = Hash(‘All of the transactions in the current block’)

Після чого наш комп’ютер приступить до обчислень:

 

Hash(BlockHash + 0)

Hash(BlockHash + 1)

Hash(BlockHash + 2)

І так далі.

Щоб знайти хеш з 15 нулями на початку, потрібно багато трильйони спроб. Повільний комп’ютер витратив би на це сотні років, а кілька потужних комп’ютерів впоралися за лічені хвилини.

Ці комп’ютери, очевидно, будуть з’їдати багато електрики. Із-за витрат на електроенергію майнеру невигідно знаходити допустимий хеш для неприпустимого блоку транзакцій. Тобто майнеру нерозумно підтверджувати «неправильний» блок, стверджуючи, що всі транзакції дійсні, і просто переходити до хешированию. Інші комп’ютери в мережі відхилять недійсний блок, і шахтар не отримає свою винагороду.

Одна з речей, яка допомагає підтримувати децентралізацію майнінгу, полягає в тому, що двоє майнер не можуть хешировать однакові блоки. При хешуванні «a + b» не виходить той самий результат, що при хешуванні «b + a. Майнеры отримують транзакції по мережі в різному порядку; із-за цього, а також із-за індивідуальних переваг в питаннях комісії кожен майнер обробляє блок трохи інакше.

Хоча всі блоки, можливо, були підтверджені правильним чином, лише один блок може увійти в блокчейн. Всі майнеры повинні будуть продовжувати хешировать, поки не знайдуть число, яке при додаванні до їх блоку дає результат, який починається з такого числа нулів, яке мережу погодилася прийняти як дійсний показник.

Щоб підтримувати фінансову політику биткоина, мережа повинна гарантувати створення нового блоку раз в десять хвилин. Мережа робить це шляхом коригування складності видобутку кожні два тижні. Тому, якщо блоки виявляються занадто швидко з-за кількості нових майнер, мережу для зниження інфляції збільшує необхідну складність, і майнер доводиться шукати хеші з великою кількістю нулів на початку.

Неможливо заздалегідь дізнатися, яким буде цей хеш, тому майнеры повинні працювати швидко, використовуючи безліч швидких комп’ютерів. Оскільки в цій «грі» присутній елемент випадковості, майнер з самим потужним комп’ютером не завжди виграє. Уявіть це як лотерею, де користувач з найбільшою кількістю квитків має більше шансів на перемогу, але не перемагає кожен раз.

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

Наступного разу, коли ви почуєте в ЗМІ про те, що майнеры заробляють біткоіни, вирішуючи складні математичні завдання, ви будете знати, про що йде мова.

Проблеми Proof-of-Work

Майнінг з алгоритмом Proof-of-Work — не єдиний відомий метод досягнення консенсусу в децентралізованої мережі. Тим не менш, це самий безпечний і найменше схильний до централізації на сьогоднішній день варіант.

Існують і інші системи, такі як Proof-of-Stake: вона спрямована на вирішення деяких проблем, пов’язаних з Proof-of-Work, але в цілому веде до полудецентрализованной (або полуцентрализованной) мережі.

Отже, з Proof-of-Work пов’язані дві проблеми.

Високе енергоспоживання

Хешування від matt до matt+14 займає менше однієї мікросекунди. Проте мережа биткоина складається з мільйонів спеціально розроблених мікрочіпів, хеширующих кожні десять хвилин. Це вимагає багато енергії!

Поточний хешрейт биткоин-мережі становить 20 экзашей в секунду, або, простіше кажучи, мережа створює 20 млрд. хешів в секунду. Звичайний комп’ютер не може видати навіть 1 млрд. хешів в секунду; але якщо б це було можливо, знадобилося б 20 млрд. комп’ютерів, щоб мати такий же хешрейт, як у мережі биткиона.

Биткоин-майнеры використовують спеціальні чіпи, розроблені для хешування. Це захищає мережу від атак ботнетів, при яких хакери захоплюють безліч компьетеров і використовують їх для майнінг. Хакери можуть зробити це, але потужності всіх доступних їм комп’ютерів не вистачить для того, щоб обдурити мережа биткоина. Створені хакерами блоки просто будуть відхилені.

Блокчейн зберігає історію всіх коли-небудь створених блоків, включаючи Proof-of-Work для кожного блоку. Коли новий комп’ютер приєднується до мережі, він завантажує весь блокчейн і перевіряє кожен фрагмент роботи, щоб гарантувати, що все вірно. Хакери можуть відправити користувачеві неправильний блокчейн, але програмне забезпечення користувача підключиться до багатьох комп’ютерів і розгляне саму довгу ланцюжок з найдовшим кумулятивним доказом роботи — і це буде «істинний» блокчейн.

Це те, що ми називаємо термодинамічно безпечним, або захищених законами фізики. Якщо хакери хочуть заплутати мережа, їм необхідно спалювати більше енергії на більш швидких комп’ютерах, ніж самої мережі. Це обійдеться в сотні мільярдів доларів; якби хакери могли володіти такими ресурсами, вони знайшли б більш економічний варіант грати за правилами і заробляти біткоіни.

З-за моделі безпеки биткоина, де мережа захищена споживаної їй енергією, головна криптовалюта розглядається як щось дуже енергоємне. У той час як населення планети прагне зменшити глобальний вуглецевий слід, це забезпечує ЗМІ новинами, здатними сполошити і налякати громадськість.

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

Централізація майнінгу

Межі рентабельності видобутку біткоінів дуже тонкі. Щоб отримати прибуток, вам потрібно мати доступ до дешевої електрики, і його поставки повинні бути надійними. Поки велика частина видобутку биткоина припадає на західні провінції Китаю, де в надлишку виробляється дешева електроенергія. Навпроти, модель Proof-of-Stake не має географічної прив’язки.

Ситуація може загостритися в випадку, якщо монопольний виробник обладнання для майнінг біткоінів вирішить диктувати свої правила, не враховуючи інтереси клієнтів. Це призведе до централізації мережі. Однак, якщо виробник обладнання захоче занадто багато, користувачі мережі можуть домовитися про зміну методу Proof-of-Stake. У такому разі випускається монополістом обладнання в один момент стане непотрібним сміттям.

Теоретично, на прибутковому ринку має бути достатньо конкуренції, але в цій області споживачі воліють купувати тільки те обладнання, яке обіцяє найбільшу прибуток. Деякі покладаються на закон Мура і вірять, що в підсумку жоден шахтар не буде мати переваги над іншим; інші вважають, що лідери на ринку будуть постійно змінювати один одного.

Одне можна сказати напевно: на сьогоднішній день Proof-of-Work забезпечує найвищий рівень безпеки для децентралізованих блокчейн-мереж.


Be First to Comment

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

*

code