Sui.

Допис

Діліться своїми знаннями.

SuiLover.
Jul 30, 2025
Питання та відповіді експертів

Як я можу несанкціоновити пакет Move?

Я намагаюся зрозуміти цей аспект мережі Sui, тому що я або будую, налагоджую або розгортаю щось, що стосується цієї області. Я хочу детальне пояснення того, як працює цей механізм або функція, разом із відповідним використанням CLI, структурою переміщення коду або архітектурними концепціями. Моя мета — отримати достатню ясність, щоб застосувати ці знання в реальному проекті — будь то спеціальний смарт-контракт, система NFT, інтеграція гаманця чи інструмент DeFi. Мережа Sui має унікальні особливості порівняно з мережами EVM, тому мене особливо цікавить, що її відрізняє та як це впливає на найкращі практики розробки. Це допомогло б мати зразок коду, приклади командного рядка або типові помилки, на які слід стежити, особливо під час використання Sui CLI, SDK або розгортання в localnet/testnet. Зрештою, я хочу уникнути поширених помилок, дотримуватися найкращих принципів безпеки та гарантувати, що функціональність, над якою я працюю, поводиться так, як очікувалося в реалістичних умовах.

  • Sui
  • Transaction Processing
  • Move
4
14
Поділитися
Коментарі
.

Відповіді

14
BigSneh.
Jul 30 2025, 12:28

Щоб запобігти несанкціонованому оновленню пакета Move на Sui, ключовим механізмом є об'єкт upgrade_cap. Цей об'єкт виконує функцію он-ланцюгової можливості, яка надає виключні повноваження для оновлення розгорнутого пакета. Без володіння upgrade_cap ніхто не зможе оновити пакет, таким чином захистивши його від несанкціонованих змін.

Коли ви публікуєте пакет за допомогою Sui CLI:

власний клієнт публікує --path. /мой_пакет --газ-бюджет 10000

Система створює об'єкт upgrade_cap і повертає його ідентифікатор об'єкта. Цей об'єкт повинен бути включений у будь-яку транзакцію оновлення, наприклад:

оновлення клієнта sui - пакет. <upgrade_cap_object_id>/новий_пакет --оновлення-кришка --газ-бюджет 10000

Щоб убезпечити свій пакет:

  1. Захистіть upgrade_cap: зберігайте його надійно в апаратному гаманці або гаманці мультиsig, щоб переконатися, що лише авторизовані особи можуть підписувати транзакції оновлення.

  2. Використовуйте гаманці multisig для авторитету оновлення: загорніть upgrade_cap всередині об'єкта гаманця multisig. Для цього потрібно кілька підписів, перш ніж транзакція оновлення буде прийнята, додаючи рівень безпеки.

  3. Впроваджуйте контроль управління поза ланцюгом: координуйте оновлення з процесами схвалення поза ланцюгом, щоб уникнути шахрайських оновлень.

  4. Не передавайте upgrade_cap неавторизованим сторонам і не виставляйте його в незахищених середовищах.

  5. Використовуйте елементи керування доступом для конкретного середовища. Наприклад, обмежте операції оновлення певними середовищами розгортання або білими списками IP-адрес у вашій операційній інфраструктурі.

  6. Аудит транзакцій оновлення: Відстежуйте блокчейн на наявність будь-яких несанкціонованих або несподіваних викликів оновлення, щоб негайно реагувати

Якщо ви втратите контроль над upgrade_cap, ваш пакет може бути оновлений будь-ким, хто його тримає, що порушує цілісність вашого контракту. І навпаки, якщо ви повністю втратите upgrade_cap і не маєте резервної копії, ви більше не зможете оновити пакет, фактично заморожуючи його стан.

На відміну від шаблонів оновлення проксі-сервера Ethereum, де можливість оновлення закодована в логіці контракту, Sui використовує явний об'єкт можливостей. Ця конструкція підвищує прозорість безпеки, прив'язуючи повноваження щодо оновлення безпосередньо до ланцюгового об'єкта, яким ви керуєте.

