
Subscribe to Fuel Labs — Russian Blog

Subscribe to Fuel Labs — Russian Blog
Share Dialog
Share Dialog


<100 subscribers
<100 subscribers
Отказ от ответственности
Эта статья была переведена с ее оригинального языка для вашего удобства. Несмотря на стремление к точности, могут быть небольшие ошибки или различия в толковании. Для наиболее точного и достоверного представления, пожалуйста, обратитесь к оригинальной публикации, доступной по ссылке. Мы ценим ваше понимание и рекомендуем обращаться к оригинальному источнику за подробной информацией.
По мере усложнения блокчейн-приложений возникает острая необходимость в безопасных языках для смарт-контрактов. Многие платформы сегодня полагаются на языки программирования и виртуальные машины (VM), которые изначально не были спроектированы с учетом уникальных ограничений и требований блокчейн-исполнения.
Не секрет, что архитектурные решения, принятые в 2014 году для Solidity и EVM, сейчас демонстрируют явные признаки устаревания. Среди них — уязвимости, которые делают написание безопасных смарт-контрактов в Ethereum особенно сложной задачей. Некоторые могут утверждать, что эти проблемы можно решить с помощью улучшенных инструментов, но на самом деле проблема лежит глубже. Результат? Медленная производительность, уязвимости безопасности и головная боль для разработчиков.
Представляем Sway — высокопроизводительный и безопасный по своей архитектуре язык, созданный специально для следующего поколения блокчейн-приложений. Мы разработали Sway, чтобы решить эти проблемы с нуля. Он выявляет уязвимости на этапе компиляции, управляет нативными активами без дополнительных затрат и использует синтаксис, вдохновленный Rust, который удобен для написания кода.
Но не верьте нам на слово. Давайте рассмотрим простой пример:
Допустим, вы пишете метод для смарт-контракта.
Вам нужно высвободить определенный объект из другого контракта, когда выполняется какое-то условие. В Sway это может выглядеть следующим образом:

Выглядит вполне разумно, но этот код содержит уязвимость, которая может оказаться весьма опасной. Обновление хранилища происходит только после передачи владения, а это значит, что при определенных условиях возможна атака повторного входа (reentrancy attack).
Но так как это Sway, компилятор сам предупредит вас об этом:

