MoveLang: восходящий титан в программировании смарт-контрактов
Move — это основанный на стеке язык программирования Web3, который определяет пользовательские типы ресурсов, что обеспечивает повышенную гибкость и устраняет некоторые недостатки его предшественников, таких как Solidity.
Оглавление
- Введение
- Что такое MoveLang?
- MoveLang определяет пользовательские типы ресурсов
- Move, как естественное развитие языков Web3
- Недостатки MoveLang для смарт-контрактов
- Ресурсы
Введение
В январе 2022 года Silvergate Bank объявил о выплате почти 200 миллионов долларов за IP-адрес блокчейна Diem от Meta , включая проприетарный язык программирования Move. Вполне вероятно, что разработка проекта Diem (ранее Libra) заняла больше времени, чем ожидалось, из-за создания Move, в качестве нового языка смарт-контрактов для блокчейн-проектов.
Несмотря на молодость языка, к MoveLang теперь подключено несколько проектов, помимо Diem, таких как блокчейны Sui и Aptos. Поскольку его популярность быстро растет, полезно понять, что делает написание кода в Move таким увлекательным для разработчиков. Таким образом, в этой статье будут обобщены основные особенности Move, его приложений в качестве виртуальной машины (VM) и причины, по которым ожидается, что его использование, при развертывании протоколов смарт-контрактов, будет распространяться.
Что такое MoveLang?
Во-первых, Move — это язык, основанный на стеке, и, по сути, он работает, заставляя операции стека перемещаться и извлекаться по мере выполнения вычислений. В соответствии с моделью выполнения учетные записи должны иметь ноль или более модулей и один или несколько типов ресурсов, но могут иметь только один ресурс в рамках определенного типа ресурсов. При необходимости можно создать настраиваемые типы ресурсов, содержащие несколько экземпляров ресурсов одного типа. Настройка типов ресурсов — одна из основных причин, по которой Move быстро становится таким мощным дополнением к списку навыков разработчика.
Согласно техническому документу Diem, исполняемый формат Move — это «байт-код более высокого уровня, чем ассемблер, но более низкого уровня, чем исходный язык. Байт-код проверяется в цепочке на безопасность ресурсов, типов и памяти с помощью верификатора байт-кода, а затем выполняется непосредственно интерпретатором байт-кода». Он был разработан для обеспечения максимальной безопасности без увеличения стоимости компиляции транзакций и, таким образом, минимизации комиссий за транзакции по сравнению с существующими сетями.
Move также имеет множество встроенных функций, которые позволяют разработчикам ссылаться на значения ресурсов или даже уничтожать ресурсы. Однако встроенные функции можно использовать только для ресурсов, объявленных в текущем модуле. Таким образом, если разработчик забыл объявить процедуры для обращения к значениям ресурсов с помощью встроенных функций, просмотр или изменение этого ресурса впоследствии будут недоступны.
Ниже показаны основные компоненты языка Move:
1. Типы Примитивов
- логический
- адрес (256 бит)
- целое число без знака (64-разрядное)
- байтовые массивы фиксированного размера
2. Структура
- юзерфрендли (ресурс)
- неограниченная (общие структуры)
3. Процедуры
Зависимость от ациклического модуля для смягчения повторных атак
- публичная
- внутренняя
4. Верификатор байт-кода
Проверяет свойства безопасности кода перед запуском модулей
Программы проходят проверку перед развертыванием поэтапно:
- Построение управляющего графа
- Проверка баланса стека (подтверждение, что размер стека не изменился после операций)
- Проверка типа
- Проверка вида/ресурса
- Проверка ссылок и связь с глобальным состоянием
5. Интерпретатор байт-кода
Байт-код проходит через интерпретатор перед выполнением
- Аналогично JVM и CLR
Участие в смарт-контракте измеряется параметрами платы за газ
- Смягчает повторные атаки и другие бесконечные циклы
6. Виртуальная машина Move (MVM)
Блоки содержат несколько транзакций, и транзакции выполняются для создания эффектов транзакций.
Управляет вызовами между модулями, выполняя проверки через свой верификатор байт-кода.
- Стоимость проверки снижена вдвое, поскольку модуль взимает плату только за взаимодействия в сети.
Генерирует обновленное глобальное состояние
- Создает разделение между эффектами и переходами состояний
MoveLang определяет пользовательские типы ресурсов
Move отличается от других языков программирования смарт-контрактов тем , что использует ресурсы, основанные на линейной логике. Формулы линейной логики рассматриваются, как фундаментальные ресурсы, которые можно использовать только один раз. С помощью MoveLang ресурсы никогда не копируются и не удаляются, а перемещаются между местами хранения программ. Другими словами, в коде есть элемент «герметичности», который по своей сути более безопасен благодаря пользовательским типам ресурсов «первого класса».
Это дополнительно обеспечивается системой статических типов Move, и означает, что создаваемые переменные должны быть определены, как конкретные типы . В Move эта система защищает характер ресурсов первого класса, поскольку код будет скомпилирован перед выполнением, что предотвратит доставку неудачных программ. Тем не менее, ресурсы в Move по-прежнему используются аналогично другим, менее защищенным элементам и хранятся в структурах данных или передаются в качестве аргументов процедурам.
По сути, ресурсы Move обладают преимуществами, как с точки зрения выразительности, так и с точки зрения гарантий безопасности. Поскольку ресурсы защищены в коде, но также могут свободно использоваться для всех видов операций, MoveLang нацелен на решение двух аспектов трилеммы блокчейна, на которые он может влиять: безопасность и масштабируемость.
Move, как естественное развитие языков Web3
Как уже упоминалось, команда инженеров Diem обнаружила проблемы в существующих языках блокчейна, в частности в Bitcoin Script и Ethereum Solidity, отметив несколько проблем. Во-первых, другие языки программирования часто представляют элементы как целые числа, что делает программы неудобными и подверженными ошибкам, заставляя разработчиков MoveLang вместо этого представлять цифровые активы, как ресурсы первого класса. Это обеспечивает прочную основу на уровне языка, которая защищает дефицит любых цифровых ресурсов, созданных с помощью MoveLang.
Помимо самих цифровых активов, MoveLang позволяет легко настраивать другие элементы и уровни доступа. То есть этот контроль доступа встроен в сам язык. Таким образом, активы, написанные в Move, по умолчанию являются более сложными, предоставляя разработчикам функциональные возможности для работы. Возможность настройки Move в отношении использования ресурсов и модулей, вероятно, делает его более масштабируемым, чем сопоставимые языки смарт-контрактов, хотя это еще предстоит выяснить.
Недостатки MoveLang для смарт-контрактов
MoveLang идет на компромисс между скоростью и производительностью, в обмен на высокие гарантии безопасности. То есть, код Move оценивается во время выполнения и не должен страдать от ошибок компилятора, как это может быть в случае с Solidity и другими языками. Другие потенциальные недостатки включают в себя:
- Код Move не может быть легко перенесен на другие блокчейны.
- Для этого могут быть разработаны сторонние инструменты.
- Ресурсов и библиотек кода немного по сравнению с другими языками, такими как Solidity.
- Опять же, из-за его юного возраста информация, отчеты об исследованиях и обучение разработчиков встречаются реже, чем в других языках.
Наконец, поскольку это довольно новый язык, некоторые из его недостатков, возможно, еще не обнаружены. После того, как он будет использоваться в течение нескольких лет и будет проверен в реальных условиях, как и его аналоги, у него будет послужной список, с помощью которого мы сможем оценить его распространение и популярность среди разработчиков Web3. Move уже продемонстрировал многообещающие результаты, и многие разработчики хотят с ним работать. Ожидайте услышать и увидеть гораздо больше контента о Move в течение следующих нескольких лет.
Ресурсы
- Дилл, Д. (2022, 7 февраля). Быстрая и надежная формальная проверка смарт-контрактов с помощью Move Prover . Международная конференция по инструментам и алгоритмам построения и анализа систем.
- Кокорис-Когиас, Э. и соавт. (2021, 31 июля). CALYPSO: Управление частными данными для децентрализованных реестров . Внутренняя конференция Meta по очень большим базам данных.
- Иредейл, Г. (2021, 12 августа). Обзор языка программирования Move . 101 блокчейн.
- Чжун, Э. и др. (2020, 21 октября). Доказательство движения . _ Международная конференция по компьютерной проверке.
Присоединяйтесь к сообществу SupraOracles:
Website | Twitter | Telegram | LinkedIn | Announcements | Medium | Discord | YouTube