paint-brush
WASM от Blockchain ❤️: Решение главык@glaze
1,445 чтения
1,445 чтения

WASM от Blockchain ❤️: Решение главы

к Glaze8m2023/11/06
Read on Terminal Reader

Слишком долго; Читать

Arbitrum недавно запустил Stylus, свою виртуальную машину смарт-контрактов на базе WebAssembly (WASM). Это дает ряд преимуществ, таких как расширенная языковая поддержка, снижение затрат, настраиваемые прекомпиляторы и совместимость с EVM. WASM набирает популярность благодаря своей производительности, компактному размеру, портативности и языковой поддержке. Другие сети, такие как Polkadot и Cosmos, также используют его. Однако в настоящее время Stylus имеет некоторые ограничения. Он поддерживает только C++ и Rust, без поддержки JavaScript/Python. SDK все еще находятся в стадии разработки. Пока нет локальной тестовой сети или проверки контракта. Выбор правильного языка имеет решающее значение: eDSL на JavaScript/Python может привлечь больше разработчиков. Тесты производительности показывают, что WASM может быть в 4–8 раз быстрее, чем EVM. Но существует ограничение на размер контракта в 128 КБ. Совместимость EVM-WASM весьма обширна. Пользовательские прекомпиляции еще не реализованы. Повторный вход не является обязательным, но по умолчанию отключен. В целом, WASM обеспечивает повышение производительности Arbitrum по сравнению с zk-rollups. Но EVM остается основополагающим, а WASM на данный момент является дополнением «EVM+».
featured image - WASM от Blockchain ❤️: Решение главы
Glaze HackerNoon profile picture
0-item

Недавнее обновление Arbitrum включает обновление Stylus VM, содержащее несколько улучшений:


  • Расширенная языковая поддержка
  • Снижение затрат и использования памяти.
  • Настраиваемые прекомпиляторы
  • Совместимость с ЭВМ


Эти улучшения обусловлены интеграцией WASM, известного своими многочисленными преимуществами в облачных средах. Более подробная информация о роли WASM будет представлена в последующих разделах.

Пионеры

Arbitrum внедрил WASM в свою сеть, но это не первая платформа для этого. Polkadot ранее позволял создавать смарт-контракты WASM. Для этого он предлагает два языка: ассемблерный скрипт, похожий на встроенный DSL, и язык, вдохновленный Rust, под названием ink!


Аналогично, Cosmos использует CosmWasm для выполнения смарт-контрактов. Здесь разработчики могут создавать смарт-контракты с использованием Rust.


Прежде чем исследовать сходство блокчейна с WASM, давайте рассмотрим обоснование выбора WASM Cosmos и Polkadot.


Cosmos рекламирует WASM за следующие преимущества:

  • Совместимость с библиотекой Rust
  • Широкое сообщество разработчиков
  • Повышенная безопасность, включая предотвращение повторных атак.
  • Упрощенные процедуры тестирования
  • Превосходную производительность


Среда выполнения WASM от Polkadot демонстрирует такие функции, как:

  • Исключительная производительность
  • Совместимость EVM
  • Независимость от аппаратной и программной платформы
  • Компактный размер
  • Поддержка Rust и ассемблерных скриптов, аналогичных Typescript.


Polkadot, Cosmos и Arbitrum имеют несколько общих преимуществ, связанных с WASM. Однако у Arbitrum есть отличительные предложения, которые мы обсудим позже, а также особенности Cosmos.

ВАСМ

Давайте углубимся в то, что такое WASM и его мотивы.

Что такое ВАСМ?

WebAssembly (WASM) — это двоичный формат инструкций. Это позволяет коду выполняться со скоростью, сравнимой со скоростью собственных приложений, особенно в веб-браузерах. Будучи целью компиляции для таких языков, как C и Rust, он оптимизирован по скорости, эффективности и безопасности. WASM значительно повышает производительность сети и расширяет ее функциональные возможности.


WASM тесно связан с Интернетом, поскольку работает в средах JavaScript, таких как браузеры. В этих средах разработчики имеют полный доступ к API WASM, а также полную поддержку веб-API. Этот элемент управления позволяет разработчикам точно настраивать веб-взаимодействие.

Эволюция WASM

Концепция WASM вращается вокруг идеала написания кода один раз, чтобы запускать его где угодно.


В 2016 году в программах часто вводились новые функции через доменно-ориентированные языки (DSL). Создание DSL включало баланс между обслуживанием, эффективностью и безопасностью. Промышленность искала способ развертывания функций на многочисленных серверах без ущерба для этих аспектов.