Вы могли также заметить аннотацию #[storage(read, write)]. В Sway код не может обращаться к критически важным частям контракта без явного разрешения, что значительно снижает вероятность появления потенциально катастрофических ошибок из-за подобных мелких недочетов.
Мы позаимствовали эту философию у Rust, а также его подход к Zero Cost Abstractions (абстракциям без накладных расходов). В сочетании с оптимизациями, специфичными для блокчейна, и удобными встроенными инструментами, такими как forc и Sway Language Server Protocol (LSP), это делает Sway безопасным и удобным языком для написания смарт-контрактов нового поколения.
Что такое Sway?
Sway — это специализированный язык, вдохновленный Rust и созданный специально для виртуальной машины Fuel (FuelVM). Он выполняет три ключевые функции:
Разработка смарт-контрактов — основа ончейн-логики, основанная на привычной Ethereum-подобной модели развертывания программ, которые управляют состоянием.
Создание предикатов — инновационная функция, позволяющая разработчикам писать безстатическую валидационную логику, которая может обеспечивать сложные условия без развертывания и хранения кода в блокчейне. Это похоже на скрипты Bitcoin, но с гораздо большей мощностью и гибкостью.
Разработка скриптов — возможность тестирования и выполнения сложных действий вне сети без затрат на развертывание.
Sway особенно выделяется, когда вам нужно создать смарт-контракт с нуля и вывести его в продакшн, но при этом вы хотите избежать дорогостоящих ошибок, не ограничивая себя чрезмерно жесткими фреймворками. Его главное преимущество — это скорость перехода от нуля к продуктивной работе. Благодаря глубокой интеграции с инструментами, вам не придется тратить много времени на настройку — больше времени останется на непосредственную разработку. В целом, процесс работы в Sway значительно гладче и удобнее, чем традиционный цикл разработки смарт-контрактов.
В основе Sway лежат безопасность, производительность и удобство для разработчиков. Его сила заключается в том, чего он не делает. В отличие от языков общего назначения, которые пытаются подойти всем и для всего, Sway сосредоточен на уникальной вычислительной среде блокчейна:
Программы выполняются мимолетно, но их хранение постоянно и чрезвычайно дорого, что требует тщательного рассмотрения управления состоянием.
Стоимость газа и размер программы часто важнее, чем чистая скорость выполнения, поэтому акцент сделан на эффективности байткода.
Каждая транзакция конкурирует за ограниченное место в блоке, поэтому необходим точный контроль и минимальные накладные расходы на всех уровнях.
Неизменяемая природа реестра требует идеального кода с первого дня, без права на ошибки.
Узкоспециализированная природа Sway позволяет ему напрямую решать эти проблемы с помощью специализированных функций и оптимизаций. Компилятор автоматически выявляет типичные уязвимости, такие как атаки повторного входа (re-entrancy) и непредсказуемые шаблоны использования памяти. Кроме того, в Sway встроены оптимизации для типичных Web3-операций, которые в других языках пришлось бы реализовывать вручную (например, чеканка токенов, создание ордеров, подписание транзакций). Некоторые могут утверждать, что языки общего назначения тоже справляются с этими задачами, но избыточные накладные расходы делают их использование на масштабном уровне нецелесообразным.
Конечная цель очевидна: мы хотим сделать Sway стандартом для ончейн-программирования, предоставляя современные возможности языка, не жертвуя контролем пользователя или производительностью.
От Solidity к Sway
Solidity хорошо послужил экосистеме, будучи основным языком для Ethereum и EVM-цепочек. Но после многолетних развертываний в продакшене стали очевидны определенные проблемные места. Solidity имеет менее выразительную систему типов, которая выявляет ошибки слишком поздно (или вообще никогда), а также подвержен атакам повторного входа из-за архитектуры EVM. Solidity также имеет некоторые ранние дизайнерские решения, которые усложняют современные стандарты токенов и безопасные переводы. Отсутствие нативных типов активов означает, что каждое взаимодействие с токенами должно проходить через сложные вызовы смарт-контрактов и системы одобрения.
Вся экосистема ищет что-то лучшее, что-то с более сильными гарантиями. В Fuel Labs мы поняли, что масштабируемость — это не просто более быстрая виртуальная машина, хотя это важно, а наличие языка, который действительно создан для будущего смарт-контрактов, а не для их прошлого. Именно поэтому мы создали Sway: подход с чистого листа, сосредоточенный на пропускной способности и безопасности.
Rust показал нам, как язык может революционизировать целую отрасль, поставив безопасность в приоритет без ущерба для производительности, благодаря таким концепциям, как владение, строгая безопасность работы с памятью и абстракции без накладных расходов. Хотя Rust обладает огромной мощностью, он также несет в себе сложности — такие как проверка заимствований (borrow checker) и модель времени выполнения, которые не подходят для типичной ончейн-логики, где ресурсы сильно ограничены, а затраты на выполнение должны оставаться минимальными.
Sway заимствует у Rust привычный синтаксис и удобные для разработчиков функции, включая стиль с фигурными скобками, строгую статическую типизацию и полиморфизм на основе трейтов. Язык также сохраняет ориентированный на безопасность подход Rust, реализуя проверки на этапе компиляции, которые устраняют целые классы ошибок во время выполнения.
Однако Sway исключает или модифицирует функции, которые не имеют смысла для блокчейна. В результате получается язык, который легче, чем Rust, но сохраняет его сильные стороны, что делает его идеальным для написания смарт-контрактов. Sway не пытается быть универсальным решением для всех — он создан специально для ончейн-сценариев использования, и этот фокус явно проявляется в том, как он справляется с типичными шаблонами смарт-контрактов.
Предикаты
Предикаты в Fuel решают критически важную проблему в архитектуре блокчейна: необходимость сложной валидации транзакций без увеличения постоянного состояния. В то время как традиционные смарт-контракты хранят свою логику и данные состояния в модели учетных записей, требуя от полных нод поддерживать эту информацию бесконечно и ограничивая возможность параллельного выполнения из-за необходимости синхронизации, предикаты работают как безстатические смарт-контракты, способные выполнять сложную валидацию автономно.
Предикаты представляют собой монотонные временные условия расходования, которые могут проверять сложные требования — такие как мульти-сиг условия, временные блокировки или математические проверки — при этом работая скорее как контролер, проверяющий документы, чем как библиотекарь, хранящий записи. Как только предикат валидирует транзакцию, возвращая true или false, в состоянии блокчейна ничего не сохраняется, что позволяет разработчикам реализовывать сложную условную логику без увеличения нагрузки на хранилище полных нод.
Система типов и Безопасность
Уязвимости смарт-контрактов обошлись индустрии в миллиарды, и многие проблемы возникают из-за ошибок, связанных с типами, и атак повторного входа, которые сложно обнаружить до развертывания.
Sway использует мощную систему типов, включающую алгебраические типы данных (ADTs) для четкого представления состояний и событий, специфичных для доменной области, полиморфизм на основе трейтов, аналогичный трейтам в Rust, позволяющий определять общие поведения для различных типов, и дженерики, позволяющие писать многократно используемый код без ущерба для безопасности типов. Кроме того, компилятор не просто проверяет ваш код, он понимает специфичные для блокчейна шаблоны, такие как CEI (Checks-Effects-Interactions), и выявляет риски повторного входа до их появления в основной сети. Этот подход строже, чем используемые в Solidity паттерны, добавляя уровень безопасности прямо из коробки.
Нативные Активы и Простота в Переводах Токенов
В Solidity передача токенов обычно включает вызов контракта для изменения балансов, проверку возвращаемых значений или условий отката (revert) и верификацию разрешений. Это работает, но нельзя назвать такой процесс элегантным. Мы выбрали другой подход. В Fuel VM активы являются нативными, а не абстракциями смарт-контрактов. Это означает, что токены можно передавать одной строкой кода, без необходимости в центральном контракте. Такой подход значительно проще и устраняет многие распространенные ошибки.
Компилятор и Инструменты Разработки
Мы считаем, что хороший код требует хороших инструментов, но разработка смарт-контрактов часто требует использования множества разрозненных инструментов, что делает процесс фрагментированным и подверженным ошибкам.
Именно поэтому мы создали forc (Fuel Orchestrator), мощный CLI-инструмент, который инициализирует новые проекты на Sway, управляет зависимостями, компилирует код и развертывает его в сети Fuel.
Sway Language Server Protocol (LSP) предлагает автодополнение кода, встроенную диагностику и автоматическое форматирование в популярных редакторах, таких как VS Code. Для full-stack разработчиков Fuel Indexer, Rust SDK и TypeScript SDK являются дополнительными инструментами для офчейн-индексации и взаимодействия с контрактами Sway в бэкенде или фронтенде вашего приложения.
Однако, когда дело касается инструментов разработки, остаются очевидные пробелы, которые необходимо заполнить. Хотя Explorer и отладочные инструменты еще не на том уровне, на котором мы хотим их видеть, мы добились значительного прогресса. Команда недавно выпустила крупные обновления для визуализации транзакций в Explorer и функций взаимодействия с контрактами, а также ведется активная работа над реализацией Compiler Explorer. Видимость выполнения, которая раньше была значительной проблемой, улучшается с каждым релизом — мы добавили более информативные сообщения об ошибках, стек-трейсы и инструменты для анализа памяти. Еще многое предстоит сделать, но улучшения инструментов разработки внедряются стабильно, а опыт работы с ними значительно улучшается с каждым обновлением.
Экосистема Библиотек и Поддерживающая Инфраструктура
Разработчикам смарт-контрактов часто приходится изобретать базовые компоненты заново, тратя время на реализацию стандартного функционала вместо того, чтобы сосредоточиться на логике своего приложения.
Sway движется в направлении создания полноценной инфраструктуры библиотек. Если взглянуть на приоритеты экосистемы, очевидно, что есть существенные пробелы, которые необходимо заполнить. Основные математические операции по-прежнему остаются проблемой — нужны надежные, хорошо протестированные библиотеки для работы с bignum, фиксированной и плавающей запятой, а также для базовых операций со знаковыми числами. Обработка ошибок вызывает особое разочарование. Да, экосистема библиотек Sway пока мала по сравнению с Solidity, но вот что важно: как только появится полноценный пакетный менеджер, она сможет стать гораздо удобнее для разработчиков, чем существующие решения.
Что касается создания более целостной среды разработки, у нас уже есть некоторые инструменты статического анализа, разработанные сторонними командами, например, Sway Analyzer. Возможно, имеет смысл начать активно продвигать их, вместо того чтобы изобретать велосипед. При правильном использовании эти инструменты могут значительно укрепить инфраструктуру разработки Sway.
Solidity стал фактическим стандартом для Ethereum и получил столь широкое распространение и поддержку экосистемы, что, вероятно, будет активно использоваться в будущем. Однако маловероятно, что он сильно изменится, а его инструменты для разработчиков, фреймворки и вспомогательное программное обеспечение остаются разрозненными между множеством различных проектов и команд, без единого стандарта или целостной интеграции. Например, для разработки может понадобиться Hardhat, для проверки безопасности — Slither, для контрактов — OpenZeppelin, а также множество других инструментов, каждый из которых поддерживается отдельно и не всегда идеально работают в связке с остальными. Такое фрагментированное состояние, скорее всего, сохранится в будущем, а не будет объединено в единую экосистему.
Тем временем Rust показал индустрии, как современный язык может обеспечивать одновременно безопасность и высокую производительность в масштабах. Однако по мере развития блокчейн-технологий возникают новые вызовы, которые эти передовые языки изначально не были предназначены решать.
В то же время появились новые языки для смарт-контрактов с разными подходами. Одни делают упор на простоту, но теряют в выразительности, другие предлагают мощные возможности, но требуют сложного обучения. Многие остаются жестко привязанными к конкретным блокчейн-реализациям, что ограничивает их универсальность. Sway ориентирован на более широкое внедрение и меньше зависит от архитектуры конкретного блокчейна. Некоторые языки со временем разделились на несколько несовместимых диалектов, создавая дополнительные сложности для разработчиков.
Что Делает Sway Уникальным
У Sway тоже есть свои проблемы (в частности, язык пока гораздо менее стабилен по сравнению с альтернативами), но его инструментарий действительно является одним из лучших на данный момент, а сам язык потенциально очень выразителен. Существует хорошая ниша, которую еще предстоит занять языку с качественным набором доступных библиотек, удобным менеджером пакетов и достаточным количеством поведения, определяемого типами и проверяемого на этапе компиляции, что позволяет с высокой степенью уверенности сказать, что ваш контракт не выйдет из строя, если он компилируется без ошибок.
Sway по-новому отходит от традиционных подходов в пяти ключевых аспектах. Во-первых, он использует трейты (мощные шаблоны, похожие на классы), чтобы сделать код более переиспользуемым и типобезопасным. Во-вторых, в отличие от языков, которые навязывают определенные шаблоны, Sway позволяет полностью контролировать, как ваш код ведет себя в блокчейне. В-третьих, как уже упоминалось, он обеспечивает безопасность за счет мощного статического анализа, который выявляет распространенные ошибки на этапе компиляции, предотвращая потенциальные уязвимости, способные привести к миллионным потерям. В-четвертых, он поддерживает как контракты, так и предикаты в одном языке (представьте, что можно писать как смарт-контракты, так и условия разблокировки с помощью одних и тех же инструментов). И, наконец, его инструменты просто работают. От поддержки в редакторах до развертывания — все интегрировано и готово к использованию.

