Sui.

Publication

Partagez vos connaissances.

SuiLover.
Jul 30, 2025
Questions et Réponses avec des Experts

Quel est le rôle de upgrade_cap dans les packages Sui ?

J'essaie de comprendre cet aspect du réseau Sui parce que je suis en train de créer, de déboguer ou de déployer quelque chose qui touche à ce domaine. Je souhaite une explication détaillée du fonctionnement de ce mécanisme ou de cette fonctionnalité, ainsi que l'utilisation pertinente de la CLI, la structure du code Move ou les concepts architecturaux. Mon objectif est d'obtenir suffisamment de clarté pour appliquer ces connaissances à un projet réel, qu'il s'agisse d'un contrat intelligent personnalisé, d'un système NFT, d'une intégration de portefeuille ou d'un outil DeFi. Le réseau Sui possède des caractéristiques uniques par rapport aux chaînes EVM. Je m'intéresse donc particulièrement à ce qui le distingue et à la manière dont cela affecte les meilleures pratiques de développement. Il serait utile de disposer d'exemples de code, d'exemples de ligne de commande ou d'erreurs typiques à surveiller, en particulier lors de l'utilisation de la CLI Sui, du SDK ou d'un déploiement sur localnet/testnet. En fin de compte, je souhaite éviter les erreurs courantes, suivre les meilleurs principes de sécurité et m'assurer que les fonctionnalités sur lesquelles je travaille se comportent comme prévu dans des conditions réalistes.

  • Sui
  • Transaction Processing
  • Move
7
12
Partager
Commentaires
.

Réponses

12
BigSneh.
Jul 30 2025, 12:16

Le upgrade_cap dans les packages Sui est un objet spécial qui contrôle l'autorité de mise à niveau d'un package Move publié. Lorsque vous publiez un package sur Sui, le système crée un objet upgrade_cap lié à ce package. Cet objet est détenu par l'éditeur ou l'autorité désignée et est nécessaire pour effectuer toute mise à niveau ou modification future du code du package. Sans le upgrade_cap, le package devient immuable, ce qui signifie que vous ne pouvez ni modifier ni remplacer ses modules. Cette conception assure des mises à niveau sécurisées et contrôlées et empêche les modifications non autorisées, ce qui est essentiel pour maintenir la confiance et la stabilité dans les contrats intelligents déployés.

Du point de vue de la CLI, lorsque vous publiez un package à l'aide de sui client publish, vous recevez l'ID du package et l'ID de l'objet upgrade_cap. Pour effectuer la mise à niveau, vous devez signer une transaction faisant référence au upgrade_cap actuel, puis le système publie une nouvelle version du package avec un nouvel objet upgrade_cap. Dans le code Move, vous ne manipulez pas directement le upgrade_cap, mais vos scripts de déploiement ou votre logique hors chaîne doivent le gérer de manière sécurisée.

Sur le plan architectural, le upgrade_cap incarne le contrôle de la propriété et des autorisations pour la gestion du cycle de vie des packages, distinguant ainsi le modèle de package de Sui des contrats ou proxys immuables d'Ethereum. La meilleure pratique consiste à stocker le upgrade_cap en toute sécurité hors ligne ou dans un portefeuille multisig pour éviter tout compromis. En outre, une gestion minutieuse des versions et des tests sont nécessaires avant la mise à niveau, car cela affecte tous les utilisateurs en fonction du package.

Les erreurs les plus courantes incluent la perte du fichier upgrade_cap, qui vous empêche d'accéder aux mises à niveau, ou une mauvaise gestion de l'autorité, ce qui entraîne des risques de sécurité. À l'aide de la CLI Sui, vous pouvez interroger le upgrade_cap actuel d'un package ou soumettre des transactions de mise à niveau qui le consomment et le rééditent.

En résumé, le upgrade_cap est la clé cryptographique permettant l'évolution des packages sur Sui, permettant des mises à niveau contrôlées et autorisées tout en préservant la décentralisation et la sécurité. Il est essentiel de le gérer correctement pour les flux de travail de développement et de déploiement de contrats intelligents Sui prêts à la production.

6
Meilleure réponse
Commentaires
.
Paul.
Paul4180
Jul 31 2025, 05:27

