12 консенсус-протоколів для розподілених систем

У Intellectsoft Blockchain Lab ми працюємо з клієнтами з великої кількості індустрій, будь то фінансовий сектор або рітейл, а також з компаніями, які знаходяться на різному рівні розвитку — від стартапу до міжнародної корпорації. Всі вони працюють у різних оточеннях і доменах. Це обумовлює використання різноманітних підходів і технологій в процесі розробки. У цій статті я розгляну базові, найбільш популярні консенсус-протоколи, які підходять різним оточенням і умов. Блокчейны і «неблокчейны», а також приклади реалізації.

Основою технології розподіленого реєстру (Distributed Ledger Technology, або DLT) є протокол консенсусу. Цікаво, що вже протягом десятиліть математики та інженери розробляють розподілені мережі і протоколи консенсусу, але тільки з появою проекту биткоина ця технологія зробила значний ривок вперед. Цей крок зробив можливим створення додатків абсолютно нового типу. Давайте розглянемо варіанти найпопулярніших консенсус-алгоритмів на сьогодні.

Види консенсус-алгоритмів

Що таке консенсус? Якщо давати широке визначення, консенсус є угодою, яка задовольняє кожну з залучених сторін . Це ключ до демократії і децентралізації в цілому, а також технології розподіленого реєстру зокрема. Подивіться на биткоин: незважаючи на те, що Сатоши Накамото — його таємничий засновник, у нього немає влади над спільнотою. Биткоин, як і блокчейн, повністю прозорий і відкритий, а кожен вузол (node) рівноправна в цій мережі.

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

Короткий огляд

Протокол — це набір правил.

Протоколи допомагають:

Протокол — це сума:

Давайте розглянемо деякі з цих протоколів.

Протоколи «докази роботи»

1. Proof-of-Work (PoW — Доказ роботи)

Принцип: важко знайти рішення, але легко перевірити результат.

Продуктивність: низька.

Середа DLT: публічний блокчейн.

Завершеність: імовірнісна.

Приклад використання: Bitcoin, Ethereum, Litecoin.

Блокчейн биткоина, — мабуть, самий копійований блокчейн. Численні ноди підтверджують транзакції згідно з алгоритмом консенсусу PoW. Щоб додати новий блок, учасник повинен довести, що він виконав певну роботу. Якщо бути точним, він вирішує дуже складну задачу по знаходженню хеша (hash), який відповідає певним правилам. Перший, кому пощастило знайти правильну комбінацію, отримує можливість додати блок в ланцюжок.

В результаті участь у PoW передбачає витрати обчислювальних ресурсів, але перевагою є те, що він може бути реалізований у середовищі, де учасники абсолютно не довіряють один одному. Будь-який бажаючий може приєднатися до мережі, так як вона є блокчейном, не вимагає дозволів (permissionless). І хоча масштабованість однорангових мереж висока, швидкість транзакцій залишається низькою.

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

Протоколи «докази частки»

1. Proof-of-Stake (PoS — Доказ частки)

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

Продуктивність: висока.

Середа DLT: публічний/приватний блокчейн.

Завершеність: імовірнісна.

Приклад використання: NXT, Tezos, незабаром Ethereum.

Основна мережа Ethereum має характеристику повноти по Тьюрингу і працює на протоколі PoW. Однак проект планує перейти на більш ефективний протокол, відомий як Proof-of-Stake (PoS) або «доказ частки».

Технічна особливість PoS — відсутність складних і непотрібних обчислень. Замість того, щоб конкурувати з іншими, учасники мережі дають в заставу свої криптоактивы, такі як ефір (Ether) в Ethereum, і чекають, щоб їх вибрали для створення нового блоку.

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

Як і у випадку з алгоритмом PoW, завершення транзакції в PoS є ймовірнісним. Хоча транзакції відносно швидкі, порівняно з транзакціями в мережі биткоин, для цього все ще потрібні токени. Більш того, скептики вказують на той факт, що валідатори з великими частками будуть частіше вибиратися і, стало бути, будуть отримувати ще більше токенів: багаті стають багатшими.

2. Delegated Proof-of-Stake (DPoS) (Делеговане доказ частки)

Принцип: учасники делегують виробництво нових блоків невеликого і фіксованого числа обраних валідаторів. Висока конкуренція, але дуже вигідна.