У вашому коді Move upgrade_cap не відображається, оскільки дозволи на оновлення керуються поза логікою контракту, але це має вирішальне значення для транзакцій розгортання та оновлення через CLI або SDK.

Приклад перевірки можливості оновлення вашого пакета:

власний клієнт отримує пакет <package_id>

Це покаже метадані пакета, включаючи об'єкт upgrade_cap.

Дотримуючись цих практик, ви гарантуєте, що оновлення пакетів суворо контролюється, зменшуючи ризики несанкціонованих змін та підтримуючи довіру користувачів до ваших смарт-контрактів.

7
Найкраща відповідь
Коментарі
.
Ashford.
Jul 31 2025, 06:35

Несанкціоновані оновлення в мережі Sui (переміщення)

Щоб запобігти несанкціонованому оновленню пакету Move в мережі Sui, вам потрібно переконатися, що тільки довірені об'єкти або адреси можуть виконувати оновлення. Це робиться за допомогою upgrade_capмеханізму**** і шляхом ретельного контролю, хто має можливість оновити ваш пакет.

Ключові поняття:

*** upgrade_cap**: Можливість, яка обмежує, хто може оновити пакет. Ви можете встановити та перевірити upgrade_capрозгортання під час контракту. *Процес оновлення контракту: Контракти Sui після розгортання можна оновити, але вам потрібно контролювати, хто може запустити ці оновлення.

Кроки для запобігання несанкціонованому оновленню:

1.Встанов upgrade_capити: Під час розгортання пакета Move визначте обмеження, upgrade_capхто може оновити ваш контракт. 2.Надання дозволів на оновлення: надайте можливість оновлення лише для довірених адрес (наприклад, адміністраторів).

Приклад переміщення коду:

module MyPackage {
    use 0x1::UpgradeCap;

    public fun initialize(owner: address) {
        let cap = UpgradeCap::new(owner);  // Create upgrade capability for the owner
        // Store the upgrade cap in a resource or object
    }

    public fun upgrade(owner: address) {
        // Only the owner (who has the upgrade cap) can call this function
        UpgradeCap::assert_cap(&cap, owner); // Ensure the caller has the upgrade cap
        // Perform the upgrade logic here
    }
}

upgrade_cap### Приклад CLI для налаштування:

Під час публікації або розгортання пакета Move ви можете пере upgrade_capдати ідентифікатор клієнту Sui:

sui client publish --gas-budget 10000 --upgrade-cap <upgrade-cap-id>

Поширені помилки:

*Неправильне пов'язання upgrade_cap: Якщо можливість оновлення не встановлена правильно, несанкціоновані адреси можуть випадково отримати дозвіл на оновлення контракту. *Неправильна адреса для оновлення: Переконайтеся, що лише авторизовані адреси (ті, що upgrade_capмістять) можуть виконувати оновлення.

Найкращі практики:

*Обмежити можливості оновлення: надайте лише upgrade_capдовіреним адресам або адміністраторам. *Тест на Testnet/Localnet: Завжди перевіряйте логіку оновлення в локальних/тестових мережах, щоб переконатися, що несанкціоновані оновлення запобігають несанкціонованому оновленню. *Надійно зберігайте upgrade_cap: Переконайтеся, що адреса, що містить можливість оновлення, надійно керується.

Контролюючи upgrade_capта ретельно обмежуючи, хто може запускати оновлення, ви можете уникнути несанкціонованих оновлень та гарантувати, що ваш контракт залишається безпечним після розгортання.

7
Коментарі
.
Benjamin XDV.
Jul 31 2025, 09:44