In Sui, upgrade_capest utilisé pour gérer l'évolutivité des contrats intelligents, permettant aux développeurs de mettre à jour les contrats sans perdre de données. Il donne l'autorisation d'effectuer des mises à niveau de contrats et est généralement détenu par une adresse fiable.

Points clés :

*Control Upgrade : upgrade_capgarantit que seules les adresses autorisées peuvent déclencher des mises à niveau. *Code de déplacement : utilisé dans les modules Move pour gérer les mises à niveau. *Exemple de CLI :

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

Meilleures pratiques :

  • Testez les mises à niveau sur localnet/testnet.
  • Sécurisez-les upgrade_cappour empêcher tout accès non autorisé.
8
Commentaires
.
Ashford.
Jul 31 2025, 06:31

Rôle du réseau upgrade_capIn Sui

Objet : contrôle qui peut mettre à niveau un contrat ou un module intelligent.

*Ce qu'il fait : accorde des autorisations de mise à niveau à des adresses spécifiques (généralement des administrateurs). Il garantit que seules les entités autorisées peuvent modifier les contrats déployés.

Concepts clés :

*Move Language : upgrade_capest implémenté dans Move pour une gestion sécurisée des contrats. *Déploiement : spécifié lors du déploiement du contrat pour permettre les futures mises à niveau uniquement par des adresses autorisées.

Exemple de CLI :

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

Exemple de code de déplacement :

public fun grant_upgrade_cap() {
    let upgrade_cap = UpgradeCap::new();
    // Assign cap to authorized address
}

Problèmes courants :

*Erreurs d'autorisation : adresse non autorisée lors de la tentative de mise à niveau. *Capacités manquantes : assurez-vous que le réglage upgrade_capest correct lors du déploiement.

Meilleures pratiques :

*Restreindre upgrade_cap : limitez l'accès aux adresses fiables. *Testez dans Localnet/Testnet : assurez-vous du bon comportement avant le déploiement sur le réseau principal.

7
Commentaires
.
Benjamin XDV.
Jul 31 2025, 09:40

Le** upgrade_cap**de Sui sert de mécanisme d'autorisation pour les mises à niveau des packages, fonctionnant comme un objet de capacité unique qui accorde des droits de mise à niveau à son titulaire. Contrairement aux chaînes EVM où les contrats sont immuables, le système de mise à niveau de Sui nécessite cet objet pour modifier les packages publiés, offrant ainsi une mutabilité contrôlée tout en préservant la sécurité. upgrade_capLe titulaire du sui client upgradepeut autoriser les mises à niveau via la package::authorize_upgradecommande CLI ou par programmation via la fonction Move. Les meilleures pratiques consistent à stocker le contenu en toute sécurité upgrade_cap(souvent dans un Versioned``AdminCapemballage ou un emballage) et à mettre en œuvre des contrôles de propriété appropriés, car sa perte bloque définitivement la possibilité de mise à niveau, tandis que son exposition risque de provoquer des modifications non autorisées.

6
Commentaires
.
theking.
Jul 30 2025, 11:17

Dans le réseau Sui, il upgrade_capjoue un rôle essentiel en permettant des mises à niveau sécurisées et contrôlées des packages Move après leur déploiement initial. Lorsque vous publiez un package sur Sui, un objet de type UpgradeCapest créé et renvoyé. Cet objet est laseule autoritéqui autorise les futures mises à niveau du package, agissant effectivement comme une clé qui autorise la modification de son code.

Vous devez en rester propriétaire upgrade_capsi vous avez l'intention de mettre à niveau votre package ultérieurement. Si vous le transférez à une autre adresse ou si 0x0vous le gravez (par exemple, en l'envoyant à), aucune autre mise à niveau n'est possible. Cette conception impose l'immuabilité à moins que le créateur du package n'y consente explicitement.

Pourquoi UpgradeCap est important

Le modèle centré sur les objets de Sui introduit ce concept pour faire la distinction entre les packages immuables et les packages évolutifs. Les packages qui n'ont pas accès à ceux-ci upgrade_capsont considérés comme définitivement immuables. Cela contraste avec les chaînes EVM où les contrats ne sont modifiables que si delegatecalldes proxys ou des modèles évolutifs sont créés manuellement.

