Допис
Діліться своїми знаннями.
📦 Поглиблений аналіз модуля `sui: :package`: Публікація та оновлення пакетів у Move
У стрімкій еволюції технології блокчейнуМова програмування Moveвиділяється своєюбезпекою,гнучкостьтааудиторность. Однією з основних його сильних сторін є** вдосконалене управління пакетами смарт-контрактів**.
Ця стаття глибоко занурюється в sui::package
модуль - двигун, який стоїть за публікацією, модернізацією та обслуговуванням пакетів Move на блокчейні Sui.
🔍 Огляд модуля
sui::package
є наріжним каменем в екосистемі Move. Він надає розробникам надійні інструменти та інтерфейси для управління пакетамибезпечно та ефективно.
📦 Декларація та імпорт
module sui::package;
use std::ascii::String;
use std::type_name;
use sui::types;
Це визначає модуль і містить основні стандартні бібліотеки Move та вбудовані модулі SUI для складної логіки.
🧩 Основні структури та загальнодоступні інтерфейси
1. Publisher
Обробляєідентифікатор видавцяпакунка.
Ключові функції:
claim
claim_and_keep
burn_publisher
2. UpgradeCap
Керує можливістю оновлення**пакета.
Ключові поля:
package_id
version
policy
(політика оновлення)
Ключові функції:
upgrade_package
restrict
3. UpgradeTicket
Надає дозвіл наконкретне оновлення.
Ключові функції:
ticket_package
ticket_policy
ticket_digest
4. UpgradeReceipt
Видається після успішного оновлення.
Ключові функції:
receipt_cap
receipt_package
🚨 Константи помилок
Допомагає розробникам налагодити чіткість.
-ENotOneTimeWitness
: Одноразовий свідок є недійсним
-ETooPermissive
: Політика оновлення занадто поблажлива
-EInvalidPackage
: Наданий пакет недійсний
🔒 Константи стратегії оновлення
Контролює, як можуть розвиватися пакети:
-COMPATIBLE
: Зворотно-сумісні оновлення
-ADDITIVE
: Додати нові функції, але не змінювати/видаляти існуючі
-DEP_ONLY
: Дозволені лише зміни залежності
Ці константи забезпечуютьбезпечні та контрольовані оновлення.
🧱 Визначення структури
Publisher
-адреса пакету: Унікально ідентифікує видавця -назва модуля: простір імен модуля видавця
UpgradeCap
-ідентифікатор пакету: Цільовий пакет -версія: Поточна версія -політика: застосовується політика оновлення
UpgradeTicket
-upgrade_cap_id: Посилання на контрольний UpgradeCap -ідентифікатор пакету: Цільовий пакет -політика: використовується політика оновлення -digest: підсумок байтового коду (вектор байтів)
UpgradeReceipt
-upgrade_cap_id: ідентичність контролера -ідентифікатор пакету: Оновлений пакет
🧠 Визначення основних функцій
claim
fun claim(otw: &OneTimeWitness) -> Publisher;
Претендує на ідентичність видавця за допомогою одноразового свідка (OTW). Забезпечує унікальність і довіру.
claim_and_keep
fun claim_and_keep(otw: &OneTimeWitness) -> Publisher;
Подібно доclaim
, але надсилає об'єкт Publisher до облікового запису абонента.
burn_publisher
fun burn_publisher(publisher: &mut Publisher);
Знищує ідентифікацію видавця та всі пов'язані привілеї.
authorize_upgrade
fun authorize_upgrade(cap: &UpgradeCap, package_id: &PackageID, policy: u8, digest: &vector<u8>) -> UpgradeTicket {
assert!(cap.package_id == *package_id, EInvalidPackage);
assert!(cap.policy <= policy, ETooPermissive);
UpgradeTicket {
upgrade_cap_id: cap.id(),
package_id: *package_id,
policy: policy,
digest: digest.clone()
}
}
Перевіряє:
UpgradeCap
Це відповідаєpackage_id
- Політикане більш допустим, ніж дозволено
Потім повертає підписаний
UpgradeTicket
.
upgrade_package
fun upgrade_package(ticket: &UpgradeTicket, data: &vector<u8>) -> UpgradeReceipt {
// Upgrade logic
}
- Перевіряє
UpgradeTicket
data
- Замінює поточний код пакета новим байтовим кодом () - Повертає
UpgradeReceipt
як доказ успішного оновлення
restrict
fun restrict(cap: &mut UpgradeCap, policy: u8) {
assert!(cap.policy < policy, ETooPermissive);
cap.policy = policy;
}
Використовується для того, щобпосилити дозволи на оновлення. Не вдається знизити добільш допустимої політики.
🛡️ Функції безпеки та аудиту
sui::package
розроблений з урахуваннямбезпеки та аудиторності:
-Одноразовий свідок (OTW): запобігає видаванню себе в публікаціях -Константи політики оновлення: запобігання несанкціонованому або зламаному оновленню -Твердження: Вбудовані охоронці для запобігання неправильному використанню або несподіваної логіці
🧪 Підтримка тестування та моделювання
Модуль включаєфункції лише для тестування, які захищені для середовищ розробки/тестування:
-TestOnly
: Позначає логіку лише для тестування
-publish
: Імітує публікацію в тестах
-upgrade
: Імітує оновлення в тестах
✅ Резюме
sui::package
Модуль надає розробникам Move потужну, структуровану та безпечну**систему для:
- Публікуйте пакети
- Авторизація та виконання оновлень
- Керуйте можливостями оновлення та політикою
Це гарантуєдовіру, гнучкістьтаремонтоспроможністьу розробці смарт-контрактів на Sui.
Завдяки таким модулям
sui::package
, мова Move продовжує демонструвати свою силу вмодульному дизайні,архітектурі, що насамперед безпека, таергономіці розробника, відкриваючи шлях для масштабованих, безпечних систем Web3.
- Sui
- Architecture
Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.
Зароби свою частку з 1000 Sui
Заробляй бали репутації та отримуй винагороди за допомогу в розвитку спільноти Sui.

- ... SUIMatthardy+2095
- ... SUIacher+1666
- ... SUIjakodelarin+1092
- ... SUIChubbycheeks +1081
- ... SUITucker+1047
- ... SUIKurosakisui+1034
- ... SUIzerus+890
- Чому BCS вимагає точного порядку полів для десеріалізації, коли структури Move мають названі поля?65
- Помилки перевірки кількох джерел» у публікаціях модуля Sui Move - автоматичне вирішення помилок55
- Як максимізувати прибуток від SUI: Sui Staking проти Liquid Staking414
- Невдала операція Sui: об'єкти, зарезервовані для іншої транзакції49
- Помилка Sui Move - Неможливо обробити транзакцію Не знайдено дійсних газових монет для транзакції316