:RU: Cardano и шардинг

Перевод статьи https://cexplorer.io/article/cardano-and-sharding

image

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

Проблемы для монолитного и шардированного блокчейна

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

Шардированный блокчейн разбивает систему на более мелкие подгруппы, называемые шардами (сегментами). Каждый шард может обрабатывать часть транзакций независимо и параллельно. Ноды разделены между шардами. Если бы в сети было 1000 нод и 10 шардов, то 100 нод было бы выделено каждому шарду в соответствии с определенными правилами.

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

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

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

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

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

Монолитный блокчейн может иметь более простой консенсус и быть более прозрачным. В случае с Cardano это будет не так после обновления до Ouroboros Leios, так как будет 3 версии блоков с разными таймингами. Еще одним преимуществом является более высокая безопасность благодаря более высокой доступности данных. Легче обеспечить устойчивость к атакам с двойным расходованием и повторным атакам. Значительно проще обеспечить безопасность благодаря более высокой доступности данных. Монолитный блокчейн обладает высокой устойчивостью к атакам с двойным расходованием и повторным атакам.

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

Добавим, что Cardano использует консенсус в стиле Накамото, то есть вероятностную финализацию. Таким образом, завершение транзакции происходит медленно по сравнению с сетями с доказуемой финализацией (Ethereum).

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

Накладные расходы на связь между шардами

Давайте теперь посмотрим на шардированный блокчейн с точки зрения активов и приложений. Очевидно, что если на шард приходится только ограниченное количество приложений и ресурсов (в крайнем случае, одно приложение и один тип токена на шард), то удобство использования системы пострадает. Не имеет смысла иметь, например, только монеты ADA в одном шарде, HOSKY во втором шарде и DJED в третьем шарде. Как могла бы функционировать децентрализованная биржа в такой среде? В какой шард вы бы его поместили?

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

Если Алиса хочет отправить токен X из шарда 1 Бобу на шард 2, система должна убедиться, что транзакция действительна, окончательна и согласована на обоих шардах и что Алиса не может дважды потратить токен X на другие шарды. Как вы можете видеть, ноды в одном шарде не в состоянии подтвердить эту транзакцию и объявить ее окончательной (завершенной). Необходимо, чтобы ноды из обоих шардов проверили транзакцию. Также необходимо убедиться, что токен X не расходуется в других шардах. Другие ноды (из других шардов) также должны иметь хотя бы частичную информацию о состоянии токена X. Помните, когда я говорил о глобальном состоянии?

В случае с приложениями все очень похоже. Смарт контракты с перекрестными шардами требуют обмена данными между несколькими шардами и данными (или логикой) из других шардов. Например, если смарт контракт DEX (развернутый на шарде 3) хочет поменять токен X из шарда 1 на токен Y из шарда 2, система должна гарантировать, что смарт контракт может получить доступ и проверить данные и состояние токенов X и Y на их соответствующих шардах и что обмен произойдет атомарно и последовательно во всех шардах.

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

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

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

Финализация транзакции в контексте масштабируемости

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

Финализация влияет на производительность и результативность системы, поскольку уменьшает задержку и накладные расходы, связанные с ожиданием подтверждений или разрешением конфликтов.

Проще говоря, до тех пор, пока транзакция X не станет окончательной, актив, который был передан по транзакции X, не имеет определенного владельца (это может быть первоначальный отправитель или новый получатель). Очевидно, что повторное использование этого актива (с неопределенным владельцем) для другой транзакции Y является “рискованным”, потому что, если предыдущая транзакция X будет отменена, транзакция Y (которую кто-то просто пытается отправить) также должна быть отменена. Проблема может быть сетевая. Блокчейну трудно отменить одну транзакцию, поэтому необходимо было бы отменить весь блок. Это значительно нарушило бы согласованность данных.

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

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

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

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

Как рассчитать пропускную способность системы?

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

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

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

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

Как модель учета и консенсус влияют на масштабируемость?

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

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

Cardano использует модель расширенных UTXO (или просто UTXO/eUTXO), которая позволяет выполнять параллельную обработку транзакций. Транзакции не зависят друг от друга во время проверки. Их порядок в блоке не имеет значения.

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

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

Давайте вернемся к финализации транзакций и блоков. Финализация основана на голосовании (одобрении) транзакций нодами. Как только транзакция одобрена определенным процентом нод в сети, она становится необратимой. Финализация блоков (и, следовательно, транзакций) в сети Cardano в настоящее время происходит медленно, поскольку вес увеличивается с каждым новым блоком, добавляемым в блокчейн. Голосование всего 10% нод сети Cardano (добавление нового блока и, таким образом, одобрение всех предыдущих) может занять до 1 часа.

Вывод

Масштабируемость децентрализованных блокчейнов (L1) - очень сложная тема. Команде и сообществу Cardano следует рассмотреть возможность внедрения шардинга, но это невозможно сделать без ускорения финализации транзакций. Нам нужно дождаться внедрения Ouroboros Leios, и тогда, возможно, будет иметь смысл начать думать о шардинге. Модель учета UTXO подходит для шардинга, поскольку она допускает распараллеливание не только в шардах, но и для обмена данными между шардами. Шардинг - это серьезная технологическая проблема, когда речь идет о поддержании децентрализации, безопасности, надежности и других вещах, таких как справедливость вознаграждений. Если вторые слои не приживутся в качестве текущих усилий по повышению масштабируемости, у нас не будет другого выбора, кроме как увеличивать масштабируемость первых слоев. Ну и в конце концов, есть и другие интересные способы повысить масштабируемость, помимо шардинга.

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