Exemple de flux de travail de mise à niveau

Lorsque vous publiez un package :

sui client publish --path . --gas-budget 100000000

La sortie inclut :

  • Numéro du colis
  • ID de l'objet UpgradeCap

Pour effectuer une mise à niveau ultérieure :

sui client upgrade \
  --package <original_package_id> \
  --module-upgrade-path <new_module_path> \
  --upgrade-cap <upgrade_cap_id> \
  --gas-budget 100000000

Utilisation de UpgradeCap dans Move

Dans vos modules Move, vous pouvez protéger les mises à niveau ou les transitions sensibles à l'aide de l'objet de capacité :

public entry fun secure_upgrade(upgrade_cap: &UpgradeCap, ctx: &mut TxContext) {
    // logic that uses upgrade_cap as proof of authority
}

Ou détruisez-le si vous souhaitez finaliser le package :

transfer::public_transfer(upgrade_cap, @0x0);

Cela vous empêche définitivement de mettre à jour le package.

Meilleures pratiques

*Conservez-les upgrade_capdans un portefeuille sécurisé ou un module de gouvernancesi vous prévoyez de futures mises à niveau. ***Gravez le upgrade_cap**si vous voulez que votre package soit immuable, ce qui est courant pour les contrats financiers ou les NFT afin de renforcer la confiance des utilisateurs. *Intégrez la logique de mise à niveau dans la gouvernance, de sorte qu'un DAO ou un multisig approuve les mises à niveau au lieu d'une clé privée unique. *Évitez de divulguer la pièce d'upgrade_capidentité, car possession équivaut à autorité en Sui.

Erreurs courantes

*Manquant upgrade_caplors de la mise à niveau→ entraîne des erreurs « autorisation refusée ». *Transfert accidentel vers null→ Votre colis est bloqué pour toujours. *Essayer d'appeler la mise à niveau sur des packages immuables→ Le système rejettera la transaction.

En savoir plus

En fin de compte, cela upgrade_capreprésente l'engagement de Sui en faveur d'une autorité explicite et d'un contrôle précis de l'évolution de l'État et du code. Comprendre comment l'utiliser, le stocker et le révoquer est essentiel pour créer des contrats intelligents sécurisés et maintenables dans l'écosystème Sui.

5
Commentaires
.
Alya.
Alya-14
Jul 30 2025, 17:27

Rôle de upgrade_capin Sui Packages

Il s'upgrade_capagit d'unobjet de capacitéqui contrôle les autorisations de mise à niveau des packages dans le système de mise à niveau centré sur les objets de Sui. Contrairement aux chaînes EVM qui utilisent des modèles de proxy, Sui gère les mises à niveau au niveau du package via cet objet de fonctionnalité dédié.

Mécanique de base

Lors de la publication d'un package :

sui client publish --gas-budget 100000000 --path ./move_package

La transaction renvoie :

  1. ID du package (identifiant immuable)
  2. upgrade_capobjet (0x2 : :package : :UpgradeCap)

Cet objet de capacité :

  • Est unobjet Sui de première classequi peut être possédé, transféré ou partagé
  • Doit être inclus en entrée dans toute transaction de mise à niveau
  • Contient l'ID du package pour lequel les mises à niveau sont autorisées

Détails techniques clés

1.Modèle de sécurité :

  • Seul le propriétaire du upgrade_cappeut mettre à niveau le package
  • Suit le modèle de propriété des objets de Sui (aucune autorisation basée sur le signataire)
  • Peut être géré dans le cadre de contrats multisignatures ou de délais

2.Processus de mise à niveau :

  sui client upgrade --package [PACKAGE_ID] \
                    --upgrade-cap [UPGRADE_CAP_ID] \
                    --gas-budget 200000000 \
                    --path ./updated_package

3.Schémas de mouvement critiques :

  // Storing upgrade_cap in a publisher struct
  struct Publisher has key {
      id: UID,
      upgrade_cap: package::UpgradeCap,
  }
  
  // Upgrading (must use &mut reference)
  public entry fun upgrade(
      publisher: &mut Publisher,
      new_package: vector<u8>,
      new_modules: vector<vector<u8>>,
      ctx: &mut TxContext
  ) {
      package::upgrade_package(
          &mut publisher.upgrade_cap,
          new_package,
          new_modules,
          ctx
      )
  }

