Масштабируемость – самая раскрученная проблема блокчейна. Популярные сети вроде Биткоина и Эфириума не способны с легкостью обрабатывать все запросы своих пользователей из-за чего порой приходится подолгу ждать, когда транзакция будет наконец подтверждена. Чем больше в сети узлов, тем сложнее им всем прийти к согласию относительно чего-либо. Маленькой группе всегда проще согласовать какой-то вопрос чем большой, потому Биткоин и Эфир такие медленные. Чтобы тысячи узлов достигли консенсуса нужно несравнимо больше времени и энергии, чем для консенсуса между двадцатью узлами.
Некоторые проекты для решения вопроса масштабируемости увеличивают размер блока для достижения консенсуса по большему числу транзакций за единицу времени, другие стараются использовать оф-чейн подход, не требующий подтверждения транзакций майнерами. У этих подходов есть право на жизнь, но ни один из них в полной мере не решает заданной проблемы. Для её решения нужно переизобрести архитектуру блокчейна таким образом, чтобы увеличение количества узлов позитивно влияло на скорость прихода к консенсусу. Один из проектов, движущихся в этом направлении – Zilliqa.
Что делает Zilliqa?
Zilliqa представляет вниманию общественности вариацию на тему шардинга. О шардинге много говорили в конце 2017 года, когда стало известно, что Ethereum работает над внедрением этой технологии для решения проблемы масштабируемости. Шардинг давно используется в базах данных. При увеличении объема базы данных одной машине становится труднее обеспечивать высокую скорость считывания и записи информации. Шардинг помогает распределить большой массив информации между несколькими компьютерами для поддержания высокой скорости работы с базой.
Если проецировать это решение на проблему блокчейна, то шардинг поможет равномерно распределить трафик между отдельными группами узлов, шардами. В Zilliqa шард состоит из 600 узлов. Если в сети есть 5 активных шардов, то узлы из одного шарда будут обрабатывать около 20% транзакций от общего количества в сети. Соль в том, что узлы во всех шардах работают параллельно, отвечая за свою часть работы, в отличие от текущей модели, когда все ноды обрабатывают все транзакции последовательно. В результате, увеличение количества узлов и шардов приводит к увеличению пропускной способности за счёт распределения нагрузки на ноды. Все шарды собирают обработанные ими транзакции в микроблоки. Микроблоки, созданные шардами за единицу времени, объединяются в один полный блок, который добавляется в главный блокчейн Zilliqa.
Когда возможности Zilliqa испытывали на тестнете с 1800 узлами (тремя шардами), получилось достичь показателя 1218 тр./сек., а при 3600 узлах (шести шардах) – 2488 тр./сек.
Консенсус в Zilliqa
Zilliqa объединяет в себе два алгоритма консенсуса Proof-of-Work и Byzantine Fault Tolerance. PoW в данном случае не используется для майнинга в классическом понимании. Каждый новый узел сети начинает свою работу с вычисления хеша. За это не полагается никакого вознаграждения, просто таким образом Zilliqa устанавливает «личность» нода, чтобы уберечь сеть от атаки Сивиллы. Так что непосредственно в консенсусе PoW не используется.
После прохождения узлом такой идентификации он причисляется к одному из шардов. Внутри шардов действует Byzantine Fault Tolerance (BFT). Этот алгоритм предусматривает, что 66% нодов шарда должна прийти к согласию относительно наполнения миниблока.
Пока что, Zilliqa не обладает собственным блокчейном, а работает на Ethereum. Ранее переход на мейннет планировался в третьем квартале 2018 года, но запуск перенесли на январь 2019, а смарт контракты совместимые с шардингом должны быть готовы к концу этого года.
Для работы с Zilliqa придется изучать новый, специально созданный язык программирования Scilla. Он позволяет проводить проверку кода смарт контрактов на наличие багов перед их запуском, но является не полным по Тьюрингу.
Zilliqa vs. Ethereum
Сеть Эфириума страдает от проблем с масштабируемостью больше чем какая-либо другая, даже Биткоин напрягают не так сильно. В Ethereum тоже пытаются приспособить шардинг для увеличения пропускной способности. Правда Ethereum и Zilliqa подходят к реализации шардинга по-разному. Рассмотрим в чем заключается разница.
Zilliqa работает над сетевым или транзакционным шардингом. Пропускная способность сети Zilliqa растет линейно с увеличением количества шардов. Грубо говоря, если один шард обрабатывает 100 тр./сек., то десять шардов смогут обрабатывать 1000 тр./сек. Каждый новый шард будет давать дополнительный прирост в 100 тр./сек. Сетевой шардинг относительно прост. Распределять транзакции по разным шардам и проводить верификацию не так уже сложно до тех пока шардам не нужно взаимодействовать между собой. Загвоздка в том, что это необходимо для исполнения смарт контрактов.
Поскольку при разделении всех узлов на шарды какая-то специальная логика неприменима, значит для корректной работы смарт контрактов нодам, разбросанным волей случая по разным шардам, необходимо будет как-то общаться друг с другом. Обеспечить возможность передачи данных между всеми шардами не допустив никаких уязвимостей – одна из самых сложных задач в создании этой архитектуры.
Это все равно что провести границу между США и Канадой посреди Манхеттена. Ни одна пограничная служба не справилась бы с тем потоком людей, желающим пересечь границу. Также и здесь, количество ресурсов, потребляемых в процессе межшардинговой коммуникации было бы настолько велико, что все преимущества самого шардинга были бы нивелированы. Потому Zilliqa решили пока с этим не заморачиваться и воплотить более простую версию шардинга.
Ethereum занимается так называемым шардингом состояний. Состояние – это вся информация, описывающая систему в любой момент времени. Каждая совершенная транзакция изменяет состояние системы. Наличие или отсутствие денег на вашем счету – это состояние. Прошлые транзакции привели счёт в текущее состояние.
Шардинг состояний в отличие от транзакционного шардинга предусматривает полноценные смарт контракты и децентрализованные приложения, а это значит, что все шарды должны быть на одной волне касательно общего состояния системы. В противном случае злоумышленники получат возможность транслировать в сеть ложную информацию через вредоносные шарды.
Проблема в том, что для хранения всей истории транзакций, которая привела систему в текущее состояние нужно несравнимо больше памяти чем, чем для хранения одного лишь текущего состояния. История транзакций, несомненно, очень важна в случае, если кто-то захочет проверить правильность своего баланса, но это происходит не так часто, чтобы обязывать все узлы синхронизировать данные со всех шардов. От такого шардинга не было бы никакой пользы. Ситуацию усугубляет и тот факт, что все ноды разбросаны по миру, а не находятся в одном серверном парке. Это означает, что систему надо оптимизировать таким образом, чтобы количество данных о состояниях системы хранящихся на одном конкретном узле уменьшилось за счёт учащения коммуникации между разными узлами. То есть в нужный момент, один узел просто бы обращался за нужной информацией к другим.
Возможно это звучит немного запутанно. Если говорить проще, то команда Zilliqa (на фото) немного срезает углы, пытаясь поскорее создать более быстрый блокчейн и ради этого приносит в жертву часть важного функционала. Ethereum напротив не прочь потратить больше времени, но решить проблему раз и навсегда без всяких компромиссов.
Вывод
После запуска мейннета Zilliqa в начале 2019 года список платформ для dApps пополнится ещё одним участником. Пока что количество этих самых платформ превышает количество децентрализованных приложений, которыми действительно активно пользуются. По статистике из почти 2000 апок, только 3 имеют больше тысячи посетителей в день, а различных платформ для создания dApps наберется с десяток. Едва ли появление ещё одной кардинально повлияет на рынок. У Zilliqa ещё есть время примелькаться в коммьюнити пока шардинг не появился у Ethereum, но складывается впечатление, что люди больше хотят видеть не новые масштабируемые платформы, а хорошо масштабируемый Эфир.