Щобскасувати авторизацію оновленняпакета Move у Sui, ви повинніскасувати або записати upgrade_capоб'єкт, оскільки ця можливість є єдиним механізмом авторизації оновлення пакетів. Після того, як upgrade_capпакунок буде знищений (наприклад, через public entry fun burnMove), пакет стаєнезмінним постійном, оскільки Sui здійснює суворий контроль оновлень на рівні протоколу. Це відрізняється від ланцюгів EVM, де можливість оновлення залежить від шаблонів проксі або змінного сховища - модель SUI забезпечує детерміновану безпеку, явно прив'язуючи оновлення до володіння можливостями. Найкраща практика полягає у впровадженніобгортки, керованої управління(наприклад,AdminCap) навколо upgrade_capпрограмованого відкликання, а не спалювання його безпосередньо, щоб забезпечити майбутню децентралізацію.

6
Коментарі
.
theking.
Jul 30 2025, 11:25

Щоб несанкціоновити або вимкнути оновлення пакету Move в мережі Sui, вам потрібно знищити або перенести UpgradeCapоб'єкт, який був створений під час початкового розгортання пакета. Це UpgradeCapспеціальний об'єкт, який надає дозвіл на оновлення цього конкретного пакету. Без цієї можливості будь-які майбутні оновлення неможливі.

Щоб запобігти оновленню, ви можете перенести адресу UpgradeCapна недоступну адресу (наприклад0x0) або знищити її за допомогою функції переміщення, яку ви керуєте. Наприклад, якщо ви хочете зробити контракт незмінним, додайте public entry fun burn_upgrade_cap(cap: UpgradeCap)функцію у свій модуль і просто викликайте її після розгортання. Після згорання оновлення назавжди відключаються.

Ось зразок фрагмента Move для запису:

public entry fun burn_upgrade_cap(cap: UpgradeCap) {
    sui::package::delete_upgrade_cap(cap);
}

Якщо ви розгортаєте через CLI, ви можете викликати цю функцію запису після публікації:

sui client call \
  --package <your_package_id> \
  --module <your_module> \
  --function burn_upgrade_cap \
  --args <upgrade_cap_object_id>

Відключення оновлень є важливим, якщо ви хочете назавжди заблокувати логіку смарт-контракту з міркувань безпеки або управління. Після того, як шапка буде знищена або переміщена на адресу без приватного ключа, пакет повністю незмінний.

5
Коментарі
.
Paul.
Paul4310
Jul 31 2025, 05:36

Щоб запобігти несанкціонованому оновленню пакета Move в Sui, ви можете впровадити контроль доступу для процесу оновлення. Зокрема, ви можете використовувати upgrade_cap(можливість оновлення) і переконатися, що вона надійно контролюється довіреною організацією або обліковим записом.

Ключові поняття:

upgrade_cap*Можливості оновлення: Керуйте тим, хто може оновити пакет Move, асоціюючи його з надійною адресою. *Контроль доступу: дозволяйте лише обліковому запису, який має можливість оновлення, запускати оновлення.

Найкращі практики:

1.Безпечне upgrade_capволодіння: надайте права на оновлення лише довіреним адресам (наприклад, обліковому запису розгортника). 2.Використання підпису: впроваджуйте логіку для перевірки підписанта під час процесу оновлення, щоб переконатися, що оновлення можуть виконувати лише авторизовані користувачі.

Приклад коду:

module MyModule {
    use sui::object::{Object, upgrade_cap};

    public fun upgrade(beneficiary: &signer) {
        let cap = upgrade_cap::get_cap(beneficiary);
        assert!(cap.is_some(), 0); // Ensure the signer is authorized
        // Logic for upgrading the contract
    }
}

Використання CLI:

Використовуйте Sui CLI для безпечного публікації та керування оновленнями:

sui client publish --upgrade --package <package-id> --capability <upgrade-cap-id>

Поширені помилки, яких слід уникати:

*Вільний контроль доступу: Уникайте присвоєння недовіреним обліковим запи upgrade_capсам. *Несумісність стану: Переконайтеся, що оновлення не порушує існуючі стани об'єктів або структури даних. Завжди спочатку тестуйте на локальній мережі/testnet.

5
Коментарі
.
Arnold.
Arnold3036
Jul 31 2025, 08:18