Avantages spécifiques à Sui-Specific par rapport à EVM

-Aucun modèle de proxy nécessaire : les mises à niveau se produisent au niveau du package, pas au niveau du contrat -Rétrocompatibilité : les objets existants restent valides après les mises à niveau -Sécurité basée sur les capacités : utilise le modèle de propriété des objets de Sui au lieu des rôles d'administrateur -Gouvernance transparente : ils upgrade_cappeuvent être placés dans des trésoreries multisigs ou DAO

Erreurs courantes et solutions

ErreurCauseCorriger
UpgradeCap not foundObjet de capacité manquantVérifiez que vous utilisez le bon ID upgrade_cap
Package ID mismatchUtilisation d'un mauvais upgrade_capVérifiez que le package : :id (&cap) correspond au package cible
Insufficient gasLa mise à niveau nécessite plus d'essenceAugmenter le budget d'essence (les mises à niveau coûtent 2 à 3 fois les taxes normales)
Module compatibility errorChangements majeurs dans la nouvelle versionAssurez-vous que les mises en page des structures restent compatibles

Meilleures pratiques

  1. Pour la production : transfert upgrade_capvers un portefeuille multisig
  2. Pour les contrats immuables : gravez la fonctionnalité après la publication
  3. Validez toujours la propriété de la capacité : object::is_owner(&cap, tx_context::sender(ctx))
  4. Émettre des événements lors des mises à niveau : event::emit(UpgradeEvent { package_id, version })

Il upgrade_capincarne le modèle de sécurité orienté objet de Sui : les autorisations de mise à niveau sont traitées comme des actifs transférables plutôt que comme des rôles d'administrateur codés en dur, offrant des options de gouvernance flexibles tout en préservant la sécurité.

5
Commentaires
.
290697tz.
Jul 30 2025, 12:18

Le upgrade_cap dans Sui est un objet spécial qui représente l'autorité de mettre à niveau un package Move publié. Lorsque vous publiez un package à l'aide de la CLI Sui, le système crée automatiquement un objet upgrade_cap associé à ce package. Cet objet contrôle la possibilité de mettre à niveau ou de modifier le package après son déploiement initial. Si vous ne maintenez pas le upgrade_cap, personne ne peut mettre à niveau le package, ce qui le rend immuable.

Par exemple, lors de la publication d'un package :

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

La sortie inclut l'ID de l'objet upgrade_cap. Cet objet doit être inclus dans les transactions de mise à niveau pour prouver l'autorité. Pour mettre à niveau le package, vous appelez :

<upgrade_cap_object_id>mise à niveau du client sui --package <new_package_path>--upgrade-cap --gas-budget 10000

Cette transaction consomme l'ancien upgrade_cap et en émet un nouveau pour le package mis à niveau. Le upgrade_cap applique un contrôle strict des autorisations sur le cycle de vie du package, garantissant que seules les parties autorisées peuvent modifier le code du contrat.

Du point de vue de Move, le code du package lui-même ne manipule pas directement le upgrade_cap car il est géré au niveau du protocole. Cependant, les développeurs doivent gérer cet objet en toute sécurité hors chaîne, en le stockant généralement dans des portefeuilles sécurisés ou des configurations multisig pour empêcher les mises à niveau non autorisées.

Un upgrade_cap perdu signifie que vous ne pouvez plus mettre à jour le package, bloquant ainsi le code pour toujours. Cela souligne l'importance de pratiques de gestion des clés sécurisées. De plus, la mise à niveau d'un package a un impact sur tous les utilisateurs qui en dépendent. Les mises à niveau doivent donc être testées de manière approfondie sur testnet ou localnet avant le déploiement.

Les packages Sui étant versionnés, le upgrade_cap est la clé pour passer d'une version à l'autre. Le système garantit des mises à niveau atomiques en liant la gestion des versions des packages à cette fonctionnalité.

Vous pouvez interroger le upgrade_cap associé à un package à l'aide de la CLI ou du SDK Sui :