Продуктивність: висока.

Середа DLT: публічний/приватний блокчейн.

Завершеність: імовірнісна.

Приклад використання: EOS, BitShares.

Тим часом розробники запропонували альтернативний економічний стимул, названий Delegated Proof-of-Stake (DPoS) (Делеговане доказ частки). Він дозволяє створювати блоки на високій швидкості і обробляти більшу кількість транзакцій в секунду, у порівнянні з іншими алгоритмами консенсусу, за рахунок зменшення кількості валідаторів. Під час голосування власники монет вибирають валідаторів транзакцій, які будуть формувати блоки. Вага кожного голосування визначається сумою активів голосуючого. Власники монет можуть проголосувати за кандидатів в будь-який час. Це визначає високу стійкість мережі: якщо більшість виконавців зазнають невдачі, спільнота відразу ж проголосує за їх заміну.

Генерація нових блоків відбувається кожні 1-2 секунди. Цей протокол не тільки швидше, але і більш справедливий, так як «делегований» валідатор пізніше ділиться токенами зі своїми виборцями. Тим не менш підтвердження готових блоків все ще лежить на плечах всіх інших учасників мережі. Daniel Larimer розробив DPoS в 2014 році. Спочатку він використовував його у своєму проекті BitShares, а пізніше в Steemit і EOS. Larimer припустив, що валідатори DPoS будуть мати сильний стимул залишатися чесними і пропонувати найшвидший і найкращий сервіс. Врешті-решт було б нерозумно зламати мережу, яка вам добре платить. А якщо ви припините робити роботу якісно, завжди є інші учасники, які готові зайняти місце валідатора.

Візантійські Fault Tolerance (BFT) протоколи

Досі ми говорили про публічних блокчейнах, які працюють у публічній середовищі та спрямовані на децентралізацію. Як щодо приватних підприємств на блокчейне? Що зміниться, якщо учасники будуть трохи більше знати один про одного, або навіть будуть відомі з самого старту мережі (наприклад, різні підрозділи однієї і тієї ж компанії)? У таких випадках можна оптимізувати консенсус-алгоритм і досягти набагато більшої пропускної спроможності. Фактично швидкість збільшиться в 10 разів, від сотень до тисяч транзакцій в секунду, що відмінно підходить для корпоративних реалій.

Важливо зазначити, що протоколи, «стійкі до візантійської проблеми» (BFT) — це характеристика, якою наділена чи ні розподілена система. Однак у контексті нашої категоризації BFT позначає новий клас протоколів, який не вимагає токенів для голосування, як в алгоритмі PoW або PoS. Крім того, він дозволяє підписувати блок, навіть якщо 1/3 учасників зазнають невдачі або діють зловмисно. BFT також вирішує проблему збоїв в системі і затримок у комунікації.

1. Delegated Візантійські Fault Tolerance (DBFT) (Делегований протокол завдання візантійських генералів)

Принцип: попередньо вибрані «довірені» учасники підтримують консенсус, навіть якщо 1/3 з них зазнають невдачі або є зловмисними.

Продуктивність: дуже висока.

Середа DLT: публічний/приватний блокчейн.

Завершеність: негайна.

Приклад використання: NEO, TON.

Цей алгоритм відноситься до старої задачі візантійських генералів, заснованої на реальному історичному подію. Використовуючи аналогію, протоколом все одно, якщо «генерал» захворів або саботував колег. Система буде працювати, навіть коли нода переходить в режим офлайн. Таким чином, консенсус протокол BFT здається порятунком від недосконалостей PoW і PoS, але враховуючи тисячі валідаторів, він все одно буде боротися за вирішення проблеми швидкості. Саме тому розробники запропонували делеговану модель BFT — the DBFT.

Зумовлені валідатори в цьому протоколі консенсусу дозволяють значно випередити інші протоколи. Погляньте на Ethereum з 15-20 транзакціями в секунду і NEO з майже 10 000 т/с. Дійсно зручно мати кілька відомих діючих осіб, які перевіряють транзакції перед випуском для інших нсд. У разі, якщо валідатор «зливається», учасники можуть делегувати нову ноду. Варто зазначити, що хоч цей протокол розрахований на публічне оточення, він є більш централізованим.

