Производительность Algorand в 2021 году

Автор: Сильвио Микали

Блокчейн Algorand растет. Сегодня в среднем наша сеть обрабатывает 500 000 транзакций в день. Разработкой децентрализованных приложений на Algorand занимаются более 500 компаний, используя преимущества наших уникальных смарт-контрактов выполняющихся на первом уровне блокчейн инфраструктуры и другие функции, которые были добавлены на нашу платформу за последний год. Их приложения в скором времени будут генерировать множество новых транзакций.

Вот почему, продолжая добавлять новые функции в Algorand, мы улучшаем нашу производительность, без ущерба для децентрализации.

Наши показатели эффективности

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

2. Время финализации (подтверждения) блока. Это время, необходимое для того, чтобы новый блок был добавлен в блокчейн.

3. Количество завершенных транзакций в секунду (TPS).

Наши цели на 2021 год

  • Время предложения блока останется 0,5 секунды. (Несмотря на то, что размер нашего блока вырастет с 5000 до 25000 транзакций.)
  • Время финализации блока сократится с 4,5 до 2,5 секунд.
  • Количество завершенных транзакций в секунду вырастет с 1 000 до 46 000 транзакций в секунду. (Благодаря честному подходу к конвейерной обработке блоков.)

Наши принципиальные изменения

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

1. Метрики завершенности и конечная производительность

Какие метрики используются?

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

Обратите внимание на следующее заявление о производительности:

«Блок из 10 тысяч транзакций предлагается каждые 0,5 секунды»

Возникают два основных вопроса:

1. Заявление подразумевает задержку между записью новых блоков в блокчейн в полсекунды?

2. Подразумевается ли в заявлении пропускная способность 20 000 транзакций в секунду (TPS)?

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

Ответ на второй вопрос тоже НЕТ. Сама по себе скорость предложения блока не обеспечивает гарантий такой пропускной способности, потому что игнорирует случай, когда предлагаемый блок B не был финализирован. В этом случае не только транзакции блока B должны будут обработаны снова, но также и блоки B + 1, …, B + k, если k блоков было предложено на добавление в цепочку во время неудачной обработки блока B. Действительно, транзакции этих k блоков зависят от достоверности транзакций B. Таким образом, всякий раз, когда финализация блока B не удается, нужно считать что пропускная способность была 0 транзакций в секунду за все время попытки финализации блока B.

В общем, приведенное выше заявление о производительности основано на очень сомнительной метрике.

Метрика завершенности

Главная цель блокчейна – это обеспечить полную и неизменную последовательность транзакций.

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

Но тогда выбор за вами:

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

Для нас в Algorand завершенность транзакций — это то, что действительно важно и то что мы делаем.

Наша конечная производительность

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

  • Задержка до финализации следующего блока: ~ 2,5 секунды.
  • Окончательная пропускная способность: ~ 46 000 транзакций в секунду.

2. Новая задержка до финализации блока

Блок транзакций в блокчейн сети Algorand — это большой объект. Сегодня в него могут быть включены до 5000 транзакций, а в 2021 году размер блока увеличится и сможет вместить до 25 000 транзакций. На распространение большого объекта среди валидаторов нужно время.

Чтобы ускорить процесс распространения и подтверждения нового блока B, мы разработали более компактный способ его описания.

Сетевое кодирование

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

Во время же создания блока B мы можем и фактически придумываем более короткие «названия» для свои транзакции, пользуясь тем фактом, что транзакции распространяются по всей сети одновременно и в любой момент времени любые из двух валидаторов сети видят одни и теже транзакции, плюс-минус лишь некоторые из них.

Например, для того чтобы сообщить что в предлагаемый мною блок включены транзакции T, вместо того чтобы передавать их параметры полностью, я вполне могу отправить вам только 32-байтовый хеш H(T). Это потому, что фактически не существует двух разных транзакций с одинаковым хеш значением.

Чтобы улучшить нашу производительность, мы дополнительно уменьшим эти 32 байта до нескольких бит, за счет очень специфического способа работы сети Algorand.

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

В Algorand валидирующие ноды не обмениваются сообщениями напрямую друг с другом через peer-2-peer соединения. Они могут отправлять сообщения только транслирующей ноде. Эти транслирующие ноды передают сообщения друг другу и отправляют их тем нодам, с которыми они связаны. Одно из ключевых свойств нашего протокола это “защищенность от разделения цепочки блоков” благодаря которому архитектура Algorand предоставляет значительную эффективность не требуя дополнительного уровня доверия.

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

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

