Publicación
Comparte tu conocimiento.
📦 Análisis en profundidad del módulo `sui: :package`: publicación y actualización de paquetes en movimiento
En la rápida evolución de la tecnología blockchain, el lenguaje de programaciónMovedestaca por suseguridad,flexibilidadyauditabilidad. Una de sus principales fortalezas es lagestión refinada de los paquetes de contratos inteligentes.
Este artículo profundiza en el sui::package
módulo: el motor detrás de la publicación, la actualización y el mantenimiento de los paquetes Move en la cadena de bloques Sui.
🔍 Descripción general del módulo
sui::package
es la piedra angular del ecosistema Move. Proporciona a los desarrolladores herramientas e interfaces sólidas para gestionar los paquetesde forma segura y eficiente.
📦 Declaración e importaciones
module sui::package;
use std::ascii::String;
use std::type_name;
use sui::types;
Esto define el módulo e incorpora las bibliotecas estándar esenciales de Move y los módulos nativos de la interfaz de usuario para una lógica compleja.
🧩 Estructuras principales e interfaces públicas
1. Publisher
Gestiona laidentidad del publicadorde un paquete.
Funciones clave:
claim
claim_and_keep
burn_publisher
###2. UpgradeCap
Controla lacapacidad de actualizaciónde un paquete.
Campos clave:
package_id
version
policy
(política de actualización)
Funciones clave:
upgrade_package
restrict
3. UpgradeTicket
Concede permiso para unamejora especifica.
Funciones clave:
ticket_package
ticket_policy
ticket_digest
4. UpgradeReceipt
Se emite después de una actualización exitosa.
Funciones principales:
receipt_cap
receipt_package
🚨 Constantes de error
Ayuda a los desarrolladores a depurar los errores con claridad.
-ENotOneTimeWitness
: El testimonio de una sola vez no es válido
-ETooPermissive
: La política de actualización es demasiado indulgente
-EInvalidPackage
: El paquete proporcionado no es válido
🔒 Constantes de estrategia de actualización
Controla la evolución de los paquetes:
-COMPATIBLE
: Actualizaciones compatibles con versiones anteriores
-ADDITIVE
: Añade nuevas funciones, pero no cambies ni elimines las existentes
-DEP_ONLY
: Solo se permiten cambios de dependencia
Estas constantes imponenactualizaciones seguras y controladas.
🧱 Definiciones de estructura
Publisher
-dirección del paquete: identifica de forma exclusiva al editor -nombre del módulo: el espacio de nombres del módulo del editor
UpgradeCap
-ID del paquete: el paquete de destino -versión: versión actual -política: se ha aplicado la política de actualización
UpgradeTicket
-upgrade_cap_id: enlace al UpgradeCap que lo controla -package_id: paquete de destino -política: política de actualización utilizada -digest: resumen del código de bytes (vector de bytes)
UpgradeReceipt
-upgrade_cap_id: identidad del controlador -package_id: el paquete actualizado
🧠 Definiciones de funciones principales
claim
fun claim(otw: &OneTimeWitness) -> Publisher;
Reclama la identidad de un editor mediante un testigo único (OTW). Garantiza la exclusividad y la confianza.
claim_and_keep
fun claim_and_keep(otw: &OneTimeWitness) -> Publisher;
Similar aclaim
, pero envía el objeto Publisher a la cuenta de la persona que llama.
burn_publisher
fun burn_publisher(publisher: &mut Publisher);
Destruye la identidad de un editor y todos los privilegios asociados.
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()
}
}
Valida:
- Que
UpgradeCap
coincide con elpackage_id
- La políticano es más permisivade lo permitido
UpgradeTicket
Luego devuelve un firmado.
upgrade_package
fun upgrade_package(ticket: &UpgradeTicket, data: &vector<u8>) -> UpgradeReceipt {
// Upgrade logic
}
- Verifica
UpgradeTicket
data
- Sustituye el código del paquete actual por el nuevo bytecode () - Devuelve un
UpgradeReceipt
como prueba de que la actualización se ha realizado correctamente
restrict
fun restrict(cap: &mut UpgradeCap, policy: u8) {
assert!(cap.policy < policy, ETooPermissive);
cap.policy = policy;
}
Se usa pararestringir los permisos de actualización. No se puede cambiar a una políticamás permisiva.
🛡️ Funciones de seguridad y auditoría
sui::package
está diseñado teniendo en cuentala seguridad y la auditabilidad:
-Testigo único (OTW): evita la suplantación de identidad en las publicaciones -Constantes de la política de actualizaciones: Impida las actualizaciones no autorizadas o incorrectas -Aserciones: protecciones integradas para evitar el uso indebido o la lógica inesperada
🧪 Soporte de pruebas y simulación
El módulo incluyefunciones exclusivas de pruebaque están destinadas a entornos de desarrollo y prueba:
TestOnly
-: Marca la lógica de solo prueba
-publish
: Simula la publicación en las pruebas
-upgrade
: Simula la actualización en las pruebas
✅ Resumen
El sui::package
módulo ofrece a los desarrolladores de Move un sistemapotente, estructurado y seguropara:
- Publicar paquetes
- Autorizar y ejecutar actualizaciones
- Gestione las capacidades y políticas de actualización
Garantizaconfianza, flexibilidadymantenimientoen el desarrollo de contratos inteligentes en Sui.
Con módulos como Move
sui::package
, el lenguaje Move sigue demostrando su fuerza en eldiseño modular, laarquitectura que prioriza la seguridady laergonomía del desarrollador, lo que allana el camino para sistemas Web3 seguros y escalables.
- Sui
- Architecture
Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.
Gana tu parte de 1000 Sui
Gana puntos de reputación y obtén recompensas por ayudar a crecer a la comunidad de Sui.

- ... SUIMeaning.Sui+22
- ... SUI0xduckmove+17
- ... SUIfomo on Sui+16
- ... SUIMoonBags+11
- ... SUIHaGiang+10
- ... SUI
- ... SUI
- ¿Por qué BCS requiere un orden de campo exacto para la deserialización cuando las estructuras Move tienen campos con nombre?53
- «Errores de verificación de múltiples fuentes» en las publicaciones del módulo Sui Move: resolución automática de errores43
- Fallo en la transacción Sui: objetos reservados para otra transacción25
- ¿Cómo interactúan las restricciones de capacidad con los campos dinámicos en colecciones heterogéneas?05