Sui.

Пост

Поделитесь своими знаниями.

SuiLover.
Jul 30, 2025
Экспертные Вопросы и Ответы

Как я могу несанкционированно обновить пакет Move?

Я пытаюсь разобраться в этом аспекте сети Sui, потому что занимаюсь разработкой, отладкой или развертыванием чего-то, затрагивающего эту область. Мне нужно подробное объяснение работы этого механизма или функции, а также соответствующего использования интерфейса командной строки, структуры кода Move или архитектурных концепций. Моя цель — получить достаточно ясности, чтобы применить эти знания в реальном проекте, будь то специальный смарт-контракт, система NFT, интеграция кошельков или инструмент DeFi. Сеть Sui обладает уникальными возможностями по сравнению с сетями EVM, поэтому мне особенно интересно, что её отличает и как это влияет на передовые практики разработки. Было бы полезно ознакомиться с образцами кода, примерами командной строки или типичными ошибками, особенно при использовании интерфейса командной строки Sui, SDK или развертывании в localnet/testnet. В конечном итоге я хочу избежать распространенных ошибок, следовать лучшим принципам безопасности и обеспечить, чтобы функциональность, над которой я работаю, работала должным образом в реальных условиях.

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

Ответы

14
BigSneh.
Jul 30 2025, 12:28

Для предотвращения несанкционированных обновлений пакета Move на Sui ключевым механизмом является объект upgrade_cap. Этот объект действует как сетевая функция, предоставляющая исключительные полномочия на обновление развернутого пакета. Без наличия upgrade_cap никто не сможет обновить пакет, тем самым защитив его от несанкционированных изменений.

При публикации пакета с помощью интерфейса командной строки Sui:

ваш клиент опубликует --path. /my_package --газовый бюджет 1000

Система создает объект upgrade_cap и возвращает идентификатор объекта. Этот объект должен быть включен в любую транзакцию обновления, например:

sui клиент upgrade --package. <upgrade_cap_object_id>/new_package --upgrade-cap --газ-бюджет 10000

Чтобы защитить ваш пакет, выполните следующие действия:

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

  2. Используйте кошельки с несколькими подписями в качестве полномочий на обновление: оберните upgrade_cap в объект кошелька с несколькими подписями. Для этого требуется несколько подписей, прежде чем транзакция обновления будет принята, что повышает уровень безопасности.

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

  4. Не передавайте upgrade_cap посторонним лицам и не раскрывайте его в небезопасных средах.

  5. Используйте средства управления доступом, специфичные для конкретной среды: например, ограничьте операции обновления определенными средами развертывания или белыми списками IP-адресов в операционной инфраструктуре.

  6. Аудит транзакций по обновлению: отслеживайте блокчейн на предмет несанкционированных или неожиданных запросов на обновление, чтобы оперативно реагировать на них.

Если вы потеряете контроль над пакетом upgrade_cap, ваш пакет может быть обновлен любым владельцем пакета, что поставит под угрозу целостность вашего контракта. И наоборот, если вы полностью потеряете upgrade_cap и у вас нет резервной копии, вы больше не сможете обновить пакет, фактически заморозив его состояние.

В отличие от моделей обновления прокси-серверов Ethereum, где возможность обновления закодирована в контрактной логике, Sui использует явный объект возможностей. Такой дизайн повышает прозрачность безопасности, привязывая полномочия по обновлению непосредственно к контролируемому вами объекту в сети.

В коде Move поле upgrade_cap не отображается, поскольку управление разрешениями на обновление осуществляется вне контрактной логики, но оно крайне важно при развертывании и обновлении транзакций с помощью интерфейса командной строки или SDK.

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

клиент sui get-package <package_id>

Это покажет метаданные пакета, включая объект upgrade_cap.

Следуя этим рекомендациям, вы обеспечиваете строгий контроль за обновлениями пакетов, снижая риски несанкционированных изменений и поддерживая доверие пользователей к вашим смарт-контрактам.

7
Лучший ответ
Комментарии
.
Ashford.
Jul 31 2025, 06:35

Несанкционированные обновления в сети Sui (перемещение)

Чтобы предотвратить несанкционированное обновление пакета Move в сети Sui, вам необходимо убедиться, что обновление разрешено только доверенным лицам или адресам. Это делается с помощью upgrade_capмеханизма****и тщательного контроля за тем, кто может обновить ваш пакет.