Начало Работы с Sway
Самый простой способ установить Sway и связанные с ним инструменты Fuel — использовать fuelup, который управляет версиями инструментов Fuel (включая Sway, forc, Fuel indexer и другие).

Затем подтвердите установку, выполнив команду:

Это должно вывести список установленных компонентов. Вы также можете настроить свою среду для использования Sway Language Server в VSCode или любом другом редакторе, поддерживающем LSP, для автодополнения, подсветки синтаксиса и проверки ошибок.
Для тех, кто хочет обойтись без установки, команда Fuel Labs и сообщество работают над Sway Playground — браузерной средой, где можно экспериментировать с кодом Sway без необходимости локальной установки. Просто откройте Playground, выберите шаблон (например, контракт токена) и изменяйте его по своему усмотрению.
Официальный репозиторий Sway Applications на GitHub содержит примеры токен-контрактов, демонстрирующих как базовую, так и продвинутую функциональность, аналогичную ERC-20, для сети Fuel, реализации NFT, показывающие эффективное управление коллекционными активами, а также базовые элементы DeFi, включая кредитные протоколы, примеры DEX и многое другое.
В сообществе также регулярно появляются обучающие материалы, предлагающие пошаговые инструкции по созданию вашего первого dApp на Sway. От написания простых скриптов для обмена токенов до организации взаимодействия между несколькими контрактами — эти руководства значительно упрощают процесс обучения.
Тестирование, Аудит и Развертывание
Sway предлагает встроенные возможности для тестирования. Разработчики могут писать тесты непосредственно в файлах своего проекта:

Команда forc test компилирует и выполняет эти тесты в локальной среде Fuel VM, помогая выявить ошибки в логике до развертывания кода в продакшн.
После того как ваш контракт протестирован и готов, вы можете использовать Rust SDK, который предоставляет типобезопасные взаимодействия с контрактами прямо из вашего бэкенда, используя привязки типов для обеспечения корректных вызовов. Или TypeScript SDK, который значительно упрощает интеграцию с фронтендом — идеально подходит для React, Vue и других JavaScript-фреймворков.
Развертывание выполняется просто с помощью forc deploy, которая отправляет скомпилированный контракт на ноду сети Fuel. Достаточно указать свою ноду, задать лимиты газа — и контракт будет в сети.
Одним из преимуществ Sway является снижение вероятности появления ошибок благодаря мощному статическому анализу и проверкам на этапе компиляции. Однако профессиональные аудиты по-прежнему играют важную роль, особенно для крупных DeFi-проектов. Несколько компаний по кибербезопасности и независимые аудиторские группы уже начинают изучать кодовую базу Sway, чтобы предоставить специализированные инструменты и услуги. Конечная цель — создать среду, где аудит станет одновременно проще и глубже, благодаря особенностям архитектуры языка Sway.
Вклад в развитие Sway
Sway полностью с открытым исходным кодом. Его развитие зависит от обратной связи и вкладов сообщества. Вы можете:
Открыть Вопрос: сообщить об ошибках, запросить новые функции или предложить улучшения языка.
Отправить Pull Request: помочь исправить ошибки или внедрить новые функции в компиляторе, сервере языка или документации.
Присоединиться к сообществу: участвовать в обсуждениях с командой Fuel Labs и другими разработчиками в Discord или на форумах, чтобы быть в курсе обновлений и делиться идеями.
Также, как в Ethereum существуют стандарты ERC, сообщество Fuel разрабатывает стандарты SRC (Sway Request for Comments) для определения общих интерфейсов (например, операций с токенами, структуры NFT или мульти-сиг протоколов). Активное участие в разработке и внедрении этих стандартов обеспечивает совместимость проектов на Sway и помогает формировать лучшие практики для экосистемы.
Вывод
Sway представляет собой подход нового поколения к написанию безопасных и производительных смарт-контрактов. Черпая вдохновение в Rust, учитывая специфические ограничения блокчейна и предлагая интегрированные инструменты, Sway снижает порог входа для разработчиков, одновременно повышая уровень безопасности. Он обходит исторические ограничения языков на основе EVM, таких как Solidity, а также сложность языков общего назначения, таких как Rust.
По мере изучения Sway вы обнаружите язык, специально созданный для упрощения наиболее распространенных ончейн-задач — от перевода токенов до сложной DeFi-логики — при этом обеспечивающий надежную защиту от уязвимостей. Независимо от того, являетесь ли вы опытным разработчиком на Solidity, ищущим более высокую пропускную способность и лучшую безопасность, или энтузиастом Rust, заинтересованным в новом поколении модульных блокчейнов, Sway заслуживает вашего внимания.
В более широком смысле Sway находится в авангарде движения по переосмыслению подходов к созданию децентрализованных приложений. Объединяя понятность, безопасность и производительность, он помогает приблизить будущее, в котором разработка смарт-контрактов станет одновременно доступной и мощной. Мы приглашаем вас попробовать Sway, присоединиться к растущему сообществу и внести свой вклад в развитие смарт-контрактов на Fuel и за его пределами.
Чтобы глубже изучить философию и архитектуру Fuel, а также понять, что отличает нас от других блокчейн-решений, ознакомьтесь с Fuel Book. Подробные инструкции по началу работы в экосистеме Fuel можно найти в нашей документации.
Отказ от ответственности
Эта статья была переведена с ее оригинального языка для вашего удобства. Несмотря на стремление к точности, могут быть небольшие ошибки или различия в толковании. Для наиболее точного и достоверного представления, пожалуйста, обратитесь к оригинальной публикации, доступной по ссылке. Мы ценим ваше понимание и рекомендуем обращаться к оригинальному источнику за подробной информацией.
По мере усложнения блокчейн-приложений возникает острая необходимость в безопасных языках для смарт-контрактов. Многие платформы сегодня полагаются на языки программирования и виртуальные машины (VM), которые изначально не были спроектированы с учетом уникальных ограничений и требований блокчейн-исполнения.
Не секрет, что архитектурные решения, принятые в 2014 году для Solidity и EVM, сейчас демонстрируют явные признаки устаревания. Среди них — уязвимости, которые делают написание безопасных смарт-контрактов в Ethereum особенно сложной задачей. Некоторые могут утверждать, что эти проблемы можно решить с помощью улучшенных инструментов, но на самом деле проблема лежит глубже. Результат? Медленная производительность, уязвимости безопасности и головная боль для разработчиков.
Представляем Sway — высокопроизводительный и безопасный по своей архитектуре язык, созданный специально для следующего поколения блокчейн-приложений. Мы разработали Sway, чтобы решить эти проблемы с нуля. Он выявляет уязвимости на этапе компиляции, управляет нативными активами без дополнительных затрат и использует синтаксис, вдохновленный Rust, который удобен для написания кода.
Но не верьте нам на слово. Давайте рассмотрим простой пример:
Допустим, вы пишете метод для смарт-контракта.
Вам нужно высвободить определенный объект из другого контракта, когда выполняется какое-то условие. В Sway это может выглядеть следующим образом:

Выглядит вполне разумно, но этот код содержит уязвимость, которая может оказаться весьма опасной. Обновление хранилища происходит только после передачи владения, а это значит, что при определенных условиях возможна атака повторного входа (reentrancy attack).
Но так как это Sway, компилятор сам предупредит вас об этом:

Вы могли также заметить аннотацию #[storage(read, write)]. В Sway код не может обращаться к критически важным частям контракта без явного разрешения, что значительно снижает вероятность появления потенциально катастрофических ошибок из-за подобных мелких недочетов.
Мы позаимствовали эту философию у Rust, а также его подход к Zero Cost Abstractions (абстракциям без накладных расходов). В сочетании с оптимизациями, специфичными для блокчейна, и удобными встроенными инструментами, такими как forc и Sway Language Server Protocol (LSP), это делает Sway безопасным и удобным языком для написания смарт-контрактов нового поколения.
Что такое Sway?
Sway — это специализированный язык, вдохновленный Rust и созданный специально для виртуальной машины Fuel (FuelVM). Он выполняет три ключевые функции:
Разработка смарт-контрактов — основа ончейн-логики, основанная на привычной Ethereum-подобной модели развертывания программ, которые управляют состоянием.
Создание предикатов — инновационная функция, позволяющая разработчикам писать безстатическую валидационную логику, которая может обеспечивать сложные условия без развертывания и хранения кода в блокчейне. Это похоже на скрипты Bitcoin, но с гораздо большей мощностью и гибкостью.
Разработка скриптов — возможность тестирования и выполнения сложных действий вне сети без затрат на развертывание.
Sway особенно выделяется, когда вам нужно создать смарт-контракт с нуля и вывести его в продакшн, но при этом вы хотите избежать дорогостоящих ошибок, не ограничивая себя чрезмерно жесткими фреймворками. Его главное преимущество — это скорость перехода от нуля к продуктивной работе. Благодаря глубокой интеграции с инструментами, вам не придется тратить много времени на настройку — больше времени останется на непосредственную разработку. В целом, процесс работы в Sway значительно гладче и удобнее, чем традиционный цикл разработки смарт-контрактов.
В основе Sway лежат безопасность, производительность и удобство для разработчиков. Его сила заключается в том, чего он не делает. В отличие от языков общего назначения, которые пытаются подойти всем и для всего, Sway сосредоточен на уникальной вычислительной среде блокчейна:
Программы выполняются мимолетно, но их хранение постоянно и чрезвычайно дорого, что требует тщательного рассмотрения управления состоянием.
Стоимость газа и размер программы часто важнее, чем чистая скорость выполнения, поэтому акцент сделан на эффективности байткода.
Каждая транзакция конкурирует за ограниченное место в блоке, поэтому необходим точный контроль и минимальные накладные расходы на всех уровнях.
Неизменяемая природа реестра требует идеального кода с первого дня, без права на ошибки.
Узкоспециализированная природа Sway позволяет ему напрямую решать эти проблемы с помощью специализированных функций и оптимизаций. Компилятор автоматически выявляет типичные уязвимости, такие как атаки повторного входа (re-entrancy) и непредсказуемые шаблоны использования памяти. Кроме того, в Sway встроены оптимизации для типичных Web3-операций, которые в других языках пришлось бы реализовывать вручную (например, чеканка токенов, создание ордеров, подписание транзакций). Некоторые могут утверждать, что языки общего назначения тоже справляются с этими задачами, но избыточные накладные расходы делают их использование на масштабном уровне нецелесообразным.
Конечная цель очевидна: мы хотим сделать Sway стандартом для ончейн-программирования, предоставляя современные возможности языка, не жертвуя контролем пользователя или производительностью.
От Solidity к Sway
Solidity хорошо послужил экосистеме, будучи основным языком для Ethereum и EVM-цепочек. Но после многолетних развертываний в продакшене стали очевидны определенные проблемные места. Solidity имеет менее выразительную систему типов, которая выявляет ошибки слишком поздно (или вообще никогда), а также подвержен атакам повторного входа из-за архитектуры EVM. Solidity также имеет некоторые ранние дизайнерские решения, которые усложняют современные стандарты токенов и безопасные переводы. Отсутствие нативных типов активов означает, что каждое взаимодействие с токенами должно проходить через сложные вызовы смарт-контрактов и системы одобрения.
Вся экосистема ищет что-то лучшее, что-то с более сильными гарантиями. В Fuel Labs мы поняли, что масштабируемость — это не просто более быстрая виртуальная машина, хотя это важно, а наличие языка, который действительно создан для будущего смарт-контрактов, а не для их прошлого. Именно поэтому мы создали Sway: подход с чистого листа, сосредоточенный на пропускной способности и безопасности.
Rust показал нам, как язык может революционизировать целую отрасль, поставив безопасность в приоритет без ущерба для производительности, благодаря таким концепциям, как владение, строгая безопасность работы с памятью и абстракции без накладных расходов. Хотя Rust обладает огромной мощностью, он также несет в себе сложности — такие как проверка заимствований (borrow checker) и модель времени выполнения, которые не подходят для типичной ончейн-логики, где ресурсы сильно ограничены, а затраты на выполнение должны оставаться минимальными.
Sway заимствует у Rust привычный синтаксис и удобные для разработчиков функции, включая стиль с фигурными скобками, строгую статическую типизацию и полиморфизм на основе трейтов. Язык также сохраняет ориентированный на безопасность подход Rust, реализуя проверки на этапе компиляции, которые устраняют целые классы ошибок во время выполнения.
Однако Sway исключает или модифицирует функции, которые не имеют смысла для блокчейна. В результате получается язык, который легче, чем Rust, но сохраняет его сильные стороны, что делает его идеальным для написания смарт-контрактов. Sway не пытается быть универсальным решением для всех — он создан специально для ончейн-сценариев использования, и этот фокус явно проявляется в том, как он справляется с типичными шаблонами смарт-контрактов.
Предикаты
Предикаты в Fuel решают критически важную проблему в архитектуре блокчейна: необходимость сложной валидации транзакций без увеличения постоянного состояния. В то время как традиционные смарт-контракты хранят свою логику и данные состояния в модели учетных записей, требуя от полных нод поддерживать эту информацию бесконечно и ограничивая возможность параллельного выполнения из-за необходимости синхронизации, предикаты работают как безстатические смарт-контракты, способные выполнять сложную валидацию автономно.
Предикаты представляют собой монотонные временные условия расходования, которые могут проверять сложные требования — такие как мульти-сиг условия, временные блокировки или математические проверки — при этом работая скорее как контролер, проверяющий документы, чем как библиотекарь, хранящий записи. Как только предикат валидирует транзакцию, возвращая true или false, в состоянии блокчейна ничего не сохраняется, что позволяет разработчикам реализовывать сложную условную логику без увеличения нагрузки на хранилище полных нод.
Система типов и Безопасность
Уязвимости смарт-контрактов обошлись индустрии в миллиарды, и многие проблемы возникают из-за ошибок, связанных с типами, и атак повторного входа, которые сложно обнаружить до развертывания.
Sway использует мощную систему типов, включающую алгебраические типы данных (ADTs) для четкого представления состояний и событий, специфичных для доменной области, полиморфизм на основе трейтов, аналогичный трейтам в Rust, позволяющий определять общие поведения для различных типов, и дженерики, позволяющие писать многократно используемый код без ущерба для безопасности типов. Кроме того, компилятор не просто проверяет ваш код, он понимает специфичные для блокчейна шаблоны, такие как CEI (Checks-Effects-Interactions), и выявляет риски повторного входа до их появления в основной сети. Этот подход строже, чем используемые в Solidity паттерны, добавляя уровень безопасности прямо из коробки.
Нативные Активы и Простота в Переводах Токенов
В Solidity передача токенов обычно включает вызов контракта для изменения балансов, проверку возвращаемых значений или условий отката (revert) и верификацию разрешений. Это работает, но нельзя назвать такой процесс элегантным. Мы выбрали другой подход. В Fuel VM активы являются нативными, а не абстракциями смарт-контрактов. Это означает, что токены можно передавать одной строкой кода, без необходимости в центральном контракте. Такой подход значительно проще и устраняет многие распространенные ошибки.
Компилятор и Инструменты Разработки
Мы считаем, что хороший код требует хороших инструментов, но разработка смарт-контрактов часто требует использования множества разрозненных инструментов, что делает процесс фрагментированным и подверженным ошибкам.
Именно поэтому мы создали forc (Fuel Orchestrator), мощный CLI-инструмент, который инициализирует новые проекты на Sway, управляет зависимостями, компилирует код и развертывает его в сети Fuel.
Sway Language Server Protocol (LSP) предлагает автодополнение кода, встроенную диагностику и автоматическое форматирование в популярных редакторах, таких как VS Code. Для full-stack разработчиков Fuel Indexer, Rust SDK и TypeScript SDK являются дополнительными инструментами для офчейн-индексации и взаимодействия с контрактами Sway в бэкенде или фронтенде вашего приложения.
Однако, когда дело касается инструментов разработки, остаются очевидные пробелы, которые необходимо заполнить. Хотя Explorer и отладочные инструменты еще не на том уровне, на котором мы хотим их видеть, мы добились значительного прогресса. Команда недавно выпустила крупные обновления для визуализации транзакций в Explorer и функций взаимодействия с контрактами, а также ведется активная работа над реализацией Compiler Explorer. Видимость выполнения, которая раньше была значительной проблемой, улучшается с каждым релизом — мы добавили более информативные сообщения об ошибках, стек-трейсы и инструменты для анализа памяти. Еще многое предстоит сделать, но улучшения инструментов разработки внедряются стабильно, а опыт работы с ними значительно улучшается с каждым обновлением.
Экосистема Библиотек и Поддерживающая Инфраструктура
Разработчикам смарт-контрактов часто приходится изобретать базовые компоненты заново, тратя время на реализацию стандартного функционала вместо того, чтобы сосредоточиться на логике своего приложения.
Sway движется в направлении создания полноценной инфраструктуры библиотек. Если взглянуть на приоритеты экосистемы, очевидно, что есть существенные пробелы, которые необходимо заполнить. Основные математические операции по-прежнему остаются проблемой — нужны надежные, хорошо протестированные библиотеки для работы с bignum, фиксированной и плавающей запятой, а также для базовых операций со знаковыми числами. Обработка ошибок вызывает особое разочарование. Да, экосистема библиотек Sway пока мала по сравнению с Solidity, но вот что важно: как только появится полноценный пакетный менеджер, она сможет стать гораздо удобнее для разработчиков, чем существующие решения.
Что касается создания более целостной среды разработки, у нас уже есть некоторые инструменты статического анализа, разработанные сторонними командами, например, Sway Analyzer. Возможно, имеет смысл начать активно продвигать их, вместо того чтобы изобретать велосипед. При правильном использовании эти инструменты могут значительно укрепить инфраструктуру разработки Sway.
Solidity стал фактическим стандартом для Ethereum и получил столь широкое распространение и поддержку экосистемы, что, вероятно, будет активно использоваться в будущем. Однако маловероятно, что он сильно изменится, а его инструменты для разработчиков, фреймворки и вспомогательное программное обеспечение остаются разрозненными между множеством различных проектов и команд, без единого стандарта или целостной интеграции. Например, для разработки может понадобиться Hardhat, для проверки безопасности — Slither, для контрактов — OpenZeppelin, а также множество других инструментов, каждый из которых поддерживается отдельно и не всегда идеально работают в связке с остальными. Такое фрагментированное состояние, скорее всего, сохранится в будущем, а не будет объединено в единую экосистему.
Тем временем Rust показал индустрии, как современный язык может обеспечивать одновременно безопасность и высокую производительность в масштабах. Однако по мере развития блокчейн-технологий возникают новые вызовы, которые эти передовые языки изначально не были предназначены решать.
В то же время появились новые языки для смарт-контрактов с разными подходами. Одни делают упор на простоту, но теряют в выразительности, другие предлагают мощные возможности, но требуют сложного обучения. Многие остаются жестко привязанными к конкретным блокчейн-реализациям, что ограничивает их универсальность. Sway ориентирован на более широкое внедрение и меньше зависит от архитектуры конкретного блокчейна. Некоторые языки со временем разделились на несколько несовместимых диалектов, создавая дополнительные сложности для разработчиков.
Что Делает Sway Уникальным
У Sway тоже есть свои проблемы (в частности, язык пока гораздо менее стабилен по сравнению с альтернативами), но его инструментарий действительно является одним из лучших на данный момент, а сам язык потенциально очень выразителен. Существует хорошая ниша, которую еще предстоит занять языку с качественным набором доступных библиотек, удобным менеджером пакетов и достаточным количеством поведения, определяемого типами и проверяемого на этапе компиляции, что позволяет с высокой степенью уверенности сказать, что ваш контракт не выйдет из строя, если он компилируется без ошибок.
Sway по-новому отходит от традиционных подходов в пяти ключевых аспектах. Во-первых, он использует трейты (мощные шаблоны, похожие на классы), чтобы сделать код более переиспользуемым и типобезопасным. Во-вторых, в отличие от языков, которые навязывают определенные шаблоны, Sway позволяет полностью контролировать, как ваш код ведет себя в блокчейне. В-третьих, как уже упоминалось, он обеспечивает безопасность за счет мощного статического анализа, который выявляет распространенные ошибки на этапе компиляции, предотвращая потенциальные уязвимости, способные привести к миллионным потерям. В-четвертых, он поддерживает как контракты, так и предикаты в одном языке (представьте, что можно писать как смарт-контракты, так и условия разблокировки с помощью одних и тех же инструментов). И, наконец, его инструменты просто работают. От поддержки в редакторах до развертывания — все интегрировано и готово к использованию.