Примітка:оскільки NEO працює на протоколі PoS DBFT, члени мережі не тільки делегують валідаторів, але також отримують нативний токен GAS, як частину частки їх валідатора.

2. Practical Візантійські Fault Tolerance (PBFT) (Реалізація протоколу завдання візантійських генералів)

Принцип: проста і швидка реалізація алгоритму BFT для приватних мереж.

Продуктивність: висока.

Середа DLT: приватний блокчейн з дозволами.

Завершеність: негайна.

Приклад використання: Hyperledger, Chain.

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

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

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

Можливо, ви також чули про протоколі Sieve , який є вдосконаленою версією PBFT. Його особливість у тому, що він вміє обробляти недетерміновані алгоритми та їх результати, тобто такі, які мають кількашляхів обробки тих же вхідних даних. У BFT світі існують також такі протоколи, як Cross Fault Tolerance (XFT — спрощений PBFT), Paxos і Raft . Останні два особливо стійкі до збоїв системи і називаються Crash Fault Tolerant (CFT) .

3. Federated Візантійські Agreement (FBA) (Федеративна візантійське угода)

Принцип: блоки валидированы, якщо вони підписані конкретним кворумом передплатників.

Продуктивність: висока.

Середа DLT: публічний або приватний блокчейн, не вимагає дозволу.

Завершеність : негайна.

Приклад використання: Stellar, Ripple.

Federated Візантійські Agreement (FBA), або «федеративний візантійське угоду», не потребує дозволу або заздалегідь відомого набору учасників, на відміну від PBFT та інших варіацій BFT. FBA дозволяє кому-небудь приєднатися до мережі. Транзакції в цьому протоколі валидируются фіксованою кількістю учасників, які обираються з тих, хто в той момент знаходяться в мережі.

Примітно, що за правилами FBA існують Gateways (шлюзи) і Market-Makers (мейкери), які забезпечують чесність і ліквідність мережі. Перші виступають в ролі традиційних банків, що володіють фінансовими засобами і створюють їх еквівалент у віртуальних токенах. Другі — ведуть облікові записи з численними шлюзами і відразу в декількох валютах.

Коротке резюме

«Неблокчейны»

Дослідник Сергій Попов провів уявний експеримент : а що, якщо ми зможемо повністю уникнути блоків?

1. Directed Acyclic Graph (DAG) (Спрямований ациклічний граф)

Принцип: немає фіксованих блоків, і вони підтверджені у випадковому порядку у лінійному масштабі.

Продуктивність: висока.

Середа DLT: публічний неблокчейн з дозволами.

Завершеність: імовірнісна.

Приклад використання: IOTA, ByteBall.

Основна проблема з блокчейном — це його синхронна природа. Блокчейны не можуть бути паралельними. Можна змінити розмір або частоту блоків, а також учасників, які їх валидируют, але в підсумку вся історія подій буде заточена в строгу лінійну послідовність. В якості альтернативи, технологія Directed Acyclic Graph (DAG) є асинхронною, що дає конкурентну перевагу одночасних подій.

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

2. HashGraph (ХэшГраф)

Принцип: ноди зв'язуються випадковим чином з використанням протоколу «gossip about gossip» і погоджуються на консенсус після певного раунду комунікації.

Продуктивність: дуже висока.

Середа DLT: приватний неблокчейн з дозволами.

Завершеність: залежить від раунду.

Приклад використання: HashGraph.

Розробники цього протоколу стверджують, що блокчейн є застарілою системою. В якості заміни вони також виступають за концепцію DAG. Проте ключовою відмінністю HashGraph є протокол «gossip about gossip», де нода отримує набір транзакцій з міткою часу, про яких «знає» інша нода. Для роботи такого алгоритму всі учасники мережі мають бути відомими. В результаті синхронізації кожна нода зберігає всю інформацію та історію отримання цієї інформації всіма нодами мережі. Як тільки він бачить у своїй історії, що конкретне повідомлення вже було отримано і перевірено більшістю, немає сумнівів, що воно дійсно.

