Недавнее обновление Arbitrum включает обновление Stylus VM, содержащее несколько улучшений:
Эти улучшения обусловлены интеграцией WASM, известного своими многочисленными преимуществами в облачных средах. Более подробная информация о роли WASM будет представлена в последующих разделах.
Arbitrum внедрил WASM в свою сеть, но это не первая платформа для этого. Polkadot ранее позволял создавать смарт-контракты WASM. Для этого он предлагает два языка: ассемблерный скрипт, похожий на встроенный DSL, и язык, вдохновленный Rust, под названием ink!
Аналогично, Cosmos использует CosmWasm для выполнения смарт-контрактов. Здесь разработчики могут создавать смарт-контракты с использованием Rust.
Прежде чем исследовать сходство блокчейна с WASM, давайте рассмотрим обоснование выбора WASM Cosmos и Polkadot.
Cosmos рекламирует WASM за следующие преимущества:
Среда выполнения WASM от Polkadot демонстрирует такие функции, как:
Polkadot, Cosmos и Arbitrum имеют несколько общих преимуществ, связанных с WASM. Однако у Arbitrum есть отличительные предложения, которые мы обсудим позже, а также особенности Cosmos.
Давайте углубимся в то, что такое WASM и его мотивы.
WebAssembly (WASM) — это двоичный формат инструкций. Это позволяет коду выполняться со скоростью, сравнимой со скоростью собственных приложений, особенно в веб-браузерах. Будучи целью компиляции для таких языков, как C и Rust, он оптимизирован по скорости, эффективности и безопасности. WASM значительно повышает производительность сети и расширяет ее функциональные возможности.
WASM тесно связан с Интернетом, поскольку работает в средах JavaScript, таких как браузеры. В этих средах разработчики имеют полный доступ к API WASM, а также полную поддержку веб-API. Этот элемент управления позволяет разработчикам точно настраивать веб-взаимодействие.
Концепция WASM вращается вокруг идеала написания кода один раз, чтобы запускать его где угодно.
В 2016 году в программах часто вводились новые функции через доменно-ориентированные языки (DSL). Создание DSL включало баланс между обслуживанием, эффективностью и безопасностью. Промышленность искала способ развертывания функций на многочисленных серверах без ущерба для этих аспектов.
Были тщательно изучены различные решения, каждое из которых имело свой набор проблем:
WASM стал решением. Началась разработка компиляторов WASM, а к 2018 году концепция универсальной совместимости кода на различных архитектурах и устройствах была расширена. В отличие от Java, целью было не идти на компромисс с безопасностью.
В 2019 году была представлена компонентная модель, расширяющая возможности модулей WASM для межъязыковой совместимости. Это нововведение позволило, например, создать универсальную библиотеку HTTP, применимую к различным языкам и новаторски решающую сложные проблемы.
WASM может похвастаться множеством впечатляющих функций:
Сообщество WASM активно улучшает интеграцию и производительность различных языков программирования.
Изучение потенциала WASM и его использования в блокчейнах возвращает нас к ограничениям Arbitrum Stylus.
Вот упрощенное описание того, как работает Stylus:
compileProgram
прекомпиляции ArbWasm
байт-код подвергается инструментированию для обеспечения безопасности, измерения газа и компилируется в собственный код, адаптированный для оборудования валидатора. Этот шаг имеет решающее значение для повышения производительности и безопасности.
Казалось бы, дополнительный третий шаг на самом деле жизненно важен. Преобразование кода 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 раз, а скомпилированный размер может быть уменьшен вдвое.
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 используют одни и те же слоты хранения и дерево состояний. 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.