Чому Move?
У Sui ви пишете смарт-контракти за допомогою мови програмування Move. Ця сторінка містить посилання на ключові ресурси Move і порівнює мови програмування Move і Solidity. Щоб отримати повний опис проблем із традиційними мовами смарт-контрактів, перегляньте Заяву про проблему переміщення.
Sui Move
По-перше, зауважте, що Move базується на добре підтримуваній мові програмування Rust. І Sui Move відрізняється від основного Move тонкими, але чіткими способами. Ось ресурси, щоб покращити Sui Move:
Ресурси Move
У цьому розділі зібрано посилання на зовнішні ресурси на мові програмування Move. Перегляньте також нашу сторінку «Розумні контракти з Move» і серію навчальних посібників із програмування Move за допомогою об’єктів, щоб дізнатися про ключові ресурси Move на цьому сайті.
Move & Sui подкаст на Zero Knowledge, де детально описані програмовані об’єкти.
Оригінальний Move Book написаний членом Sui команди.
Awesome Move - Підсумок ресурсів, пов’язаних із Move, від блокчейнів до зразків коду.
Move vs. Solidity
Наразі основним гравцем на сцені блокчейн-мов є Solidity. Будучи однією з перших мов блокчейну, Solidity була розроблена для реалізації базових концепцій мови програмування з використанням добре відомих типів даних (наприклад, масив байтів, рядок) і структур даних (таких як хеш-карти) з можливістю створення користувацьких абстракцій за допомогою добре відомої бази .
Однак у міру розвитку технології блокчейн стало зрозуміло, що основне призначення мов блокчейну — це операції з цифровими активами, а головною якістю таких мов є безпека та можливість перевірки (що є додатковим рівнем безпеки).
Move був спеціально розроблений для вирішення обох проблем: представлення цифрових активів і безпечних операцій з ними. Щоб забезпечити додатковий захист, його було розроблено спільно з інструментом перевірки Move Prover. Це дозволяє розробникам Move писати формальні специфікації для ключових властивостей коректності своєї програми, а потім використовувати перевірку, щоб перевірити, чи ці властивості зберігатимуться для всіх можливих транзакцій і вхідних даних.
Однією з фундаментальних відмінностей між EVM і Move є модель даних для активів:
Активи EVM закодовані як записи в хеш-картах
owner_address -> <bytes encoding asset>
. Оновлення та передача активів відбувається шляхом оновлення записів на цій карті. Немає типу чи значення, що представляє актив, і, отже, актив не можна передати як аргумент, повернути з функції або зберегти всередині іншого активу. Лише неструктуровані байти можуть бути передані через межі контракту, і, отже, кожен актив назавжди залишається всередині контракту, який його визначає.
Sui значною мірою використовує модель даних Move для продуктивності. Постійний стан Sui — це набір програмованих об’єктів Move, які можна оновлювати, створювати та знищувати транзакціями. Кожен об’єкт має метадані власності, які дозволяють валідаторам Sui як виконувати, так і фіксувати транзакції з використанням об’єкта паралельно з причинно непов’язаними транзакціями. Система типів Move забезпечує цілісність цих метаданих власності під час виконання. Результатом є система, у якій розробники пишуть звичайні смарт-контракти Move, але валідатори використовують модель даних для максимально ефективного виконання та фіксації транзакцій.
Це просто неможливо з моделлю даних EVM. Оскільки активи зберігаються в динамічно індексованих картах, валідатор не зможе визначити, коли транзакції можуть торкатися того самого активу. Для схеми паралельного виконання та зобов’язань Sui потрібна така мова, як Move with the vokabulary для опису структурованих активів, які можуть вільно перетікати між контрактами. Відверто кажучи: навіть якби ми віддавали перевагу EVM/Solidity, а не Move, ми не могли б використовувати їх у Sui, не пожертвувавши проривом продуктивності, який робить Sui унікальним.
Однією з головних переваг Move є компонування даних. Завжди можна створити нову структуру (актив) Y, яка буде містити в ній початковий актив X. Більше того – з додаванням генериків можна визначити загальну оболонку Z(T), яка зможе обгортати будь-який актив, надаючи додаткові властивості обгорненому активу або поєднуючи його з іншими. Подивіться, як працює компонування в нашому прикладі Sandwich.
Last updated