Обзор
WebAssembly (WASM) — это стандарт, разработанный W3C Community Group , который определяет низкоуровневый формат двоичного кода для исполняемых программ, запускаемых в браузерах. Хотя он был разработан для запуска высокопроизводительных приложений в браузерах, он также может работать как отдельная виртуальная машина.
Исполняемые файлы WebAssembly предварительно скомпилированы, что позволяет использовать самые разные языки программирования для создания и запуска приложений в браузерах. Нет никаких предпочтений для языков, и в настоящее время десятки языков могут компилироваться или иметь свои виртуальные машины в WASM. Более того, WASM является аппаратно-независимым и может быть скомпилирован на любых современных архитектурах, десктопах и даже мобильных устройствах, хотя и с некоторыми ограничениями.
Быстро и безопасно
Основная цель WebAssembly — предоставить исполняемый код в браузерах с производительностью, близкой к исходной. Двоичные форматы используются, потому что они передаются быстрее, поскольку они меньше, чем обычные текстовые форматы и форматы собственного кода. Это означает, что программы можно передавать, кэшировать и потреблять отдельно, поскольку они разбиты на более мелкие части и выполняют независимые параллельные задачи. Код также проверяется и выполняется в надежной для памяти изолированной среде, что предотвращает повреждение данных и нарушения безопасности.
Wasm для блокчейнов
Ни для кого не секрет, что одним из ключей к более широкому внедрению любой сети блокчейнов является максимальная масштабируемость. Это связано с тем, что увеличение скорости и пропускной способности транзакций приведет к снижению транзакционных издержек. У старых блокчейнов есть серьезные проблемы с масштабируемостью, и из-за этого у них растут транзакционные издержки. Предыдущие технологии, которые отвечали за выполнение байт-кода смарт-контракта, уже недостаточно быстры и демонстрируют низкую эффективность при компиляции большого объема кода. Это означает, что есть значительные возможности для улучшения.
WASM значительно увеличивает скорость транзакций, что способствует повышению эффективности. Кроме того, WASM поддерживает смарт-контракты, написанные на разных языках, а это значит, что любой может взять существующую программу или написать новую на удобном языке и скомпилировать ее для выполнения на виртуальной машине WebAssembly. Это значительно повышает инклюзивность приложений по сравнению с решениями, основанными на предметно-ориентированных языках.
Соображения безопасности
WebAssembly сам по себе не обеспечивает внешнего доступа к вычислительной среде, в которой выполняется код. Любое взаимодействие со средой, такое как ввод-вывод, доступ к ресурсам или вызовы операционной системы, может выполняться только путем вызова функций, предоставляемых реализацией WebAssembly, встроенной в хост-среду и импортированной в модуль WebAssembly.
Такая реализация определяет, как инициируется загрузка модулей, как обеспечивается импорт и как можно получить доступ к экспорту. Он берет на себя ответственность за политики безопасности, подходящие для соответствующей среды, контролируя или ограничивая функциональные возможности, которые он делает доступными для импорта.
Поскольку WebAssembly предназначен для преобразования в машинный код, работающий непосредственно на оборудовании хоста, он потенциально уязвим для атак по сторонним каналам на аппаратном уровне. Когда это вызывает беспокойство, во встроенной реализации Wasm, возможно, придется ввести подходящие меры для изоляции вычислений WebAssembly.
Исследователи ранее сообщали о возможных уязвимостях, связанных с потоками с общей памятью. Gear, который использует WebAssembly под капотом, не подвержен этим опасениям по своей конструкции. Любой смарт-контракт Gear — это программа WebAssembly. В качестве параллельной вычислительной системы Gear использует связь с передачей сообщений (модель Актера) вместо модели связи с общей памятью. Это устраняет любые проблемы безопасности.
Чтобы быть в курсе последних новостей и обновлений, посетите GitHub Gear .
Команда Gear
Используемые материалы
- Основная спецификация WebAssembly: https://www.w3.org/TR/wasm-core-1/
- VM Matters: Сравнение виртуальных машин WASM и EVM в производительности смарт-контрактов блокчейна: https://arxiv.org/pdf/2012.01032.pdf
- WebAssembly: https://en.wikipedia.org/wiki/WebAssembly
- Потрясающие языки WebAssembly: https://github.com/appcypher/awesome-wasm-langs