Ключевые понятия:

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

Шаги по предотвращению несанкционированных обновлений:

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### Пример настройки интерфейса командной строки:

При публикации или развертывании пакета 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уничтожения пакета (например, с помощью команды in public entry fun burnMove) пакет становитсянеизменным, поскольку Sui применяет строгий контроль за возможностью обновления на уровне протокола. В этом отличие от цепочек EVM, где возможность обновления зависит от шаблонов прокси-серверов или изменяемого хранилища. Модель Sui обеспечивает детерминированную безопасность, явно увязывая обновления с владением возможностями. AdminCapЧтобы обеспечить децентрализацию в будущем, лучше всего использовать программную оболочку отзыва (напримерupgrade_cap), а не прятать ее непосредственно под контролем правительства**.

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

Чтобы несанкционированно или отключить обновления пакета Move в сети Sui, необходимо уничтожить или перенести UpgradeCapобъект, созданный во время первоначального развертывания пакета. UpgradeCapЭто специальный объект, предоставляющий разрешение на обновление этого конкретного пакета. Без этой возможности будущие обновления невозможны.

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

Вот пример фрагмента Move для записи:

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

Если вы развертываете с помощью интерфейса командной строки, вы можете вызвать эту функцию ввода после публикации:

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
    }
}

Использование интерфейса командной строки:

Используйте интерфейс командной строки Sui для безопасной публикации обновлений и управления ими:

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

Распространенные ошибки, которых следует избегать:

upgrade_cap*Отсутствие контроля доступа: избегайте присвоения учетным записям, которым не доверяют. *Несовместимость состояний: убедитесь, что обновление не нарушает существующие состояния объектов или структуры данных. Всегда сначала тестируйте в локальной сети/тестовой сети.

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_capMultiSIG/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); }  

####Пример интерфейса командной строки (публикация неизменяема)

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функцию в коде Move. Вот простой пример, который вы можете добавить в свой модуль:

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

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

Затем после развертывания пакета выполните следующую функцию в транзакции с помощью интерфейса командной строки Sui или 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доступа.

Проверьте интерфейс командной строки:

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:

ваш клиент опубликует --path. /my_package --газовый бюджет 1000

Создан и возвращен объект upgrade_cap. Этот идентификатор объекта должен быть указан при обновлении пакета:

sui клиент upgrade --package. <upgrade_cap_object_id>/new_package --upgrade-cap --газ-бюджет 10000

Чтобы обезопасить процесс обновления, выполните следующие действия:

  1. Храните upgrade_cap безопасно, например, в аппаратном кошельке или кошельке с несколькими подписями.

  2. Используйте кошелек с несколькими подписями для хранения upgrade_cap, поэтому для обновлений требуется несколько подписей.

  3. Не сообщайте идентификатор объекта upgrade_cap и не публикуйте его в открытом доступе.

  4. Внедрите управление вне сети, чтобы утверждать обновления перед их внедрением.

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

  6. Отслеживайте транзакции в блокчейне для обнаружения несанкционированных попыток обновления.

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

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

  9. В отличие от прокси-серверов EVM, управление обновлениями в Sui осуществляется отдельным объектом, а не контрактной логикой.

  10. Сам код Move не содержит логики обновления; он обрабатывается извне с помощью upgrade_cap.

  11. upgrade_cap привязан к метаданным пакета и виден при запросе информации о пакете:

клиент sui: get-package <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. Основной механизм безопасности UpgradeCapSui используетupgrade caps() для управления изменчивостью пакетов. В отличие от неизменяемых контрактов 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(АКТУАЛЬНО)Полные измененияРанняя разработка

#####Защита от нескольких подписаний

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УправлениеПрогрессивная децентрализация

###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. Внедритемультиподпись с временными задержками
  3. ИспользуйтеSui Explorerдля отслеживания предложений по обновлению
1
Комментарии
.

Знаете ответ?

Пожалуйста, войдите в систему и поделитесь им.

Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.

1170Посты3665Ответы
Sui.X.Peera.

Заработай свою долю из 1000 Sui

Зарабатывай очки репутации и получай награды за помощь в развитии сообщества Sui.

Кампания вознагражденийАвгуст