sur le client get-package <package_id>

qui renvoie les détails du package, y compris le upgrade_cap actuel. La gestion sécurisée du upgrade_cap fait partie des meilleures pratiques des flux de travail de développement Sui afin d'éviter les modifications de code accidentelles ou malveillantes.

Contrairement aux contrats immuables ou aux modèles de mise à niveau des proxys d'Ethereum, le upgrade_cap de Sui est un objet de capacité explicite en chaîne contrôlant les mises à niveau. Cette conception améliore la transparence et la sécurité en faisant de l'autorité de mise à niveau un objet explicite du système.

Les développeurs doivent intégrer la gestion upgrade_cap à leurs pipelines de déploiement, généralement en scriptant le processus de mise à niveau pour inclure l'objet upgrade_cap et en s'assurant qu'il est signé par les bonnes clés.

4
Commentaires
.
shamueely.
Jul 30 2025, 11:30

Les upgrade_cappackages in Sui sont un objet spécial qui donne à son propriétaire le droit exclusif de mettre à jour un package Move publié. Lorsque vous déployez un package sur le réseau Sui, Sui génère un UpgradeCapobjet lié à votre compte. Cette fonctionnalité agit comme une clé d'accès sécurisée. Sans elle, personne (y compris vous) ne pourra mettre à jour le code de ce package à l'avenir.

Vous utilisez le upgrade_caplorsque vous appelez la upgradefonction fournie par le module système de Sui. La CLI vous permet d'effectuer des mises à niveau comme suit :

sui client upgrade \
  --package-path /path/to/your/package \
  --upgrade-capability <upgrade_cap_object_id> \
  --gas-budget 100000000

Vous devez transmettre l'ID de l'UpgradeCapobjet pour autoriser la transaction de mise à niveau. Si vous le perdez UpgradeCapou si vous le transférez vers une adresse inaccessible (telle que0x0), le package devient immuable car personne ne peut lancer une mise à niveau.

Si vous souhaitez désactiver délibérément les futures mises à niveau, vous pouvez inclure une fonction dans votre package telle que :

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

L'appel de cette fonction supprime la fonctionnalité et verrouille le code pour toujours. Ceci est recommandé pour les packages qui doivent être sécurisés ou gérés de manière externe.

Bonne pratique : sécurisez toujours vos données UpgradeCapet envisagez de les transférer vers un DAO ou un multisig si vous travaillez sur une infrastructure collaborative ou publique.

3
Commentaires
.
Arnold.
Arnold2956
Jul 31 2025, 08:13

upgrade_cap###Rôle de in Sui Packages upgrade_capIl s'agit d'unobjet de capacitéqui autorise la mise à niveau d'un package Move sur Sui. Il s'agit d'une fonctionnalité Sui unique qui permet unemutabilité contrôléepour les packages publiés, contrairement aux contrats immuables sur les chaînes EVM.


###Concepts clés 1.Ce qu'il fait :

  • Maintient le Publisheret UpgradePolicy(par exempleimmutable,compatible,arbitrary).
  • Nécessaire pour autoriser les mises à niveau des packages (par exemple, corrections de bugs, nouvelles fonctionnalités).

2.Pourquoi Sui est unique : upgrade_cap- Les contrats EVM sontimmuablesaprès le déploiement ; Sui autorise les mises à niveauavec gouvernance(via).

  • Les mises à niveau sontéconomes en gaz(seuls les modules modifiés sont republiés).

3.Implications en matière de sécurité :

  • Celui qui détient le upgrade_cappeut modifier la logique du package.
  • Bonne pratique :Transférez-le vers un multisig ou un DAOaprès le déploiement.

###Déplacer la structure du code ####1. Définition upgrade_capen init

module my_pkg::my_module {
  use sui::package;
  use sui::transfer;

  // Called once during package publish
  fun init(otw: &mut TxContext) {
    let (upgrade_cap, publisher) = package::claim(otw);
    transfer::transfer(upgrade_cap, tx_context::sender(otw)); // Give cap to deployer
  }
}

####2. Mise à niveau d'un package

module my_pkg::upgrader {
  use sui::package;

