В программировании масштабируемость относится к способности приложения, сети, алгоритма, протокола или системы развиваться в соответствии с растущей нагрузкой, чтобы штатно выполнять более широкий круг функций и обслуживать нарастающее число пользователей. В централизованных вычислительных системах производительность можно повысить двумя способами: обновить программное обеспечение оборудования, чтобы оно более эффективно выполняло увеличивающийся спектр задач, либо добавить вычислительные мощности (серверы). Под масштабируемостью блокчейна чаще всего имеется в виду способность обрабатывать большее количество транзакций в секунду, так называемый, TPS (transactions per second). Растущая нагрузка на сеть эфира сильно увеличивает стоимость транзакций. Проблема заключается в том, что сетевые комиссии, которые рассчитываются в единицах газа, – динамические. В периоды всплесков нагрузки на сеть валидаторы могут выбирать и обрабатывать те транзакции (крипто транзакции), которые предлагают больше газа, тем самым усиливая конкуренцию и дальнейшее увеличение комиссии сети. Это является одним из основных препятствий для разворачивания на сети эфира все большего количества приложений и, соответственно, роста числа пользователей. В своей последней статье Виталик Бутерин обозначил проблему “трех переходов” (Three transitions). Автор подчеркивает, что без решения трех вызовов, одним из которых как раз является масштабируемость, эфир не только не сможет привлечь больше пользователей, но ускоренными темпами начнет терять существующих. Анимация ниже иллюстрирует, как отправители конкурируют за включение транзакции в блок путем увеличения сетевой комиссии. У Everscale уникальная архитектура гетерогенного блокчейна с горизонтальным масштабированием (о таких сложных конструкциях мы подробнее расскажем в другой статье), в которой все является смарт-контрактом. Взаимодействие между смарт контрактами осуществляется с помощью сообщений. Даже ваш криптовалютный кошелек на базе Everscale является смарт-контрактом. Проще говоря, смарт-контракт это объект с такими атрибутами как адрес, код, баланс и прочими данными. Помимо хранения данных смарт-контракт может исполнять инструкции, получаемые от других смарт-контрактов. Обмен инструкциями между смарт-контрактами происходит путем передачи сообщений. Получение сообщения и последующее успешное выполнения кода инструкции TVM (Threaded Virtual Machine) может приводить к следующим изменениям в смарт-контракте или шарде: Перезаписывание данных в смарт-контракте (инструкций, балансов и других данных); Отправка смарт-контрактом исходящего сообщения для создания другого смарт-контракта; Отправка смарт-контрактом множества исходящих сообщений. Взаимодействие смарт-контрактов: Отправка сообщения смарт-контрактом генерирует транзакцию. Выполнение инструкций одним смарт-контрактом осуществляется последовательно для обеспечения упорядоченности сообщений, генерируемых одним смарт-контрактом. С помощью маршрутизации сообщения направляются из исходящих очередей в соответствующие входящие очереди, что дает возможность доставлять все сообщения одно за другим. Сами же транзакции отправляются в Мастерчейн. Блоки, содержащие информацию о транзакциях, образовывают цепочку. Чтобы достичь консенсуса относительно состояния, нодам, обрабатывающим транзакции, необходимо периодически согласовывать состояние смарт-контракта.  Блок может содержать информацию о нескольких транзакциях благодаря процессу под названием упаковка транзакций. Следует отметить, что упаковка не может нарушить логическую последовательность транзакций и включить в блок мастерчейна транзакцию раньше чем произойдет включение в блок ее родительской транзакции.  Кроме того, в блоке с транзакциями содержится вся информация о взаимодействии смарт-контрактов, транзакции которых были включены в блок. Другими словами, в блок также записываются входящие и исходящие сообщения, обработанные каждым шардом внутри одного воркчейна. В случае нарастания активности в сети шард можно легко разделить. Представим ситуацию: у нас есть один шард, обрабатывающий сообщения некоторого количества аккаунтов (смарт-контрактов). В какой-то момент (начался новый бычий цикл) резко возрастает потребность в обработке большего количества транзакций в секунду (TPS) или, другими словами, смарт-контракты начинают обмениваться увеличенным количеством сообщений за единицу времени. Пул смарт-контрактов, находящихся под обработкой одного шарда, может быть разделен на два шарда. В таком случае на каждый шард будет приходится вдвое меньше смарт-контрактов, и оба множества смарт-контрактов будут обрабатываться на индивидуальном подмножестве нод. В зависимости от конфигурации количество шардов внутри одного воркчейна может достигать 256. На практике, это означает, что сеть способна бесперебойно обрабатывать миллионы транзакций в секунду, не оказывая никакого влияния на стоимость сетевой комиссии.  Разделение шардов: Разделение шарда невозможно, если он обрабатывает сообщения только одного смарт-контракта. Если нагрузка на часть шардов уменьшается, они, напротив, объединяются в один шард, отвечающий за обработку всех сообщений из смарт-контрактов, ранее обрабатываемых несколькими шардами. Неравномерное распределение нагрузки: Слияние шардов возможно только в том случае, когда в воркчейне существует более одного шарда – сообщения от смарт-контрактов обрабатываются не единственным шардом. В Everscale совокупность всех шардов с обслуживаемыми ими аккаунтами, взаимодействующими в соответствии с установленными правилами, называется воркчейном (workchain). Архитектура блокчейна позволяет создавать множество воркчейнов. Каждый воркчейн, при необходимости, может иметь свою собственную внутреннюю монету, виртуальную машину (например EVM для эфировского приложения) или комиссионную политику. Они могут работать одновременно и взаимодействовать с помощью кросс-воркчейн коммуникации, отправляя сообщения по цепочке. Основная рабочая цепочка обрабатывает обычные пользовательские транзакции. При большом количестве пользовательских транзакций (высокая сетевая активность) рабочая цепочка может быть разделена на шарды (как это было продемонстрировано выше). Каждый шард, в свою очередь, назначается случайной подгруппе валидаторов из глобальной сети валидаторов. Подгруппы отбираются на относительно короткий период времени (раунд). Соответственно, за выполнение транзакций в одном шарде всегда отвечает одна из подгрупп. В то же время данная подгруппа постоянно загружает блоки из всех других шардов своего воркчейна. Архитектурная особенность Everscale требует чтобы ноды достигали консенсуса относительно состояния. Именно здесь в игру вступает мастерчейн, так как его блоки содержат последние хэши блоков остальных шардов сети. Каждые две-три секунды каждый шард отправляет в мастерчейн, так называемые, доказательства выпуска блоков. Таким образом определяется состояние всех шардов сети с помощью одного лишь блока мастерчейна.Взаимодействие мастерчейна с остальными воркчейнами сети и кросс-воркчейн коммуникация: Архитектура Everscale позволяет создавать до 232 воркчейнов, каждый из которых, в случае необходимости, может разделяться на 256 шардов, что позволяет обрабатывать огромное количество транзакций в периоды повышенной сетевой активности. Благодаря этому любой вариант прикладного применения (платежные системы, логистические решения, социальные сети или даже сервис по доставке еды) может бесперебойно функционировать в отдельном воркчейне. Каждый воркчейн может иметь свою собственную конфигурацию, виртуальную машину, комиссионную политику и внутреннюю валюту.