Publication
Partagez vos connaissances.
📦 Analyse approfondie du module `sui : :package` : publication et mise à niveau de packages dans Move
Dans l'évolution rapide de la technologie blockchain, lelangage de programmation Movese distingue par sasécurité, saflexibilitéet sonauditabilité. L'une de ses principales forces est lagestion raffinée des packages de contrats intelligents.
Cet article explore en profondeur le sui::package
module, le moteur à l'origine de la publication, de la mise à niveau et de la maintenance des packages Move sur la blockchain Sui.
🔍 Présentation du module
sui::package
est la pierre angulaire de l'écosystème Move. Il fournit aux développeurs des outils et des interfaces robustes pour gérer les packagesde manière sécurisée et efficace.
📦 Déclaration et importations
module sui::package;
use std::ascii::String;
use std::type_name;
use sui::types;
Cela définit le module et intègre les bibliothèques standard Move essentielles et les modules natifs de SUI pour la logique complexe.
🧩 Structures de base et interfaces publiques
1. Publisher
Gère l'identité de l'éditeurd'un package.
Fonctions principales :
claim
claim_and_keep
burn_publisher
###2. UpgradeCap
Contrôle lacapacité de mise à niveaud'un package.
Champs clés :
package_id
version
policy
(politique de mise à niveau)
Fonctions principales :
upgrade_package
restrict
3. UpgradeTicket
Autorise unemise à niveau spécifique.
Fonctions principales :
ticket_package
ticket_policy
ticket_digest
##4. UpgradeReceipt
Publié après une mise à niveau réussie.
Fonctions principales :
receipt_cap
receipt_package
🚨 Constantes d'erreur
Aide les développeurs à déboguer avec clarté.
- ENotOneTimeWitness
: Le témoin unique n'est pas valide
- ETooPermissive
: La politique de mise à niveau est trop indulgente
- EInvalidPackage
: Le colis fourni n'est pas valide
🔒 Constantes de stratégie de mise à niveau
Contrôle la façon dont les packages peuvent évoluer :
- COMPATIBLE
: Mises à niveau rétrocompatibles
- ADDITIVE
: Ajoutez de nouvelles fonctionnalités, mais ne modifiez/ne supprimez pas les fonctionnalités existantes
- DEP_ONLY
: Seuls les changements de dépendance sont autorisés
Ces constantes appliquent desmises à niveau sécurisées et contrôlées.
🧱 Définitions des structures
Publisher
-adresse du package : identifie de manière unique l'éditeur -nom du module : espace de noms du module de l'éditeur
UpgradeCap
-ID du package : le package cible -version : version actuelle -politique : politique de mise à niveau appliquée
UpgradeTicket
-upgrade_cap_id : lien vers l'UpgradeCap de contrôle -package_id : package cible -politique : politique de mise à niveau utilisée -digest : résumé du bytecode (vecteur d'octets)
UpgradeReceipt
-upgrade_cap_id : identité du contrôleur -package_id : le package mis à jour
🧠 Définitions des fonctions de base
claim
fun claim(otw: &OneTimeWitness) -> Publisher;
Requiert l'identité d'un éditeur à l'aide d'un témoin unique (OTW). Garantit l'unicité et la confiance.
claim_and_keep
fun claim_and_keep(otw: &OneTimeWitness) -> Publisher;
Similaire àclaim
, mais envoie l'objet Publisher sur le compte de l'appelant.
burn_publisher
fun burn_publisher(publisher: &mut Publisher);
Détruit l'identité d'un éditeur et tous les privilèges associés.
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()
}
}
Valide :
- Cela
UpgradeCap
correspond àpackage_id
- La politique n'estpas plus permissiveque ce qui est autorisé
Renvoie ensuite une signature
UpgradeTicket
.
upgrade_package
fun upgrade_package(ticket: &UpgradeTicket, data: &vector<u8>) -> UpgradeReceipt {
// Upgrade logic
}
- Vérifie
UpgradeTicket
data
- Remplace le code du package actuel par le nouveau bytecode () - Renvoie un
UpgradeReceipt
comme preuve de réussite de la mise à niveau
restrict
fun restrict(cap: &mut UpgradeCap, policy: u8) {
assert!(cap.policy < policy, ETooPermissive);
cap.policy = policy;
}
Utilisé pourrenforcer les autorisations de mise à niveau. Impossible de revenir à une politiqueplus permissive.
🛡️ Fonctionnalités de sécurité et d'audit
sui::package
est conçu dans un souci desécurité et d'auditabilité :
-Témoin unique (OTW) : empêche l'usurpation d'identité lors de la publication -Constantes de la politique de mise à niveau : empêchez les mises à niveau non autorisées ou interrompues -Assertions : protections intégrées pour empêcher toute utilisation abusive ou toute logique inattendue
🧪 Assistance aux tests et à la simulation
Le module inclut desfonctions de testréservées aux environnements de développement/test :
- TestOnly
: Marque la logique de test uniquement
- publish
: Simule la publication dans les tests
- upgrade
: Simule la mise à niveau lors des tests
✅ Résumé
Le sui::package
module offre aux développeurs de Move un systèmepuissant, structuré et sécurisépour :
- Publier des packages
- Autoriser et exécuter les mises à niveau
- Gérer les capacités et les politiques de mise à niveau
Il garantitla confiance, la flexibilitéet lamaintenabilitédans le développement de contrats intelligents sur Sui.
Avec des modules tels que
sui::package
, le langage Move continue de montrer sa force dans laconception modulaire, l'architecture axée sur la sécuritéet l'ergonomie pour les développeurs, ouvrant la voie à des systèmes Web3 évolutifs et sécurisés.
- Sui
- Architecture
Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.
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.

- ... SUIMeaning.Sui+22
- ... SUI0xduckmove+17
- ... SUIMoonBags+11
- ... SUIHaGiang+10
- ... SUI
- ... SUIAliabee+5
- ... SUIBekky+5
- Pourquoi BCS exige-t-il un ordre de champs exact pour la désérialisation alors que les structures Move ont des champs nommés ?53
- « Erreurs de vérification de sources multiples » dans les publications du module Sui Move - Résolution automatique des erreurs43
- Échec de la transaction Sui : objets réservés pour une autre transaction25
- Comment les contraintes de capacité interagissent-elles avec les champs dynamiques dans des collections hétérogènes ?05