MoveLang: восходящий титан в программировании смарт-контрактов

TokarevDesign
5 min readSep 29, 2022

--

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

Участие в смарт-контракте измеряется параметрами платы за газ

  • Смягчает повторные атаки и другие бесконечные циклы
Move имеет встроенные функции безопасности, которые проверяют безопасность байт-кода перед запуском каких-либо модулей. Встроенная формальная верификация — отличительная черта MoveLang, дающая ему первоклассные гарантии безопасности на самых фундаментальных уровнях.

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 и другими языками. Другие потенциальные недостатки включают в себя:

  1. Код Move не может быть легко перенесен на другие блокчейны.
  • Для этого могут быть разработаны сторонние инструменты.
  1. Ресурсов и библиотек кода немного по сравнению с другими языками, такими как Solidity.
  2. Опять же, из-за его юного возраста информация, отчеты об исследованиях и обучение разработчиков встречаются реже, чем в других языках.

Наконец, поскольку это довольно новый язык, некоторые из его недостатков, возможно, еще не обнаружены. После того, как он будет использоваться в течение нескольких лет и будет проверен в реальных условиях, как и его аналоги, у него будет послужной список, с помощью которого мы сможем оценить его распространение и популярность среди разработчиков Web3. Move уже продемонстрировал многообещающие результаты, и многие разработчики хотят с ним работать. Ожидайте услышать и увидеть гораздо больше контента о Move в течение следующих нескольких лет.

Ресурсы

  1. Дилл, Д. (2022, 7 февраля). Быстрая и надежная формальная проверка смарт-контрактов с помощью Move Prover . Международная конференция по инструментам и алгоритмам построения и анализа систем.
  2. Кокорис-Когиас, Э. и соавт. (2021, 31 июля). CALYPSO: Управление частными данными для децентрализованных реестров . Внутренняя конференция Meta по очень большим базам данных.
  3. Иредейл, Г. (2021, 12 августа). Обзор языка программирования Move . 101 блокчейн.
  4. Чжун, Э. и др. (2020, 21 октября). Доказательство движения . _ Международная конференция по компьютерной проверке.

Присоединяйтесь к сообществу SupraOracles:
Website | Twitter | Telegram | LinkedIn | Announcements | Medium | Discord | YouTube

--

--

No responses yet