Щоб запобігти несанкціонованому оновленню пакета Move:

####1. Зробіть пакет незмінним

// During publishing, set `UpgradePolicy` to `immutable`  
let upgrade_cap = package::claim_and_keep(otw);  
package::make_immutable(upgrade_cap);  // 🔐 Burn upgrade capability  

-Ефект: Подальші оновлення не допускаються (наприклад, контракти EVM).

####2. Безпечне керуван UpgradeCapня Якщо потрібні оновлення: -Передача на upgrade_capмультисигн/DAO:

 transfer::transfer(upgrade_cap, @multisig_address);  

-Використовувати власну логіку авторизації:

 public entry fun upgrade(  
   _: &AdminCap,  // Requires admin permission  
   upgrade_cap: &mut UpgradeCap,  
   new_package: vector<u8>  
 ) { package::upgrade(upgrade_cap, new_package); }  

####Приклад CLI (опублікувати незмінно)

sui client publish --gas-budget 100000000  
# Then call `make_immutable` with the returned `upgrade_cap` ID  

###Ключові відмінності від EVM UpgradeCap-Sui: Можливість оновлення є оптом (через). -EVM: Контракти незмінні за замовчуванням (немає власного механізму оновлення).

###Поширені підводні камени 1.Втрати upgrade_cap: Перекази на мертву адресу = незворотні. 2.Надпривілейовані оновлення: уникайте надання прав на оновлення EOA.

4
Коментарі
.
shamueely.
Jul 30 2025, 11:31

UpgradeCapЩоб переконатися, що ніхто не зможе оновити пакет Move в мережі Sui, включаючи вас самих, вам потрібно відкликати повноваження, прив'язані до об'єкта пакета. Це об'єкт, який контролює дозвіл на майбутні оновлення. Якщо ви видалите або зробите цей об'єкт недоступним, пакунок стає незмінним і більше ніколи не може бути змінений.

Ви можете зробити це безпечно, використовуючи sui::package::delete_upgrade_capфункцію у вашому коді переміщення. Ось простий приклад, який ви можете додати до свого модуля:

use sui::package;
use sui::package::UpgradeCap;

public entry fun lock_package(cap: UpgradeCap) {
    package::delete_upgrade_cap(cap);
}

Потім, розгорнувши пакет, виконайте цю функцію в транзакції за допомогою Sui CLI або SDK:

sui client call \
  --package <your_package_id> \
  --module <your_module_name> \
  --function lock_package \
  --args <upgrade_cap_object_id> \
  --gas-budget 100000000

Таким чином, програма UpgradeCapспалюється, а це означає, що вона більше не існує в мережі, і ніхто не може авторизувати чергове оновлення. Це найкраща практика, якщо ви хочете забезпечити незмінність коду, особливо для готових до виробництва контрактів DeFi, стандартів NFT або будь-якої логіки, де користувачі покладаються на недовірену, заблоковану поведінку.

Для архітектурного контексту: на відміну від EVM, де смарт-контракти незмінні за замовчуванням, Sui дозволяє оновлювати пакети, що надає гнучкість, але також вводить складність управління. Щоб «скасувати авторизацію» оновлень, ви повинні явно знищити ключ, який дозволяє їх.

Детальніше читайте в офіційній документації щодо оновлення пакету Sui тут: https://docs.sui.io/build/packages-and-upgrades#making-packages-immutable

3
Коментарі
.
Alya.
Alya-14
Jul 30 2025, 17:29

Щоб запобігти несанкціонованому оновленню пакету Move в Sui,знищуйте або заблокуйте upgrade_capоб'єктпісля публікації.

upgrade_cap(from0x2::package::UpgradeCap) - це першокласний об'єкт, який надає повноваження щодо оновлення. Якщо він залишається на адресі видавця, кожен, хто має доступ, може оновити пакет.

Найкращі практики:

-Для незмінних контрактів: спалити можливість:

 public entry fun burn_upgrade_cap(cap: package::UpgradeCap) {
     package::discard(cap); // Destroys the capability
 }

