Представьте себе: вы находитесь в оживленной кухне, где повара должны ждать, пока один закончит нарезку овощей, прежде чем другой начнет запекать картофель. Звучит медленно и неэффективно, верно? Это то, как работает синхронное выполнение в вычислительной технике и блокчейне: одна задача должна быть завершена, прежде чем можно приступить к следующей. Теперь представьте хорошо скоординированную кухню, где каждый повар работает одновременно над разными частями нескольких блюд, подготавливает ингредиенты, готовит и подает. Это асинхронное выполнение - задачи выполняются параллельно, что создает более эффективный и быстрый рабочий процесс.
На перекрестке эволюции блокчейна, синхронная композиционность стала модным словом, потому что она кажется решением для объединения фрагментированных слоев 2-го уровня на сети Ethereum. Этот подход решает проблему ужасного пользовательского опыта и разработки, где даже простой перевод между слоями 2-го уровня может стоить доллар и занимать до 7 дней.Участие Виталикав этих дебатах подчеркивается, что универсальная синхронность не является необходимым условием для решения этих проблем. Мы согласны с тем, что эффективное выполнение перевода не обязательно должно включать в себя синхронность, и существуют реальные затраты на создание и поддержание синхронной инфраструктуры. Мы считаем, что это не двоичный выбор между всем, что синхронно или асинхронно. Оба подхода могут сосуществовать по мере необходимости, с вероятным переходом к последнему.
Parallel Relay-Execution Distributed Architecture (PREDA) — это распределенная, функциональная, ориентированная на область действия и высокоуровневая модель программирования, предназначенная для по своей сути распараллеленных общих смарт-контрактов в распределенных блокчейн-системах с несколькими EVM. С системной точки зрения PREDA делает параллельные EVM декомпонуемыми и асинхронными, обеспечивая полную распараллеливаемость контрактной функции и максимизируя параллелизм набора транзакций. Это гарантирует, что все экземпляры EVM могут быть максимально использованы, достигая оптимальной производительности и масштабируемости.
Прежде чем погрузиться в подробности, давайте сначала проясним, к чему относятся несколько ключевых терминов в этой статье:
Tx1= Транзакция 1
Tx2= Транзакция 2
Мы предполагаем,
Исполнение Tx1 требует изменения состояния A, состояния B, состояния C
Выполнение Tx2 требует изменения состояния А, состояния D, состояния E

Современные методы параллелизации для EVMs¹, такие как те, которые реализованы Sei, Aptos и Sui, пытаются выполнять все шаги в каждой транзакции синхронно. Представьте себе увеличение одной сцены транзакции, в этих системах транзакция выполняется в пределах одной высоты блока, независимо от характера разбросанных зависимостей данных (т.е. доступа к различным частям состояния контракта). В результате, если любой шаг доступных состояний контракта совместно используется или обновляется между двумя транзакциями, они идентифицируются как конфликты чтения-записи или записи-записи и не могут выполняться параллельно, что затрудняет общую пропускную способность и масштабируемость системы. Эта ситуация значительно ухудшается, когда активность внутри блокчейна внезапно возрастает.
PREDA выбирает новый и отличный подход от упомянутых выше систем. Он принимает модель выполнения смарт-контрактов, которая реализует асинхронную декомпозицию, где шаги транзакции декомпозируются в соответствии с их зависимостями от доступа к данным, позволяя выполнять шаги асинхронно. Модель выполнения PREDA обеспечивает большую эффективность и теоретически бесконечную масштабируемость. Мы более подробно рассмотрим, как PREDA достигает этого, и продемонстрируем экспериментальные результаты в поддержку этого утверждения.
Экспериментальные настройки следующие:

Сравнение на рисунке 1 подчеркивает необходимость принятия программной модели PREDA для достижения значительного увеличения пропускной способности. PREDA демонстрирует 3,3-28,2 раза более высокий TPS, чем Aptos для реальных исторических транзакций на сети Ethereum.
Поскольку эти системы реализованы на разных языках (включая Go, Rust и C ++) и разных виртуальных машинах, мы оцениваем масштабируемость разных систем на основе относительного ускорения по сравнению с базовым использованием одного EVM, чтобы исключить влияние различных реализаций системы.

Рисунок 1. Абсолютные значения пропускной способности в ТПС эквивалентного токен-трансферного смарт-контракта, выполненного на Sei, Aptos, Sui и PREDA