Однак існують певні обмеження. По-перше, існує мало доказів практичної реалізації у великих масштабах, особливо в порівнянні з робочими блокчейн-проектами. По-друге, технологія HashGraph запатентована і придбання ліцензії коштує грошей. Це також призводить до третього питання: відсутність сильної спільноти (як наприклад ті, що пов'язані з проектами з відкритим вихідним кодом). Така спільнота може перевірити надійність протоколу, його вразливість перед хакерами і проблеми сумісності.

Примітка:нещодавно проект оновився і перейменувався в Hedera Hashgraph. Деякі напрацювання тепер доступні на GitHub .

Інші протоколи консенсусу для конкретних завдань

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

1. Proof-of-Activity (PoA) (Доказ активності)

Принцип: гібрид PoW і PoS.

Продуктивність: низька.

Середа DLT: публічний, не вимагає дозволу блокчейн.

Завершеність: імовірнісна.

Приклад використання: Decred.

Proof-of-Activity (PoA) об'єднує протоколи PoW і PoS, що означає, що учасники можуть як майнить, так і закладати частку для валідації блоків. Отже, протокол PoA забезпечує баланс між майнерами і звичайними учасниками мережі.

2. Proof-of-Location (PoL) (Доказ розташування)

Принцип: використовуються маячки, щоб помітити ноду в синхронізованому стані, а потім відзначити тимчасовим штампом її присутність.

Продуктивність: середня.

Середа DLT: громадський, не вимагає дозволу блокчейн.

Завершеність: негайна.

Приклад використання: FOAM, Platin.

Proof-of-Location (PoL) дозволяє користувачам закріпити за собою конкретну GPS-локацію і таким чином автентифікувати себе в мережі. Цікаво те, що протокол спирається на BFT маячки (beacon), які записують геолокацію і маркери часу в блокчейне, що запобігає збої і шахрайство в системі.

3. Proof-of-Importance (PoI) (Доказ важливості)

Принцип: як і PoS, але з додатковими властивостями, які впливають на ваш рейтинг.

Продуктивність: висока.

Середа DLT: громадський, не вимагає дозволу блокчейн.

Завершеність: імовірнісна.

Приклад використання: NEM.

Алгоритм консенсус Proof-of-Importance (PoI) (доказ важливості)діє майже як PoS, але включає в себе три компоненти:

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

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

4. Proof-of-Elapsed-Time (PoET) (Доказ минулого часу)

Принцип: блоки створюються у довіреної середовищі з рівними періодами.

Продуктивність: середня.

Середа DLT: приватний блокчейн, з дозволами і без них.

Завершеність: імовірнісна.

Приклад використання: Intel.

Виробник чіпів Intel не відставав і розробив власний блокчейн під назвоюIntelLedger . Алгоритм консенсусу IntelLedger називається Proof-of-Elapsed-Time (PoET) або «доказ минулого часу». Сьогодні він присутній в одному з Hyperledger-продуктів.

Ця система схожа на Proof-of-Work, але споживає значно менше електроенергії. Замість того, щоб учасники вирішували криптографічну головоломку, алгоритм працює в середовищі надійного виконання (Trusted Execution Environment, TEE ), такий, як Intel Software Guard Extensions (SGX ). Протокол PoET також гарантує, що блоки створюються випадково, але без будь-якої необхідної роботи.

В якості рішення Intel пропонує гарантоване час очікування відповідно TEE. За інформацією компанії, алгоритм PoET можна масштабувати до тисяч нод, і він буде коректно працювати на будь-якому процесорі Intel, підтримує SGX. Однак хіба блокчейн не повинен допомагати нам уникати третіх сторін, а не покладатися на них?

Висновок

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

Ми розглянули найбільш популярні протоколи, які застосовуються вже в десятках проектів. Є ще багато інших і більш екзотичних протоколів, таких як Cross Fault Tolerance (XFT), Paxos, Sieve, Raft, Proof-of-Stake-Time (PoST) і Proof-of-Brain (PoB), які ми просто не змогли вмістити в цю статтю, але обов'язково розповімо в наступних публікаціях. Якщо ж у вас є питання, залишайте коментарі під статтею.

Опубліковано: 11/10/18 @ 08:56
Розділ Безпека

Рекомендуємо:

Мій звіт про SEO конференції Baltic Digital Days 2018
DOU Ревізор у Львові: «Центр розробки DataArt»
Тайм-менеджмент для IT-фахівців. Як працювати ефективніше і все встигати
Information Security дайджест #11: злом Facebook, лик в Telegram, вразлива macOS Mojave, місяць кибербеза в Україні
C++ дайджест #8: Qt та Unit tests