Были тщательно изучены различные решения, каждое из которых имело свой набор проблем:

  • Системные виртуальные машины имели проблемы с накладными расходами, отсутствием прозрачности кода в целях безопасности и были слишком абстрактными для высокой производительности.
  • Контейнерам также не хватало прозрачности кода, они были такими же абстрактными и имели значительные накладные расходы.
  • Виртуальные машины на уровне языка требовали частых модификаций в целях безопасности, вызывали накладные расходы со стороны встроенных виртуальных машин, таких как V8, и медленно внедряли новые языки для соответствия моделям безопасности.
  • Архитектуру набора команд (ISA) было сложно модифицировать для эффективной изолированной программной среды, и ей не хватало зрелых реализаций.


WASM стал решением. Началась разработка компиляторов WASM, а к 2018 году концепция универсальной совместимости кода на различных архитектурах и устройствах была расширена. В отличие от Java, целью было не идти на компромисс с безопасностью.


В 2019 году была представлена компонентная модель, расширяющая возможности модулей WASM для межъязыковой совместимости. Это нововведение позволило, например, создать универсальную библиотеку HTTP, применимую к различным языкам и новаторски решающую сложные проблемы.

ВАСМ сегодня

WASM может похвастаться множеством впечатляющих функций:


  • Высокая производительность : код WASM работает эффективно и быстро.
  • Компактный размер : двоичный формат WASM занимает мало места.
  • Переносимость : позволяет одному и тому же байт-коду работать в любой среде выполнения, совместимой с WASM.
  • Языковая поддержка : WASM поддерживает широкий спектр языков, от C/C++ и Rust до Go и Swift и других.
  • Совместимость с движком JavaScript : WASM прекрасно работает с движками JS.
  • Песочница : надежная песочница по умолчанию ограничивает доступ к памяти и процессору для предотвращения внешнего вмешательства.
  • Быстрый запуск : модули WASM обычно загружаются за миллисекунды.


Сообщество WASM активно улучшает интеграцию и производительность различных языков программирования.

Стилус

Изучение потенциала WASM и его использования в блокчейнах возвращает нас к ограничениям Arbitrum Stylus.

Функционирование стилуса

Вот упрощенное описание того, как работает Stylus:


  1. Разработчики используют стандартные компиляторы WASM, такие как Clang или Rustc, для компиляции своих смарт-контрактов в WASM.
  2. Полученный байт-код WASM затем загружается в цепочку Arbitrum в сжатом состоянии.
  3. С помощью метода compileProgram прекомпиляции ArbWasm байт-код подвергается инструментированию для обеспечения безопасности, измерения газа и компилируется в собственный код, адаптированный для оборудования валидатора. Этот шаг имеет решающее значение для повышения производительности и безопасности.
  4. При вызове контракт запускается в среде выполнения WASM, например Wasmer, которая значительно быстрее и более экономична, чем EVM.


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


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

Опасения по поводу стилуса

Языковая поддержка

Stylus расширил сообщество разработчиков Arbitrum, включив в него C++ и Rust. Однако ему еще предстоит охватить наиболее распространенные сегодня сообщества разработчиков. Он облегчает выполнение смарт-контрактов в браузерах, но пока не поддерживает JavaScript и Python.


Пользователи языка программирования


На ранних стадиях находятся проекты, пытающиеся соединить Python и JavaScript с WASM. Но они не готовы к широкому внедрению из-за сложностей со сборкой мусора и проблем с производительностью.

Языковая совместимость

Stylus в настоящее время поддерживает C/C++ и Rust через свои SDK. Эти SDK совместимы с инструментами соответствующих языков. Они также позволяют интегрировать сторонние библиотеки, такие как собственная криптография. Основным ограничением является стоимость газа, связанного с этими библиотеками.


Rust SDK находится на начальной стадии, и ему не хватает некоторых функций. C SDK не поддерживает экспорт функций с помощью ABI. Кроме того, ни один SDK не поддерживает использование модификаторов.


На данный момент у Stylus нет локальной тестовой среды. Разработчикам рекомендуется проводить тесты в рамках SDK. Тестовая сеть — единственный вариант запуска смарт-контрактов на Stylus. Однако тестовая сеть еще не реализовала проверку смарт-контрактов.


Продолжается работа по переносу различных токенов ERC и платформ, таких как Uniswap V2, на Stylus.

Выбор языка

Выбор между доменно-ориентированным языком (DSL), встроенным DSL (eDSL) или общим языком программирования является сложной задачей. Разработчики должны взвесить преимущества работы «близко к железу» для контроля с простотой использования, предлагаемой абстракциями более высокого уровня, которые могут ограничивать гибкость.