Начало Работы с Sway
Самый простой способ установить Sway и связанные с ним инструменты Fuel — использовать fuelup, который управляет версиями инструментов Fuel (включая Sway, forc, Fuel indexer и другие).

Затем подтвердите установку, выполнив команду:

Это должно вывести список установленных компонентов. Вы также можете настроить свою среду для использования Sway Language Server в VSCode или любом другом редакторе, поддерживающем LSP, для автодополнения, подсветки синтаксиса и проверки ошибок.
Для тех, кто хочет обойтись без установки, команда Fuel Labs и сообщество работают над Sway Playground — браузерной средой, где можно экспериментировать с кодом Sway без необходимости локальной установки. Просто откройте Playground, выберите шаблон (например, контракт токена) и изменяйте его по своему усмотрению.
Официальный репозиторий Sway Applications на GitHub содержит примеры токен-контрактов, демонстрирующих как базовую, так и продвинутую функциональность, аналогичную ERC-20, для сети Fuel, реализации NFT, показывающие эффективное управление коллекционными активами, а также базовые элементы DeFi, включая кредитные протоколы, примеры DEX и многое другое.
В сообществе также регулярно появляются обучающие материалы, предлагающие пошаговые инструкции по созданию вашего первого dApp на Sway. От написания простых скриптов для обмена токенов до организации взаимодействия между несколькими контрактами — эти руководства значительно упрощают процесс обучения.
Тестирование, Аудит и Развертывание
Sway предлагает встроенные возможности для тестирования. Разработчики могут писать тесты непосредственно в файлах своего проекта:

Команда forc test компилирует и выполняет эти тесты в локальной среде Fuel VM, помогая выявить ошибки в логике до развертывания кода в продакшн.
После того как ваш контракт протестирован и готов, вы можете использовать Rust SDK, который предоставляет типобезопасные взаимодействия с контрактами прямо из вашего бэкенда, используя привязки типов для обеспечения корректных вызовов. Или TypeScript SDK, который значительно упрощает интеграцию с фронтендом — идеально подходит для React, Vue и других JavaScript-фреймворков.
Развертывание выполняется просто с помощью forc deploy, которая отправляет скомпилированный контракт на ноду сети Fuel. Достаточно указать свою ноду, задать лимиты газа — и контракт будет в сети.
Одним из преимуществ Sway является снижение вероятности появления ошибок благодаря мощному статическому анализу и проверкам на этапе компиляции. Однако профессиональные аудиты по-прежнему играют важную роль, особенно для крупных DeFi-проектов. Несколько компаний по кибербезопасности и независимые аудиторские группы уже начинают изучать кодовую базу Sway, чтобы предоставить специализированные инструменты и услуги. Конечная цель — создать среду, где аудит станет одновременно проще и глубже, благодаря особенностям архитектуры языка Sway.
Вклад в развитие Sway
Sway полностью с открытым исходным кодом. Его развитие зависит от обратной связи и вкладов сообщества. Вы можете:
Открыть Вопрос: сообщить об ошибках, запросить новые функции или предложить улучшения языка.
Отправить Pull Request: помочь исправить ошибки или внедрить новые функции в компиляторе, сервере языка или документации.
Присоединиться к сообществу: участвовать в обсуждениях с командой Fuel Labs и другими разработчиками в Discord или на форумах, чтобы быть в курсе обновлений и делиться идеями.
Также, как в Ethereum существуют стандарты ERC, сообщество Fuel разрабатывает стандарты SRC (Sway Request for Comments) для определения общих интерфейсов (например, операций с токенами, структуры NFT или мульти-сиг протоколов). Активное участие в разработке и внедрении этих стандартов обеспечивает совместимость проектов на Sway и помогает формировать лучшие практики для экосистемы.
Вывод
Sway представляет собой подход нового поколения к написанию безопасных и производительных смарт-контрактов. Черпая вдохновение в Rust, учитывая специфические ограничения блокчейна и предлагая интегрированные инструменты, Sway снижает порог входа для разработчиков, одновременно повышая уровень безопасности. Он обходит исторические ограничения языков на основе EVM, таких как Solidity, а также сложность языков общего назначения, таких как Rust.
По мере изучения Sway вы обнаружите язык, специально созданный для упрощения наиболее распространенных ончейн-задач — от перевода токенов до сложной DeFi-логики — при этом обеспечивающий надежную защиту от уязвимостей. Независимо от того, являетесь ли вы опытным разработчиком на Solidity, ищущим более высокую пропускную способность и лучшую безопасность, или энтузиастом Rust, заинтересованным в новом поколении модульных блокчейнов, Sway заслуживает вашего внимания.
В более широком смысле Sway находится в авангарде движения по переосмыслению подходов к созданию децентрализованных приложений. Объединяя понятность, безопасность и производительность, он помогает приблизить будущее, в котором разработка смарт-контрактов станет одновременно доступной и мощной. Мы приглашаем вас попробовать Sway, присоединиться к растущему сообществу и внести свой вклад в развитие смарт-контрактов на Fuel и за его пределами.
Чтобы глубже изучить философию и архитектуру Fuel, а также понять, что отличает нас от других блокчейн-решений, ознакомьтесь с Fuel Book. Подробные инструкции по началу работы в экосистеме Fuel можно найти в нашей документации.
No activity yet