Рисунок 2. Относительное увеличение скорости для Aptos, Sui, Sei и PREDA по сравнению с их собственными базовыми значениями
В своей основе PREDA представляет программные области контрактов для разделения состояния контракта на не перекрывающиеся, параллельные части с мелкой гранулярностью, а также асинхронный функциональный ретранслятор для описания переключения потока выполнения между различными EVM.
Чтобы более подробно объяснить эти концепции, в PREDA функция контракта разбивается на несколько упорядоченных шагов, каждый из которых полагается на единственный параллелизуемый кусок состояния без конфликтов. Пользовательский транзакт, инициированный пользователем, сначала направляется в EVM, который хранит состояния адреса пользователя определенным образом, например, с помощью метода отображения адреса пользователя на EVM. Во время выполнения транзакции поток выполнения может переключаться с одного EVM на другой, который содержит нужные состояния контракта, путем выпуска ретрансляционной транзакции. Таким образом, PREDA сохраняет данные неподвижными, перемещая поток выполнения вокруг EVM в соответствии с зависимостями данных.
На каждом EVM пользовательские и ретрансляционные транзакции упорядочиваются и выполняются последовательно, в то время как транзакции на различных EVM выполняются параллельно, поскольку между EVM нет зависимостей данных. Этот механизм избегает повторного выполнения, связанного с конфликтами, в методах оптимистичной параллелизации, и необходимости анализа зависимостей состояния во время выполнения и накладных расходов на блокировку/разблокировку в методах пессимистичной параллелизации. Таким образом, PREDA обеспечивает параллельную и shared-nothing архитектуру для блокчейн-систем, отличающуюся от последовательной и shared-everything архитектуры как в Solidity, так и в Move, что может вызвать значительные накладные расходы на управление параллельностью.

Код на Solidity на рис. (а) содержит состояние контракта (balances), представляющее балансы адресов, и функцию transfer для перевода указанного количества токенов от отправителя транзакции (msg.sender) к получателю (payee).
В реализации PREDA, показанной на рисунке (б), ключевое слово @addressопределяет программируемые области контрактов, где состояния контрактов, принадлежащие переменной контракта (баланс), разделены по адресу и рассеяны и управляются EVM. Ключевое слово relay идентифицирует асинхронный функциональный ретранслятор.
В реализации PREDA есть три части. В части (1) ключевое слово @addressопределяет балансы пользователей, предоставляя детальное, раздельное описание состояния. Переменная области адреса баланса имеет уникальный экземпляр для каждого адреса пользователя. Экземпляры разных пользовательских адресов доступны и поддерживаются разными неперекрывающимися EVM. Функция перевода определена в той же области адреса в части (2), вызывается путем предоставления адреса плательщика в качестве целевой области при инициализации перевода транзакции пользователем. В части (3) для продолжения депозита получателю после успешного вывода инициируется реле с адресом получателя в качестве целевой области, добавляются средства на баланс получателя и выполняются EVM, которые хранят экземпляр баланса адреса получателя.

Порядок выполнения транзакции передачи токена в PREDA
На приведенной выше схеме показана последовательность выполнения транзакции передачи токенов в параллельной системе EVM PREDA. Боб инициирует транзакцию для вызова функции передачи, которая будет направлена в EVM, который удерживает баланс Боба, и вывод выполняется там. После этого выполняется ретрансляционная транзакция и направляется в EVM, который удерживает баланс Алисы, и депозит выполняется. Параллелизация происходит двумя способами:
Обобщенность PREDA выходит за рамки использования@addressразделить состояния контракта по адресу. Это позволяет настраивать типы разделения с помощью ключевых слов, таких как@type, где тип может быть любым элементарным именем типа Solidity, таким как @uint. Кроме того, PREDA поддерживает неподеленные состояния контрактов с @global, обеспечивая, чтобы каждый EVM поддерживал согласованные значения для таких состояний. Эта гибкость в разделении состояний улучшает адаптивность и эффективность модели в разнообразных умных контрактах.
Наши эксперименты показывают, что PREDA значительно превосходит другие методы параллелизации, достигая более высокой пропускной способности и масштабируемости. Предстоящие статьи команды PREDA еще более подробно рассмотрят наши результаты, предлагая более полное сравнение с различными типами смарт-контрактов и глубокий анализ программной модели и языка PREDA. Следите за этими подробными исследованиями.