Создание нового DSL требует времени для разработки его цепочек инструментов и экосистемы. eDSL, как подмножество общего языка программирования, поддерживает ту же семантику и синтаксис. Это позволяет разработчикам использовать существующие языки и инструменты, которые могут упростить процесс обучения. eDSL также обеспечивает лучшую совместимость с кодом общего назначения. Например, eDSL для JavaScript или Python будет иметь стратегическое значение для привлечения крупнейших сообществ разработчиков.


Общие языки программирования требуют использования SDK для разработки. Это добавляет несколько слоев инструментов, увеличивает многословие и снижает выразительность. Это также может привести к длительным вызовам API и сложным операциям с объектами.


Выбор правильного языка и создание eDSL может стать идеальным компромиссом. Он мог бы привлечь разработчиков из популярных сообществ и предложить удобные инструменты. Текущие данные показывают, что сообщество Ethereum остается крупнейшим среди разработчиков криптовалют. Однако такие экосистемы, как Polkadot, Cosmos и Solana, использующие Rust для смарт-контрактов, также привлекают значительное количество разработчиков и переживают быстрый рост. Штатные разработчики



Всего разработчиков


Производительность

WASM может значительно повысить скорость выполнения и уменьшить размер пакета. Хотя Stylus не был развернут в основной сети, полезным справочным материалом могут служить тесты других сетей.


Эти тесты показывают, что время выполнения может быть сокращено в 4–8 раз, а скомпилированный размер может быть уменьшен вдвое.

Время выполнения WASM


Размер контракта WASM


Stylus накладывает ограничение на размер контракта, который составляет около 128 КБ в несжатом виде. Это ограничение затрудняет миграцию очень больших смарт-контрактов с таких языков, как Solidity, на Stylus. Это ограничение очевидно в кодовой базе Stylus:


 // arbos/programs/programs.go const MaxWasmSize = 128 * 1024 // Maximum WASM size allowed const initialFreePages = 2 // Number of initial free pages const initialPageGas = 1000 // Gas cost for an initial page const initialPageRamp = 620674314 // Adjusts for a target size cost const initialPageLimit = 128 // Maximum number of pages allowed const initialInkPrice = 10000 // Ink price per EVM gas const initialCallScalar = 8 // Scalar for call cost


Важно отметить, что WASM требует некоторых затрат на запуск и завершение работы. Для очень легких операций EVM может оказаться более экономичным, чем WASM.

Совместимость EVM-WASM

EVM и WASM используют одни и те же слоты хранения и дерево состояний. Stylus обеспечивает совместимость с EVM за счет реализации API-интерфейсов EVM в WASM. Эта интеграция использует широко распространенный режим ввода-вывода хоста в WASM. Ниже приведен полный список API-интерфейсов EVM, поддерживаемых в WASM, что указывает на комплексную поддержку совместимости.


 read_args write_result storage_load_bytes32 storage_store_bytes32 call_contract delegate_call_contract static_call_contract do_call create1 create2 do_create read_return_data return_data_size emit_log account_balance account_codehash evm_gas_left evm_ink_left block_basefee block_coinbase block_gas_limit block_number block_timestamp chainid contract_address msg_reentrant msg_sender msg_value native_keccak256 tx_gas_price tx_ink_price tx_prigin memoery_grow console_log_text console_log console_tee

Пользовательские прекомпиляции

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


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

Реентерабельность

В отличие от модели акторов CosmWasm, которая не поддерживает повторный вход, Rust SDK Stylus включает повторный вход в качестве дополнительной функции. По умолчанию эта функция отключена. Разработчики имеют возможность включить реентерабельность в своих контрактах.


Активация повторного входа влияет на API, поскольку разработчики должны обеспечивать очистку кэша хранилища во время вызовов и учитывать другие меры безопасности. Эта мера предосторожности необходима для предотвращения потенциальных уязвимостей, связанных с повторными вызовами.


Реентерабельность

Заключение

WASM набирает популярность в облачной сфере, и многие блокчейны используют его для выполнения смарт-контрактов. Хотя Arbitrum не является пионером в этой интеграции, ее внедрение может оказаться весьма эффективным. WASM не способен полностью изменить ландшафт блокчейна или заменить EVM. Тем не менее, это может повысить преимущество Arbitrum перед появляющимися zk-rollups. Термин «EVM+» от Arbitrum удачно описывает этот сценарий. EVM закладывает основу для платформ смарт-контрактов, а WASM может обеспечить дополнительный прирост производительности Arbitrum.