Давайте теперь посмотрим, как валидатор может более эффективно сообщать о предлагаемом блоке его транслирующей ноде. Предположим, что я создал новый блок B в который добавил 20000 транзакций. Для его распространения я должен отправить его каждой из выбранных мною транслирующих нод, скажем R1, …, R5. При этом мне не следует отправлять полную информацию по этим 20000 транзакций входящим в блок самой транслирующей ноде, потому что она ранее мне их сама прислала. Действительно, каждая из моих транслирующих нод индивидуально отправляла мне большинство из этих 20000 транзакций. Скажем даже все из них плюс-минус 100 других транзакций, которые я получил от других моих четырех транслирующих нод.

Давайте посмотрим, как Algorand позволяет мне избежать бесполезного дублирования при передачи данных. Сосредоточимся на одной транслирующей ноде, допустим R2 и предположим что она отправила мне 19925 транзакций, которые я добавил в блок B . Тогда и я и R2, знаем порядок, в котором она передала мне эти транзакции. Таким образом, вместо отправки R2 хеш-значения H (T) для каждой транзакции T из B, я могу отправить R2 только позицию T в её собственном списке передачи: например, транзакция под номером 16233 в собственном списке R2. Даже если бы в этом списке был триллион транзакций, потребуется всего 30 битов (а не 32 байта!), чтобы указать на транзакцию T в списке R2. Для оставшихся 75 транзакций, которые R2 пока(!) не передала мне, я отправляю полную информацию о транзакции.

Используя это кодирование, я могу передать информацию о блоке B в R2 наиболее компактным способом. То же самое я проделываю для моих других транслирующих нод. Обратите внимание, что содержание сообщений которыми я описываю блок B для каждой из нод R1, …, R5 будет отличаться, потому что каждая из них прислала мне немного другой список транзакций и совсем в другом порядке. Но это не важно. Каждая из них получит правильное описание блока B и распространит его на все остальные транслирующие ноды, а каждая из них, в свою очередь, будет отправлять B на все подключенные к ней валидирующие ноды. Для каждого такого обмена данными фактически используется аналогичное кодирование.

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

Здесь возникает вполне естественный вопрос:

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

Ответ — НЕТ. Например, в сети Bitcoin враждебные транслирующие ноды могут провести атаку “двойное расходование”. Это может произойти даже тогда, когда все майнеры полностью честны!

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

3. Наша новая итоговая пропускная способность

Если бы мы ждали финализации нового блока, прежде чем предлагать и подтверждать следующий, то пропускная способность Algorand составила бы 10000 завершенных транзакций в секунду. Это соответствует подтверждению блока из 25000 транзакций каждые 2,5 секунды. Довольно хорошо. Но у нас получается лучше благодаря конвейерной обработке, мощному инструменту для генерации блоков, конечно же при правильном его использовании!

Конвейер мечты

Этап предложения блока в Algorand займет 0,5 секунды. На этом этапе в 99% случаев успешно будет определен следующий блок для добавления, который будет подтвержден и записан в блокчейн в течении двух дополнительных секунд. Вот почему наша окончательная задержка составляет в среднем 2,5 секунды.

Соответственно, соблазнительно заявить о пропускной способности в 50 000 завершенных транзакций в секунду, как показано ниже.

Валидирующие ноды начинают предлагать новый блок, как только они видят последний предложенный блок B, так что еще четыре блока могут быть предложены во время финализации B. Поскольку каждый блок состоит из 25000 транзакций, всего будет 5 блоков, а значит, 125000 транзакции каждые 2,5 секунды. То есть 50 000 завершенных транзакций в секунду.

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

Реальный конвейер

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

  • Вопрос 1: Как долго длится этап предложения блока?
  • Вопрос 2: Как часто этап предложения блока оказывается неудачным?
  • Вопрос 3: Сколько времени нужно для восстановления после неудачного предложения блока?

Правдивые ответы на эти вопросы необходимы, чтобы установить правильную производительность конвейерной обработки блоков в конкретной цепочке блоков. В случае с Algorand ответы таковы:

  • Ответ 1: 0,5 секунды.
  • Ответ 2: Около 1%.
  • Ответ 3: Около 4,5 секунд.

Учитывая эти ответы, с размером блока в 25000 транзакций Algorand планирует достичь показателей около 46000 завершенных транзакций в секунду в 2021 году.

4. Наше мнение

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

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

При обсуждении показателей максимальной эффективности важно объяснять различия в переменных, выборе дизайна и компромиссах протоколов, чтобы не заслонять фактические ограничения и полезность самой базовой технологии. И важно понять конечное влияние различий в производительности на достижение успешных долгосрочных результатов блокчейн решения.

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

Мы продолжим создавать и совершенствовать наши технологии в этом направлении!

Источник: Algorand