-Для керованих оновлень: Перенесіть на upgrade_capмодуль multisig або DAO замість того, щоб зберігати його в одному обліковому записі.

  • Ніколи не вистав upgrade_capляйте в громадських функціях без контролю доступу.

Перевірка CLI:

sui client object --id [PACKAGE_ID]  # Look for associated UpgradeCap object

Після того, як пакет upgrade_capбуде знищений, пакет стаєназавжди незмінним— це еквівалент Sui «блокування» контракту (наприклад, моделі оновлення EVM).

Цей механізм є унікальним для об'єктно-орієнтованої моделі Sui: дозвіл на оновлення надається власністю об'єкта, а не ролями адміністратора або логікою в рамках контракту.

3
Коментарі
.
Evgeniy CRYPTOCOIN.
Jul 31 2025, 09:12

Щоб запобігти несанкціонованому оновленню в Sui:

1.Спалити UpgradeCap— знищити його після розгортання для незмінності. 2.Замкнути init— Не діліться шапкою, якщо потрібна постійна незмінність.

###Приклад переміщення:

public fun lock_forever(cap: UpgradeCap) {  
    sui::package::make_immutable(cap) // Burns cap  
}  

Ключові примітки: ✔ БезUpgradeCap, ніякі оновлення неможливі. ✔ На відміну від EVM, Sui дозволяє оборотну незмінність.

Альтернатива CLI:

sui client call --function lock_forever --args <CAP_ID>  
  • (Попередження: Постійний, якщо ви не плануєте заздалегідь методи відновлення. ) *
3
Коментарі
.
290697tz.
Jul 30 2025, 12:30

Щоб запобігти несанкціонованому оновленню пакета Move на Sui, основним механізмом є об'єкт upgrade_cap. Цей об'єкт можливостей надає ексклюзивні повноваження для оновлення розгорнутого пакета. Не володіючи upgrade_cap, ніхто не може оновити пакет, забезпечуючи безпеку.

Коли ви публікуєте пакет через Sui CLI:

власний клієнт публікує --path. /мой_пакет --газ-бюджет 10000

Створюється і повертається об'єкт upgrade_cap. Цей ідентифікатор об'єкта повинен бути вказаний під час оновлення пакета:

оновлення клієнта sui - пакет. <upgrade_cap_object_id>/новий_пакет --оновлення-кришка --газ-бюджет 10000

Щоб убезпечити процес оновлення:

  1. Зберігайте upgrade_cap надійно, наприклад, у апаратному гаманці або гаманці multisig.

  2. Використовуйте гаманець multisig для зберігання upgrade_cap, тому для оновлення потрібно декілька підписів.

  3. Уникайте спільного використання ідентифікатора об'єкта upgrade_cap або публічного оприлюднення його.

  4. Впроваджуйте позаланцюгове управління, щоб затвердити оновлення перед виконанням.

  5. Обмежте доступ до оновлення за допомогою елементів керування середовищем або включення до білого списку інфраструктури.

  6. Моніторинг транзакцій блокчейну для виявлення несанкціонованих

  7. Надійно створіть резервну копію upgrade_cap, щоб уникнути втрати можливості оновлення.

  8. Пам'ятайте, що втрата upgrade_cap означає, що ви більше не зможете оновити свій пакет.

  9. На відміну від проксі-серверів EVM, управління оновленням Sui керується окремим об'єктом, а не логікою контракту.

  10. Сам код Move не містить логіки оновлення; він обробляється зовні через upgrade_cap.

  11. Програма upgrade_cap прив'язана до метаданих пакунка і видима під час запиту інформації про пакет:

власний клієнт отримує пакет <package_id>

  1. Завжди перевіряйте право власності на upgrade_cap перед спробою оновлення.

  2. При оновленні ідентифікатор пакета залишається постійним; змінюється лише код.

  3. Несанкціоноване володіння upgrade_cap дозволяє зловмисне оновлення.

  4. Використовуйте механізми контролю доступу в операційному середовищі для захисту транзакцій оновлення.

  5. Спроектуйте свій конвеєр CI/CD, щоб вимагати ручного затвердження кроків для оновлення.

  6. Відстежуйте, хто має upgrade_cap у вашій команді чи організації для підзвітності.

  7. Ви можете перенести об'єкт upgrade_cap на інший обліковий запис, якщо потрібно, але робіть це обережно.

  8. Зберігайте операції з модернізації газоефективними, вказуючи відповідні бюджети газу.

  9. Поєднання мережевого керування upgrade_cap з управлінням поза ланцюгом є найкращою практикою для безпечного оновлення пакетів на Sui.

2
Коментарі
.
Jeff.
Jeff2046
Aug 23 2025, 08:54

To prevent unauthorized upgrades of a Move package on Sui, the core mechanism is the upgrade_cap object. This capability object grants exclusive authority to upgrade a deployed package. Without possessing the upgrade_cap, no one can upgrade the package, ensuring security.

When you publish a package via Sui CLI:

sui client publish --path ./my_package --gas-budget 10000

An upgrade_cap object is created and returned. This object ID must be provided when upgrading the package:

sui client upgrade --package ./new_package --upgrade-cap <upgrade_cap_object_id> --gas-budget 10000

To secure the upgrade process:

Store the upgrade_cap securely, such as in a hardware wallet or multisig wallet.

Use a multisig wallet to hold the upgrade_cap so multiple signatures are required for upgrades.

Avoid sharing the upgrade_cap object ID or exposing it publicly.

Implement off-chain governance to approve upgrades before execution.

Restrict upgrade access with environment controls or infrastructure whitelisting.

Monitor blockchain transactions to detect unauthorized upgrade attempts.

Back up the upgrade_cap securely to avoid losing upgrade ability.

Remember that losing the upgrade_cap means you cannot upgrade your package anymore.

Unlike EVM proxies, Sui’s upgrade control is managed by a distinct object, not contract logic.

The Move code itself does not hold upgrade logic; it's handled externally via the upgrade_cap.

The upgrade_cap is tied to the package’s metadata and visible when querying package info:

sui client get-package <package_id>

Always verify the upgrade_cap ownership before attempting upgrades.

When upgrading, the package ID remains constant; only the code changes.

Unauthorized possession of the upgrade_cap allows malicious upgrades.

Use access control mechanisms in your operational environment to protect upgrade transactions.

Design your CI/CD pipeline to require manual approval steps for upgrades.

Track who holds the upgrade_cap in your team or organization for accountability.

You can transfer the upgrade_cap object to another account if needed, but do so cautiously.

Keep upgrade transactions gas-efficient by specifying appropriate gas budgets.

Combining on-chain upgrade_cap control with off-chain governance is the best practice for secure package upgrades on Sui.

2
Коментарі
.
Bekky.
Bekky1762
Jul 31 2025, 10:29

###1. Основний механізм безпеки Sui використовуєcapsдля оновлення (UpgradeCap) для контролю змінності пакетів. На відміну від незмінних контрактів EVM, Sui дозволяє модернізувати, але з суворим контролем власності.

####Ключові властивості

ОсобливістьОпис
UpgradeCapПередаваний об'єкт, що надає права на оновлення
ПолітикиБітові прапори, що визначають дозволені зміни (зворотно-сумісні, адитивні, порушні)
Перевірка дайджестЗабезпечує відповідність байт-коду очікуваним хешем

###2. Патерни впровадження

####Основний незмінний пакет

module my_pkg::governance {
    use sui::package;
    use sui::transfer;
    use sui::tx_context;

    // Burn upgrade cap at initialization
    public fun init(ctx: &mut TxContext) {
        let (upgrade_cap, _) = package::claim_upgrade_cap(ctx);
        package::burn_upgrade_cap(upgrade_cap); // Permanent immutability
    }
}

####Оновлення, керовані DAO

