Платформа смарт-контрактів Sui

The MystenLabs Team [email protected]

1. ВВЕДЕННЯ

Sui — це децентралізована бездозвільна платформа смарт-контрактів, яка орієнтована на управління активами з низькою затримкою. Вона використовує мову програмування Move для визначення активів як об’єктів, якими може володіти адреса. Програми Move визначають операції над цими типізованими об’єктами, включаючи правила для їхнього створення, передачі цих активів новим власникам, а також операції, які мутують активи.

Sui підтримується набором органів без права доступу, які відіграють роль, аналогічну валідаторам або майнерам в інших системах блокчейну. Для забезпечення безпеки спільних операцій над активами використовується візантійський узгоджений протокол трансляції між органами влади, що забезпечує меншу затримку та кращу масштабованість порівняно з візантійською угодою. Він покладається на візантійську угоду лише задля забезпечення безпеки спільних об’єктів. А також операції управління та контрольні точки, що виконуються поза критичним латентним шляхом. Виконання смарт-контрактів також природно розпаралелюється, коли це можливо. Sui підтримує легких клієнтів, які можуть автентифікувати читання, а також повних клієнтів, які можуть перевіряти всі переходи на цілісність. Ці засоби дозволяють створювати мости з мінімальним рівнем довіри до інших блокчейнів.

Рідний актив SUI використовується для оплати газу для всіх операцій. Він також використовується його власниками для делегування частки владі для управління Sui протягом епох, і періодично влада реконфігурується відповідно до делегованої ним часткою. Використаний газ розподіляється між органами правління та їхніми делегатами відповідно до їхньої частки та внеску в роботу Sui.

Цей документ складається з двох частин, де зокрема Розділ 2 описує модель програмування Sui з використанням мови Move, а Розділ 4 описує роботу децентралізованої системи без дозволів, яка забезпечує безпеку, швидкодію та продуктивність Sui.

2. ПРОГРАМУВАННЯ СМАРТ-КОНТРАКТІВ SUI

Смарт-контракти Sui написані мовою Move[4]. Move безпечна і виразна, а її система типів і модель даних рально підтримують паралельні стратегії угоди/виконання, які роблять Sui масштабованим. Move — це мова програмування з відкритим вихідним кодом для створення смарт-контрактів, спочатку розроблена у Facebook для блокчейну Diem. Ця мова не залежить від платформи, і крім того, що вона була прийнята в Sui, вона набирає популярності і на інших платформах (наприклад, 0L, StarCoin).

У цьому розділі ми розглянемо основні особливості мови Move та пояснимо, як вона використовується для створення та управління активами на Sui. Докладніше пояснення можливостей Move можна знайти у книзі “Мова програмування Move”, докладніше зміст Move, специфічне для Sui, можна знайти на порталі розробників Sui, а більш формальний опис Move у контексті Sui можна знайти у розділі 3.

2.1 Огляд

Глобальний стан Sui включає пул програмованих об’єктів, створених і керованих пакетами Move, які є колекціями модулів Move (докладніше див. розділ 2.1.1), що містять функції та типи Move. Самі пакети Move є також об’єктами. Таким чином, об’єкти Sui можна розділити на дві категорії:

Об’єкти можуть кодувати активи (наприклад, змінні або незмінні токени), можливості, що дають право викликати певні функції або створювати інші об’єкти, “розумні контракти”, які керують іншими активами, і так далі — все залежить від програміста. Код Move для оголошення типу об’єкта Sui виглядає таким чином:

struct Obj has key {

id: VersionedID, // globally unique ID and version f: u64 // objects can have primitive fields

g: OtherObj // fields can also store other objects

}

Усі структури, що представляють об’єкти Sui (але не всі значення структури Move), повинні мати поле id та здатність key, що вказують на те, що значення може зберігатись у глобальному пулі об’єктів Sui.

2.1.1 Модулі. Програма Move організована як набір модулів, кожен із яких складається зі списку оголошень структур та функцій. Модуль може імпортувати типи struct з інших модулів та викликати функції, оголошені іншими модулями.

Значення, оголошені в одному модулі Move можуть перетікати в інший — наприклад, модуль OtherObj в наведеному вище прикладі може бути визначений в іншому модулі, а не в модулі, що визначає Obj. Це відрізняється від більшості мов смарт-контрактів, які дозволяють перетікати через межі контракту лише неструктурованим байтам. Однак Move здатний підтримувати це, оскільки він надає функції інкапсуляції, що допомагають програмістам писати безпечний надійний [14] код. Зокрема, система типів Move гарантує, що такий тип, як Obj вище, може бути створений, знищений, скопійований, прочитаний та записаний лише функціями всередині модуля, який повідомляє цей тип. Це дозволяє модулю забезпечити суворі інваріанти для своїх оголошених типів, які зберігаються навіть при перетині меж довіри смарт-контракту.

2.1.2 Транзакції та точки входу. Глобальний пул об’єктів оновлюється за допомогою транзакцій, які можуть створювати, знищувати, читати та записувати об’єкти. Транзакція повинна приймати на вхід кожен об’єкт, з яким вона хоче працювати. Крім того, транзакція повинна включати версійний ідентифікатор об’єкта пакета, ім’я модуля та функції всередині цього пакета, а також аргументи функції (включаючи вхідні об’єкти). Наприклад, для виклику функції