  // Requires the UpgradeCap
  public entry fun upgrade(
    upgrade_cap: &mut UpgradeCap,
    new_package: vector<u8>,
    otw: &mut TxContext
  ) {
    package::upgrade(upgrade_cap, new_package, otw);
  }
}
3
Commentaires
.
Evgeniy CRYPTOCOIN.
Jul 31 2025, 09:07

upgrade_capin Sui est unobjet cléqui contrôle les mises à niveau des packages.

###Points clés : 1.Droits d'administrateur— Seul le upgrade_captitulaire peut mettre à niveau le package. 2.Sécurité— Empêche les modifications non autorisées (contrairement aux contrats immuables d'Ethereum). 3. sui client upgradeUtilisation de la CLI— Obligatoire pour.

###Exemple de déplacement :

struct UpgradeCap has key, store { id: UID }  

###Meilleures pratiques : ✔ Stockez en toute sécurité (par exemple, multisig). ✔ Testez d'localnetabord les mises à niveau.

Pourquoi unique : Sui permet les mises à niveau (par rapport à l'immuabilité EVM).

  • (Perdre upgrade_cap= plus de mises à niveau !) *
3
Commentaires
.
Bekky.
Bekky1752
Jul 31 2025, 10:03

###1. Concept de base upgrade_capIl s'agit d'unobjet privilégiéqui contrôle les mises à niveau des packages dans Sui. Contrairement aux chaînes EVM où les contrats sont immuables, Sui permet une mutabilité contrôlée grâce à ce système basé sur les capacités.

###2. Propriétés clés

PropriétéDescription
PropriétaireSeul le titulaire peut autoriser les surclassements
TransférablePeut être envoyé à d'autres adresses
BurnableOption d'immuabilité permanente

###2. Implémentation de Move ####Structure de base

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

    // Generated during initial publish
    struct UpgradeCap has key, store { 
        id: UID 
    }

    // Initialize and transfer cap
    public fun init(ctx: &mut tx_context::TxContext) {
        let (upgrade_cap, publisher) = package::claim_upgrade_cap(ctx);
        transfer::transfer(upgrade_cap, tx_context::sender(ctx));
    }
}

####Flux de mise à niveau

module my_pkg::upgrader {
    use sui::package;
    use sui::upgrade_cap;

    public entry fun upgrade(
        cap: &mut upgrade_cap::UpgradeCap,
        policy: u8,
        digest: vector<u8>,
        ctx: &mut tx_context::TxContext
    ) {
        package::authorize_upgrade(cap, policy, digest);
        let new_pkg = package::make_upgrade_ticket(cap, policy, digest);
        // ... complete upgrade
    }
}

###3. Flux de travail CLI ####Publication initiale

sui client publish --gas-budget 1000000000
# Output includes UpgradeCap object ID

####Autoriser la mise à niveau

sui client call \
  --package <UPGRADE_CAP_PKG> \
  --module admin \
  --function authorize_upgrade \
  --args <UPGRADE_CAP_ID> 1 0x<COMPILED_PACKAGE_DIGEST> \
  --gas-budget 1000000000

####Exécuter la mise à niveau

sui client upgrade --upgrade-capability <UPGRADE_CAP_ID> \
  --gas-budget 1000000000

###4. Modèles de sécurité ####Imbrication des capacités

struct AdminCap has key {
    id: UID,
    upgrade_cap: UpgradeCap  // Delegatable
}

####Mises à niveau verrouillées dans le temps

module my_pkg::timelock {
    struct TimedUpgradeCap has key {
        cap: UpgradeCap,
        unlock_epoch: u64
    }

    public fun upgrade_when_ready(
        cap: &mut TimedUpgradeCap,
        ctx: &mut TxContext
    ) {
        assert!(tx_context::epoch(ctx) >= cap.unlock_epoch, ELOCKED);
        package::authorize_upgrade(&mut cap.cap, ...);
    }
}

###5. Pièges courants

ErreurSolution
MissingUpgradeCapEnregistrez le cap ID dans vos documents de déploiement
UnauthorizedUpgradetransfer::freeze_objectÀ utiliser pour verrouiller les capuchons
DigestMismatchRecompiler avec des dépendances identiques

