:RU: Как Ouroboros Leios изменит консенсус Cardano

Перевод статьи How Ouroboros Leios will change the Cardano Consensus | Cardanians

Cardano использует PoS консенсус, который на момент написания статьи способен обрабатывать 300 простых транзакций в секунду. Это почти в 50 раз больше, чем консенсус PoW, который использует Bitcoin. Однако для глобальной финансовой системы этого все еще недостаточно. Команда IOG работает над новой версией PoS, которую они назвали Ouroboros Leios.

image

Трилемма блокчейна

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

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

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

Пропускная способность

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

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

На пропускную способность блокчейн сетей влияют два параметра. Это размер блока и время создания блока.

Размер блока определяет максимальный размер блока, который влияет на количество транзакций и скриптов, которые могут в него поместиться. Если размер блока составляет 88 кБ (90.112 B), а простая транзакция имеет размер, скажем, 300 B, в блок может поместиться 300 транзакций.

Время создания блока определяет интервал времени между добавлением новых блоков. В Cardano время создания блока установлено равным 20 секундам. Это означает, что за 1 минуту Cardano может обработать 900 простых транзакций. За 10 минут 9000 транзакций и т.д.

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

Например, это произошло бы, если бы 400 пользователей захотели отправить простую транзакцию в течение 20 секунд, и это повторялось бы в течение часа. 400 транзакций - это больше, чем 300, с которыми Cardano может легко справиться. Каждые 20 секунд из нового блока исключалось бы 100 транзакций, поэтому они должны были бы оставаться в мемпуле.

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

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

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

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

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

По мере увеличения числа нод в сети может увеличиваться количество переходов, через которые должны проходить данные в сети. Поскольку каждая нода проверяет данные перед их отправкой (чтобы избежать отправки невалидных данных по сети), распределение данных замедляется.

Как увеличить пропускную способность

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

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

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

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

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

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

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

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

Индоссанты входа

Cardano делит время на слоты. Продолжительность одного слота составляет одну секунду. Протокол настроен таким образом, что примерно каждые 20 секунд одна случайно выбранная нода становится лидером слота. Лидер слота получает право вставлять транзакции в новый блок и публиковать его. Размер стейка влияет на частоту, с которой нода может стать лидером слота. Выбранный лидер слота также является производителем блоков, если он использует право и создает новый блок.

На рисунке ниже вы можете видеть время, разделенное на слоты. В слотах 20 и 40 выбираются новые лидеры слотов, это ноды, отмеченные 11 и 3. Эти ноды могут создавать новый блок и публиковать его.

1*93aL7TJBvfwXn1xrOvpMVA

В сети есть субъекты (операторы стейк пулов), которым доверяют делегаты, и это можно использовать. В дополнение к производителям блоков будет вторая группа, называемая индоссантами входа. Таким образом, в пределах слота можно случайным образом выбирать не только лидеров слота, но и одного индоссанта входа (теоретически, несколько индоссантов входа).

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

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

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

Блоки и одобренные входы распределяются в сети независимо друг от друга. Каждый блок может содержать от 0 до N одобренных входов.

На рисунке ниже вы можете снова увидеть время, разделенное на слоты. Примерно каждые 20 секунд разыгрывается новый лидер слота. Кроме того, в каждом слоте выбирается индоссант входа, и ему предоставляется право создать новый вход. Таким образом, два выбора проходят параллельно в одно и то же время.

1*LOAh6GajDN5pd_Lmgw2ZdQ

Подтверждение входа возможно только потому, что Cardano использует модель Extended-UTXO. Можно проверять транзакции и скрипты локально, независимо от окружающей среды (нет глобального состояния). Проверка транзакций и выполнение скриптов происходят локально на уровне индоссантов входа, то есть вне основной цепочки, которая остается под контролем лидеров слотов. Ответственность за поиск конфликтов с двойными расходами остается за выбранными лидерами слотов. Однако это становится достаточно легким процессом, который должен полагаться только на обнаружение и разрешение конфликтов в графе UTXO.

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

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

1*tbNhjtqjeyvgGyI8YdRQPQ

Давайте посмотрим, что происходит от момента отправки транзакции до ее помещения в блок.

Когда нода получает новую транзакцию, она проверяет ее. Все валидные транзакции будут вставлены в мемпул. Если нода получает право создать подтвержденный вход в заданном слоте, она будет включать предварительно проверенные транзакции в новый вход. Будет создан пакет транзакций. Вы можете рассматривать это как новый вид блоков. Одобренные входы (блоки) распределяются в одноранговой сети. В дополнение к мемпулу для транзакций будет создан мемпул для одобренных входов. Ноды будут хранить несколько одобренных входов в выделенном мемпуле, чтобы быть готовыми к созданию нового блока в случае, если они станут лидером слота.

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

Как только выбран новый лидер слота, он выбирает одобренные входы из мемпула и проверяет, не произошло ли двойного расходования. Затем он вставляет ссылки на все выбранные одобренные входы в новый блок. Затем новый блок распространяется по сети, и аналогичным образом выполняется проверка другими нодами, как это делается сейчас. Во время распространения нового блока ноды могут удалять использованные одобренные входы из своих мемпулов.

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

1*50N2ajjeygsqG0TYefEPvw

Обратите внимание, что эта концепция делегирует проверку транзакций и выполнение скриптов всем нодам и не обременяет выбранную в качестве лидера слота ноду этой работой. Это позволяет использовать вычислительную мощность нод во время “простоя”, когда все ноды ожидают нового лидера слота.

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

Эта концепция может напоминать решения L2, такие как ZK Rollups и Optimistic Rollups или другие решения, такие как Lightning Network. Однако преимущество заключается в том, что нет второй сети с собственной инфраструктурой. Все будет находиться под контролем текущих операторов стейк пулов в сети Cardano. Пользователи не заметят изменений, за исключением повышения производительности. Нет необходимости использовать мосты или разные адреса, поэтому это не окажет негативного влияния на пользовательский опыт.

Вывод

На момент написания этой статьи все фанаты с нетерпением ждут более подробной информации от команд IOG. Вероятно, самый большой вопрос для нас заключается в том, где и как будут храниться транзакции и скрипты, поскольку блок будет только ссылаться на данные. Поскольку Cardano будет масштабироваться намного лучше, он также будет генерировать больше данных, которые нужно будет где-то хранить. Идеальным решением было бы использование сегментирования, чтобы нодам не приходилось хранить все данные, а только их часть. Давайте посмотрим, как команда IOG решает эту проблему.

Преждевременно утверждать, что блокчейн трилемма - это решенная проблема. Однако Ouroboros Leios станет значительным шагом вперед, поскольку пропускная способность сети не будет ограничиваться параметрами размера блока и времени создания блока. На данный момент неизвестно, насколько высокой будет масштабируемость Cardano, однако более чем вероятно, что мы продвинемся вверх по крайней мере на порядок. Ранее говорилось, что блокчейн - это медленная база данных. Ouroboros Leios опровергает этот аргумент и может переписать историю сетевого консенсуса.

// От переводчика: для получения дополнительных переведенных на русский язык статей о Cardano посетите русскоязычный раздел на форуме Cardano. Видеоролики о Cardano на русском можно найти на YouTube канале нашего замечательного амбасадора Тимура Сахабутдинова, а также на канале Чарльз Хоскинсон на русском. Хотите поговорить или задать вопрос о Cardano по-русски? Приглашаем вас в наше уютное сообщество в Telegram. Оставайтесь на связи, все только начинается!