В предыдущей теме мы представили Gear , новый предложенный парачейн Polkadot/Kusama с самым передовым механизмом смарт-контрактов, его миссию, ключевые функции и команду.
Теперь давайте углубимся в подробности об основных преимуществах инновационной технологии GEAR.
Резюме
Ключевая технологическая инновация Gear лежит в основе нового подхода к взаимодействию между контрактами. Gear использует коммуникационную модель Actor и виртуальную машину WebAssembly, что обеспечивает параллельную обработку, исключительную скорость и низкие транзакционные издержки.
Доказано, что виртуальная машина WebAssembly работает быстрее любых альтернатив. Использование WebAssembly позволяет смарт-контрактам GEAR компилироваться непосредственно в машинный код и работать с естественной скоростью. Более высокая скорость означает более низкие транзакционные издержки и более высокую эффективность.
Фон
Давайте рассмотрим основные принципы и компоненты, чтобы сформировать основу для лучшего понимания технологии Gear.
Как и любая блокчейн-система, Gear поддерживает распределенное состояние. Код среды выполнения, скомпилированный в WebAssembly, становится частью состояния хранения блокчейна.
Состояние хранения включает следующие компоненты:
- Программы и память (включая код программы и личную память)
- Очередь сообщений (глобальная очередь сообщений сети)
- Счета (сетевые счета и их балансы)
Программы и память
Программный код хранится в виде неизменного BLOB-объекта Wasm. Каждая программа имеет фиксированный объем индивидуальной памяти, который резервируется для программы во время ее инициализации и сохраняется между обработками сообщений (так называемая статическая область). Программа может читать и писать только в пределах своего собственного пространства памяти и не имеет доступа к пространству памяти других программ.
Программы могут выделять больше памяти из пула памяти, предоставляемого экземпляром Gear. Программа может выделить необходимый объем памяти блоками по 64 КБ. Каждый выделенный блок хранится отдельно в серверной части распределенной базы данных, но во время выполнения узел Gear создает непрерывную память времени выполнения и позволяет программам работать в ней без перезагрузки.
Очередь сообщений
Экземпляр Gear содержит глобальную очередь сообщений. Используя узел Gear, пользователи могут отправлять транзакции с одним или несколькими сообщениями в определенную программу (программы). Это заполняет очередь сообщений. Во время построения блока сообщения удаляются из очереди и перенаправляются в конкретную программу.
учетные записи
Для общедоступной сети защита от DOS-атак всегда требует газа/платы за обработку транзакций. Gear предоставляет модуль баланса, который позволяет хранить балансы пользователей и программ и оплачивать комиссию за транзакцию.
Обычный перенос баланса выполняется внутри модуля Substrate Balances. Баланс переводится между пользователями, программой и аккаунтами валидатора.
В дополнение к обычной передаче баланса сеть Gear определяет передачу баланса газа, которая используется для вознаграждения узлов валидатора за их работу и позволяет защитить сеть от DoS-атак.
Переход состояния
Каждая система следует правилам, согласно которым развивается состояние системы. По мере того как сеть обрабатывает новые входные данные, состояние изменяется в соответствии с правилами перехода состояний. Эти входные данные упакованы в атомарные части информации, называемые транзакциями.
Узлы Gear поддерживают и синхронизируют пул транзакций, который содержит все эти новые транзакции. Когда какой-либо узел (валидатор или нет) получает транзакцию, этот узел распространяет транзакцию на все подключенные узлы.
Когда узел валидатора Gear приходит для создания нового блока, некоторые (или все) транзакции из пула объединяются в блок, и сеть подвергается переходу состояния через этот блок. Транзакции, которые не были выполнены в последнем блоке, остаются в пуле до тех пор, пока не будет создан следующий блок.
Gear поддерживает следующие типы транзакций:
- Создать программу (пользователь загружает новые программы — смарт-контракты)
- Отправить сообщение (программа заполняет очередь сообщений)
- Удаление сообщений из очереди (валидаторы (производители блоков) удаляют из очереди несколько сообщений, запуская связанные программы)
- Переводы баланса (движок Gear выполняет переводы баланса пользовательской программы-валидатора)
Actor модель коммуникаций
Одной из основных проблем параллельных систем является контроль параллелизма. Он определяет правильную последовательность обмена данными между различными программами и координирует доступ к общим ресурсам. Потенциальные проблемы включают состояние гонки, взаимоблокировки и нехватку ресурсов.
Параллельные вычислительные системы можно разделить на два класса связи:
Связь с общей памятью — когда параллельные программы взаимодействуют посредством изменения содержимого ячеек общей памяти.
Связь с передачей сообщений — подразумевает параллельную связь программ посредством обмена сообщениями. Параллелизм с передачей сообщений легче понять, чем параллелизм с общей памятью. Обычно это считается более надежной формой параллельного программирования.
Как правило, параллельная передача сообщений имеет лучшие характеристики производительности, чем разделяемая память. Накладные расходы памяти на процесс и накладные расходы на переключение задач ниже в системе передачи сообщений.
Существует множество математических теорий для понимания систем передачи сообщений, включая модель Actor.
Для межпроцессного взаимодействия Gear использует подход модели Actor. Популярность модели Actor возросла, и она использовалась во многих новых языках программирования, часто как первоклассная языковая концепция. Принципы модели Actor заключаются в том, что программы никогда не делятся каким-либо состоянием, а просто обмениваются сообщениями друг с другом.
В то время как в обычной модели Actor порядок сообщений не гарантируется, Gear дает некоторые дополнительные гарантии сохранения порядка сообщений между двумя конкретными программами.
Использование модели Actor позволяет реализовать параллелизм на основе Actor внутри программ (смарт-контрактов). Это может использовать различные языковые конструкции для асинхронного программирования (например, Futures и async/await в Rust).
В отличие от классов, Actor позволяют только одной задаче получить доступ к своему изменяемому состоянию за раз, что делает безопасным взаимодействие кода в нескольких задачах с одним и тем же экземпляром Actor.
Асинхронные функции значительно упрощают управление параллелизмом, но они не учитывают возможности взаимоблокировок или повреждения состояния. Чтобы избежать взаимоблокировок или повреждения состояния, асинхронным функциям следует избегать вызова функций, которые могут заблокировать их поток. Для этого они используют выражение ожидания .
В настоящее время отсутствие нормальной поддержки шаблона async/await в типичном коде смарт-контрактов создает множество проблем для разработчиков смарт-контрактов. На самом деле, добиться лучшего контроля в потоке программы смарт-контрактов более или менее возможно путем добавления функций ручной работы (в смарт-контрактах Solidity). Но проблема со многими функциями в контракте заключается в том, что можно легко запутаться — какую функцию можно вызывать на каком этапе жизни контракта.
Gear изначально предоставляет произвольный синтаксис async/await для любых программ. Это значительно упрощает разработку и тестирование и снижает вероятность ошибок при разработке смарт-контрактов. Gear API также допускает синхронные сообщения, если этого требует логика программы.
Параллелизм памяти
Отдельное изолированное пространство памяти для каждой программы позволяет распараллелить обработку сообщений на узле Gear. Количество параллельных потоков обработки равно количеству ядер ЦП. Каждый поток обрабатывает сообщения, предназначенные для определенного набора программ. Это относится к сообщениям, отправленным из других программ или извне (операции пользователя).
Механизм Gear использует определенное во время выполнения количество потоков, равное количеству ядер ЦП на типичной машине валидатора, делит общее количество целевых программ на количество потоков и создает пул сообщений для каждого потока.
Программы распределяются по отдельным потокам, и каждое сообщение появляется в потоке, где определена его целевая программа. Таким образом, все сообщения, адресованные конкретной программе, появляются в едином потоке обработки.
В каждом цикле целевая программа может иметь более одного сообщения, и один поток обрабатывает сообщения для множества программ. Результатом обработки сообщений является набор новых сообщений из каждого потока, который добавляется в очередь сообщений, после чего цикл повторяется. Результирующие сообщения, сгенерированные во время обработки сообщения, обычно отправляются на другой адрес (возврат к источнику или следующей программе).
Виртуальная машина WebAssembly
Gear использует WebAssembly (или Wasm) под капотом. Любая программа Gear имеет формат WebAssembly. WebAssembly — это формат кода для развертывания программ. В контексте Gear любой смарт-контракт является программой WebAssembly.
WebAssembly имеет следующие преимущества:
- Исключительная родная скорость. Поскольку он переводит программный код в фактические аппаратные инструкции. Более высокая скорость означает более низкие транзакционные издержки и более высокую эффективность.
- Портативный. Он может работать на любом реальном оборудовании.
- Безопасно. Надлежащим образом проверенная программа WebAssembly не может покинуть песочницу (гарантируется спецификацией).
WebAssembly — глобальная промышленная технология, замечательная по многим причинам:
- Он был разработан и реализован в сотрудничестве со всеми основными конкурентами в своей области.
- Он был разработан и выпущен вместе с полной математической, проверенной на машине формализацией.
Посетите GitHub Gear и будьте в курсе последних событий.