###6. Politiques de mise à niveau

// Bitflags determining upgrade flexibility
const POLICY_COMPATIBLE: u8 = 0x1;  // Backwards-compatible
const POLICY_ADDITIVE: u8  = 0x2;   // New functions only
const POLICY_BREAKING: u8 = 0x4;    // Full changes

###7. Stratégie de test ####Localnet Dry-Run

sui client publish --upgrade-policy 7 --dry-run

####Simulation de mise à niveau

#[test_only]
module test {
    fun test_upgrade() {
        let (cap, _) = package::test_upgrade_cap();
        package::authorize_upgrade(&mut cap, ...);
        assert!(package::test_is_authorized(cap), 0);
    }
}

###Impact architectural 1.Gouvernance décentralisée :

  • Les DAO peuvent contenir des limites de mise à niveau shared- Schémas multi-sig via des objets

2.Préparation à l'entreprise :

  • Déploiements par étapes avec drapeaux politiques
  • Capacités de révocation d'urgence

3.Avantages DeVex :

  • Corriger les bugs après le déploiement
  • Migrations de stockage économes en gaz

Pour les systèmes de production :

1
Commentaires
.
24p30p.
24p30p2042
Jul 30 2025, 15:46

Dans Sui, upgrade_capil s'agit d'un objet spécial qui vous donne le droit de mettre à jour un package Move publié. Lorsque vous déployez un package avec--upgradeable, vous obtenez automatiquement un UpgradeCapobjet qui y est lié. Cet objet agit comme un bordereau d'autorisation : sans lui, vous ne pouvez pas envoyer de mises à niveau vers ce package. Vous devez conserver cet objet et le signer chaque fois que vous souhaitez mettre à jour le code, ce qui en fait un puissant mécanisme de contrôle d'accès pour le développement en chaîne.

Cette conception différencie Sui des chaînes EVM, où la logique de mise à niveau est souvent gérée par le biais de contrats proxy et de rôles d'administrateur distincts. Dans Sui, l'autorisation de mise à niveau est intégrée au système objet. Si vous créez une collection NFT, un contrat DeFi ou tout autre système nécessitant des mises à jour futures, cela UpgradeCapgarantit que seul le développeur de confiance (ou multisig) disposant de ce plafond peut appliquer ces modifications, réduisant ainsi le risque de mises à niveau non autorisées.

Pour créer un package évolutif, utilisez la CLI Sui :

sui client publish --path . --gas-budget 100000000 --with-unpublished-dependencies --upgradeable

Une fois publié, vous verrez un message upgrade_capdans la sortie comme celui-ci :

"createdObjects": [
  {
    "objectType": "0x2::package::UpgradeCap",
    "objectId": "0xabc123...",
    ...
  }
]

Pour mettre à jour le package ultérieurement, compilez-le dans un .jsoncondensé et exécutez :

sui client upgrade --package-id <PACKAGE_ID> --module <PATH_TO_COMPILED_MODULE> --upgrade-capability <CAP_OBJECT_ID> --gas-budget 100000000

Assurez-vous que l'identifiant de l'objet --upgrade-capabilitycorrespond à celui que vous avez obtenu lors de la première publication. Si vous perdez cet objet ou si vous oubliez de le protéger (par exemple en le transférant vers un portefeuille multisig), toute personne qui l'obtient peut modifier votre contrat.

Les erreurs courantes incluent l'oubli de stockageupgrade_cap, l'utilisation d'un condensé non valide ou la tentative de mise à niveau d'un package non évolutif. La meilleure pratique consiste à les stocker upgrade_capen toute sécurité, en particulier en production, et à les surveiller de près lors des audits.

Vous pouvez en savoir plus sur les upgrade_capmises à niveau des packages et les sécuriser dans la documentation officielle de Sui : https://docs.sui.io/build/package-upgrades

-1
Commentaires
.

Connaissez-vous la réponse ?

Veuillez vous connecter et la partager.

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

637Publications1665Réponses
Sui.X.Peera.

Gagne ta part de 1000 Sui

Gagne des points de réputation et obtiens des récompenses pour avoir aidé la communauté Sui à se développer.

Campagne de RécompensesAoût