🏆 Рейтинг ІТ-роботодавців 2018: вже зібрано більше 13 000 анкет. Оціни свою компанію!
×Закрыть

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 будут иметь сильный стимул оставаться честными и предлагать самый быстрый и лучший сервис. В конце концов было бы глупо взломать сеть, которая хорошо вам платит. А если вы прекратите делать работу качественно, всегда есть другие участники, которые готовы занять место валидатора.

Byzantine Fault Tolerance (BFT) протоколы

До сих пор мы говорили о публичных блокчейнах, которые работают в публичной среде и нацелены на децентрализацию. Как насчёт частных предприятий на блокчейне? Что изменится, если участники будут немного больше знать о друг друге, или даже будут известны с самого старта сети (например, разные подразделения одной и той же компании)? В таких случаях можно оптимизировать консенсус-алгоритм и достичь намного большей пропускной способности. Фактически скорость увеличится в 10 раз, от сотен до тысяч транзакций в секунду, что отлично подходит для корпоративных реалий.

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

1. Delegated Byzantine 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 Byzantine 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 Byzantine Agreement (FBA) (Федеративное византийское соглашение)

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

Производительность: высокая.

Среда DLT: публичный или приватный блокчейн, не требующий разрешения.

Завершенность: немедленная.

Пример использования: Stellar, Ripple.

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

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

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

  • Proof-of-Work стал первым и самым надежным протоколом консенсуса для публичных блокчейнов, таких как Bitcoin и Ethereum, однако он энергозатратный.
  • Proof-of-Stake не требует сложных вычислений. Вместо этого, он поощряет пользователей закладывать собственные средства для выполнения эквивалентного количества проверок транзакций и предполагает, что все будут действовать рационально.
  • BFT является упрощение концепции PoS, которая делает её намного быстрее. Однако BFT протоколы практичны только в небольшой и приватной среде.
  • PBFT — это проверенное решение для приватных распределённых систем. Быстрый и надёжный протокол, но очень зависит от пропускной способности.
  • DBFT улучшает BFT, позволяя участникам сети делегировать ответственность на валидаторов. Этот протокол, в отличие от PBFT, может быть использован в публичной среде. Очень быстрый, но более централизованный.
  • Хотя вышеупомянутые варианты BFT являются блокчейнами, требующими разрешения, чтобы быть допущенным к сети, FBA является открытым для участия и часто не требует разрешения.
  • Есть и другие протоколы...

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

Исследователь Сергей Попов провел мысленный эксперимент: а что, если мы сможем полностью избежать блоков?

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 маячки (beacons), которые записывают геолокацию и маркеры времени в блокчейне, что предотвращает сбои и мошенничество в системе.

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), которые мы просто не смогли вместить в эту статью, но обязательно опишем в следующих публикациях. Если же у вас есть вопросы, оставляйте комментарии под статьей.

LinkedIn

6 комментариев

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.

Намагався знайти таку статтю десь рік назад. Тоді були лише якісь фрагменти в різних місцях.

Довольно неплохая статья и охват общего текущего состава консенсусных протоколов на рынке.

Было бы неплохо добавить в следующем выпуске визуализации свойств протоколов. Например, положение протоколов на квадрантах с осями свойств децентрализация-производительность с одновременным подкрашиванием двоичных свойств вроде завершенности. Это могло бы помочь тем кто находится на этапе выбора протокола для конкретных условий проекта (чтобы менеджерам за 30 секунд объяснять причины конкретного выбора ;)

Отдельно еще хотелось бы сделать уточнение по поводу PBFT консенсуса в Hyperledger (насколько я понял, имеется ввиду Fabric). Единственный рабочий консенсус который есть в текущей версии это не PBFT (хотя он действительно был в версии 0.6). По какой-то причине разработчики взяли в новую архитектуру (начиная с версии 1.0) Apache Kafka а не PBFT как консенсус для Ordering Serivce. Этот консенсус является устойчивым к ошибкам отказа, но не к византийским ошибкам, что означает что любой из узлов, участвующих в Ordering Service Hyperleder Fabric может саботировать работу всей сети, что может идти в разрез с ожиданиями от системы.
Усложняет ситуацию то что эта информация хоть и не скрывается, но и не лежит достаточно близко к поверхности в документации по HF.
Справедливости ради, нужно сказать что изначально в систему закладывали модульность протокола консенсуса и в разработке сейчас уже находятся модули на основе уже byzantine-tolerant консенсусов. Когда они будут готовы, ситуация должна измениться.
Буду признателен, если нужно уточнение к этому замечанию.

Ликбез.

Однако разве блокчейн не должен помогать нам избегать третьих сторон, а не полагаться на них?

Лучше всех третьих сторон избегают трупы. Умри и получи максимум защиты. )))

Что с нами стало? В списке из 12 консенсус-протоколов не нашлось места для старого доброго paxos :( сори, не заметил, надо будет внимательнее перечитать.

Подписаться на комментарии