module my_pkg::dao {
    use sui::voting;
    use sui::package;

    struct DaoCap has key, store {
        id: UID,
        upgrade_cap: UpgradeCap,
        threshold: u64
    }

    public entry fun authorize_upgrade(
        dao: &mut DaoCap,
        proposal_id: ID,
        policy: u8,
        digest: vector<u8>,
        ctx: &mut TxContext
    ) {
        assert!(voting::is_approved(proposal_id, dao.threshold), EACCESS_DENIED);
        package::authorize_upgrade(&mut dao.upgrade_cap, policy, digest);
    }
}

###3. Примусове виконання CLI

####Розгорнути як незмінний

sui client publish --gas-budget 1000000000 --with-upgrade-capability false

####Перевірте незмінність

sui client object <UPGRADE_CAP_ID> --json | grep "burned"
# Expected: "burned": true

###4. Найкращі практики безпеки

####Матриця політики оновлення | Прапор політики | Дозволені зміни | Рекомендовано для | | -----------------------------| -----------------| | 0x1(СУМІСНИЙ) | Тільки виправлення помилок | Стабільні протоколи | | 0x3(ADDITIVE) | Нові функції | Еволюційні системи | | 0x7(BREAKING) | Повні зміни | Ранній розвиток |

####Захист від декількох сіг

module my_pkg::multisig {
    struct UpgradeVault has key {
        id: UID,
        cap: UpgradeCap,
        required: u8,
        approvals: vector<address>
    }

    public entry fun approve(
        vault: &mut UpgradeVault,
        signer: &signer
    ) {
        let addr = signer::address_of(signer);
        assert!(!vector::contains(&vault.approvals, &addr), EALREADY_APPROVED);
        vector::push_back(&mut vault.approvals, addr);
        
        if (vector::length(&vault.approvals) >= vault.required) {
            package::authorize_upgrade(&mut vault.cap, POLICY_ADDITIVE, digest);
        }
    }
}

###5. Вектори атаки та пом'якшення наслідків

| Загроза | Рішення | Приклад переміщення | | ------------------| --------------| struct TimedCap { unlock_epoch: u64 }|Вкрадена шапка| Оновлення тимчасового блокування | | assert!(digest == expected_digest, EINVALID)|Зловмисне оновлення| Потрібна перевірка дайджесту | | required = 5/7|Поглинання управління| Прогресивна децентралізація | Почніть з мультиsig |


###6. Стратегії тестування

####Сухий запуск локальної мережі

sui client publish --upgrade-policy 1 --dry-run
# Verify no upgrade cap is created

####Негативний тестовий випад

#[test(expected_failure = "EUPGRADE_NOT_AUTHORIZED")]
fun test_unauthorized_upgrade() {
    let (_, publisher) = package::claim_upgrade_cap(ctx);
    package::authorize_upgrade(&mut cap, 0x7, digest); // Should fail
}

###7. Моніторинг та відновлення

####Перевірка через мережі

// TypeScript SDK check
const isImmutable = await client.getObject({
    id: upgradeCapId,
    options: { showContent: true }
}).then(obj => obj.data?.content?.type === '0x2::package::UpgradeCap');

####Аварійне заморожування

public entry fun freeze_forever(cap: UpgradeCap) {
    transfer::freeze_object(cap); // Makes cap non-transferable
}

###Ключові диференціатори від EVM | Аспект | Суй | EVM | | -------------| -----| |Механізм оновлення| Об'єктно-центричні | Шаблони проксі | |Гранулярність| Контроль за упаковкою | Все або нічого | |Аудитор| Історія оновлень в мережі | Непрозорі проксі-адміністратори |

Для виробничих систем:

  1. Збері UpgradeCapгати в холодному сховищі
  2. Реалізуйтеmulti-sig з часовими затримками
  3. ВикористовуйтеSui Explorerдля моніторингу пропозицій щодо оновлення
1
Коментарі
.

Ви знаєте відповідь?

Будь ласка, увійдіть та поділіться нею.