Sui.

Publicación

Comparte tu conocimiento.

SuiLover.
Jul 30, 2025
P&R expertos

¿Cómo puedo actualizar un paquete Move sin autorización?

Estoy intentando entender este aspecto de la red Sui porque estoy creando, depurando o implementando algo relacionado con esta área. Quiero una explicación detallada de cómo funciona este mecanismo o función, junto con el uso relevante de la CLI, la estructura del código de Move o los conceptos arquitectónicos. Mi objetivo es obtener la suficiente claridad para aplicar este conocimiento en un proyecto real, ya sea un contrato inteligente personalizado, un sistema NFT, una integración de monederos o una herramienta DeFi. La red Sui tiene características únicas en comparación con las cadenas de EVM, por lo que me interesa especialmente saber qué la diferencia y cómo afecta eso a las mejores prácticas de desarrollo. Sería útil tener un código de ejemplo, ejemplos de líneas de comandos o errores típicos a los que prestar atención, especialmente cuando se utiliza la CLI o el SDK de Sui o se implementa en localnet/testnet. En última instancia, quiero evitar errores comunes, seguir los mejores principios de seguridad y asegurarme de que la funcionalidad en la que estoy trabajando se comporte como se espera en condiciones realistas.

  • Sui
  • Transaction Processing
  • Move
4
14
Cuota
Comentarios
.

Respuestas

14
BigSneh.
Jul 30 2025, 12:28

Para evitar actualizaciones no autorizadas de un paquete Move en Sui, el mecanismo clave es el objeto upgrade_cap. Este objeto actúa como una capacidad en cadena que otorga autoridad exclusiva para actualizar un paquete implementado. Sin la posesión del upgrade_cap, nadie puede actualizar el paquete, protegiéndolo así contra cambios no autorizados.

Al publicar un paquete mediante la CLI de Sui:

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

El sistema crea un objeto upgrade_cap y devuelve su ID de objeto. Este objeto debe incluirse en cualquier transacción de actualización, de la siguiente manera:

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

Para asegurar su paquete:

  1. Proteja el upgrade_cap: guárdelo de forma segura en una cartera de hardware o en una billetera multifirma para garantizar que solo las entidades autorizadas puedan firmar las transacciones de actualización.

  2. Usa carteras multisig para obtener autoridad de actualización: coloca el upgrade_cap dentro de un objeto de billetera multisig. Esto requiere varias firmas antes de aceptar la transacción de actualización, lo que añade un nivel de seguridad.

  3. Implemente controles de gobierno fuera de la cadena: coordine las actualizaciones con los procesos de aprobación fuera de la cadena para evitar actualizaciones fraudulentas.

  4. No comparta el upgrade_cap con personas no autorizadas ni lo exponga en entornos inseguros.

  5. Utilice controles de acceso específicos del entorno: por ejemplo, restrinja las operaciones de actualización a entornos de implementación o listas blancas de IP específicos en su infraestructura operativa.

  6. Audite las transacciones de actualización: supervise la cadena de bloques para detectar cualquier llamada de actualización no autorizada o inesperada para reaccionar con prontitud.

Si pierdes el control del upgrade_cap, cualquiera que lo posea puede actualizar tu paquete, lo que compromete la integridad de tu contrato. Por el contrario, si pierdes el upgrade_cap por completo y no tienes una copia de seguridad, ya no podrás actualizar el paquete, lo que congelará su estado de forma efectiva.

A diferencia de los patrones de actualización de proxy de Ethereum, en los que la capacidad de actualización está codificada en la lógica del contrato, Sui usa un objeto de capacidad explícito. Este diseño mejora la transparencia de la seguridad al vincular la autoridad de actualización directamente a un objeto de la cadena que tú controlas.

En tu código de Move, el valor upgrade_cap no aparece porque los permisos de actualización se administran fuera de la lógica contractual, pero es fundamental en las transacciones de implementación y actualización a través de la CLI o el SDK.

Ejemplo para comprobar la capacidad de actualización de tu paquete:

sui client get-package <package_id>

Esto mostrará los metadatos del paquete, incluido el objeto upgrade_cap.

Al seguir estas prácticas, te aseguras de que las actualizaciones de los paquetes estén estrictamente controladas, lo que mitiga los riesgos de cambios no autorizados y mantiene la confianza de los usuarios en tus contratos inteligentes.

7
Mejor Respuesta
Comentarios
.
Ashford.
Jul 31 2025, 06:35

Actualizaciones no autorizadas en la red Sui (mover)

Para evitar actualizaciones no autorizadas de un paquete Move en la red Sui, debes asegurarte de que solo las entidades o direcciones confiables puedan realizar las actualizaciones. Esto se hace mediante el upgrade_capmecanismo****y controlando cuidadosamente quién tiene la capacidad de actualizar tu paquete.

Conceptos clave:

*** upgrade_cap**: una capacidad que restringe quién puede actualizar un paquete. Puede configurarla y comprobarla upgrade_capdurante la implementación del contrato. *Proceso de actualización del contrato: los contratos de Sui, una vez implementados, se pueden actualizar, pero debes controlar quién puede activar estas actualizaciones.

Pasos para evitar las actualizaciones no autorizadas:

1.Establecer upgrade_cap: Al implementar tu paquete Move, define el upgrade_cappara restringir quién puede actualizar tu contrato. 2.Otorgar permisos de actualización: Proporcione la capacidad de actualización únicamente a direcciones confiables (por ejemplo, administradores).

Ejemplo de código de movimiento:

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### Ejemplo de CLI para la configuración:

Al publicar o implementar un paquete Move, puede pasar el upgrade_capidentificador al cliente Sui:

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

Errores comunes:

*No se asocia correctamente el upgrade_cap: si la capacidad de actualización no está configurada correctamente, las direcciones no autorizadas pueden obtener accidentalmente permiso para actualizar el contrato. *Dirección incorrecta para la actualización: asegúrese de que solo las direcciones autorizadas (las que contienen laupgrade_cap) puedan realizar la actualización.

Mejores prácticas:

*Limite la capacidad de actualización: Entréguela únicamente upgrade_capa administradores o direcciones de confianza. *Prueba en Testnet/Localnet: prueba siempre tu lógica de actualización en redes locales o de prueba para asegurarte de que se evitan las actualizaciones no autorizadas. *Almacene de forma segura el upgrade_cap: asegúrese de que la dirección que contiene la capacidad de actualización esté gestionada de forma segura.

Al controlar upgrade_capy limitar cuidadosamente quién puede activar las actualizaciones, puede evitar las actualizaciones no autorizadas y garantizar que su contrato siga siendo seguro después de la implementación.

7
Comentarios
.
Benjamin XDV.
Jul 31 2025, 09:44

Paradesautorizar las actualizacionesde un paquete Move en Sui, debesrevocar o quemar el upgrade_capobjeto, ya que esta capacidad es el único mecanismo para autorizar las actualizaciones de paquetes. Una vez que upgrade_capse destruye (p. ej., mediante public entry fun burnin Move), el paquete pasa a serinmutable permanente, ya que Sui aplica un estricto control de capacidad de actualización a nivel de protocolo. Esto difiere de las cadenas de EVM, en las que la capacidad de actualización depende de patrones de proxy o de un almacenamiento mutable; el modelo de SUI garantiza una seguridad determinista al vincular las actualizaciones de forma explícita a la propiedad de la capacidad. La mejor práctica es implementar unenvoltorio controlado por la gobernancia(por ejemplo,AdminCap) en torno a la revocación programable, en lugar de quemarlo directamente, upgrade_cappara permitir una futura descentralización.

6
Comentarios
.
theking.
Jul 30 2025, 11:25

Para no autorizar o deshabilitar las actualizaciones de un paquete Move en la red Sui, debe destruir o transferir el UpgradeCapobjeto que se generó durante la implementación inicial del paquete. UpgradeCapEs un objeto especial que otorga permiso para actualizar ese paquete específico. Sin esta capacidad, no es posible realizar actualizaciones futuras.

Para evitar las actualizaciones, puedes transferirlas UpgradeCapa una dirección inaccesible (por ejemplo0x0) o destruirla mediante una función de movimiento que controles. Por ejemplo, si quieres que el contrato sea inmutable, incluye una public entry fun burn_upgrade_cap(cap: UpgradeCap)función en tu módulo y simplemente llámala después de la implementación. Una vez grabadas, las actualizaciones se desactivan permanentemente.

Este es un ejemplo de un fragmento de Move para grabarlo:

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

Si está realizando la implementación a través de la CLI, puede llamar a esta función de entrada después de la publicación:

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

La desactivación de las actualizaciones es esencial cuando se quiere bloquear la lógica de un contrato inteligente de forma permanente por motivos de seguridad o gobernanza. Una vez que el límite se destruye o se mueve a una dirección sin clave privada, el paquete es totalmente inmutable.

5
Comentarios
.
Paul.
Paul4310
Jul 31 2025, 05:36

Para evitar actualizaciones no autorizadas de un paquete Move en Sui, puede implementar el control de acceso para el proceso de actualización. En concreto, puedes usar la upgrade_cap(capacidad de actualización) y asegurarte de que está controlada de forma segura por una entidad o cuenta de confianza.

Conceptos clave:

upgrade_cap*Capacidades de actualización: controla quién puede actualizar el paquete Move asociándolo a una dirección de confianza. *Control de acceso: permite que la cuenta que tenga la capacidad de actualización active una actualización únicamente.

Mejores prácticas:

  1. upgrade_capPropiedad segura: conceda derechos de actualización únicamente a direcciones confiables (por ejemplo, la cuenta del implementador). 2.Utilice firmas: implemente la lógica para verificar al firmante durante el proceso de actualización a fin de garantizar que solo los usuarios autorizados puedan ejecutar la actualización.

Código de ejemplo:

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

Uso de la CLI:

Utilice la CLI de Sui para publicar y gestionar las actualizaciones de forma segura:

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

Errores comunes que se deben evitar:

upgrade_cap*Control de acceso flexible: evite la asignación a cuentas que no sean de confianza. *Incompatibilidad de estados: asegúrese de que la actualización no interrumpa los estados de los objetos o las estructuras de datos existentes. Pruebe siempre primero en localnet/testnet.

5
Comentarios
.
Arnold.
Arnold3036
Jul 31 2025, 08:18

Para evitar actualizaciones no autorizadas de un paquete Move:

####1. Haga que el paquete sea inmutable

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

-Efecto: No se permiten más actualizaciones (como los contratos de EVM).

####2. UpgradeCapAdministre de forma segura Si se necesitan actualizaciones: -Transferir upgrade_capa un MultiSig/DAO:

 transfer::transfer(upgrade_cap, @multisig_address);  

-Usa una lógica de autenticación personalizada:

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

####Ejemplo de CLI (Publish Immutable)

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

###Diferencias clave con respecto al EVM UpgradeCap-Sui: La capacidad de actualización es opcional (mediante). -EVM: Los contratos son inmutables de forma predeterminada (no hay un mecanismo de actualización nativo).

###Dificultades comunes

  1. upgrade_capPerdiendo: transferencias a una dirección muerta = irreversibles. 2.Actualizaciones con privilegios excesivos: evite conceder derechos de actualización a las EOA.
4
Comentarios
.
shamueely.
Jul 30 2025, 11:31

UpgradeCapPara asegurarte de que nadie pueda actualizar un paquete Move en la red Sui, ni siquiera tú, debes revocar la autoridad vinculada al objeto del paquete. Este es el objeto que controla los permisos para futuras actualizaciones. Si eliminas o haces que este objeto sea inaccesible, el paquete pasa a ser inmutable y no se podrá modificar nunca más.

Puedes hacerlo de forma segura mediante la sui::package::delete_upgrade_capfunción de tu código Move. Este es un ejemplo sencillo que puedes añadir a tu módulo:

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

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

Luego, una vez que implemente el paquete, ejecute esta función en una transacción mediante la CLI o el SDK de Sui:

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

Al hacer esto, UpgradeCapse quema, lo que significa que ya no existe en la cadena y nadie puede autorizar otra actualización. Esta es una práctica recomendada si quieres garantizar la inmutabilidad del código, especialmente en el caso de los contratos DeFi listos para la producción, los estándares de NFT o cualquier lógica en la que los usuarios confíen en un comportamiento bloqueado y sin confianza.

Para el contexto arquitectónico: a diferencia de EVM, donde los contratos inteligentes son inmutables de forma predeterminada, Sui permite paquetes actualizables, lo que brinda flexibilidad pero también introduce complejidad en la gobernanza. Para «desautorizar» las actualizaciones, debe destruir explícitamente la clave que las permite.

Puedes obtener más información en la documentación oficial de actualización del paquete Sui aquí: https://docs.sui.io/build/packages-and-upgrades#making-packages-immutable

3
Comentarios
.
Alya.
Alya-14
Jul 30 2025, 17:29

Para evitar actualizaciones no autorizadas de un paquete Move en Sui,destruya o bloquee el upgrade_capobjetodespués de la publicación.

El upgrade_cap(de0x2::package::UpgradeCap) es un objeto de primera clase que otorga autoridad para mejorar. Si permanece en la dirección del editor, cualquier persona con acceso puede actualizar el paquete.

Mejores prácticas:

-Para contratos inmutables: consume la capacidad:

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

-Para actualizaciones reguladas: transfiérelo upgrade_capa un módulo multisig o DAO en lugar de guardarlo en una sola cuenta.

  • Nunca lo expongas upgrade_capen funciones públicas sin control de acceso.

Comprobación de la CLI:

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

Una vez upgrade_capdestruido, el paquete pasa a serpermanentemente inmutable; esto es el equivalente de Sui a «bloquear» un contrato (como los patrones de mejora de EVM).

Este mecanismo es exclusivo del modelo centrado en objetos de Sui: el permiso de actualización se aplica en función de la propiedad del objeto, no de acuerdo con las funciones de administrador o la lógica del contrato.

3
Comentarios
.
Evgeniy CRYPTOCOIN.
Jul 31 2025, 09:12

Para evitar actualizaciones no autorizadas en Sui:

1.Quema el UpgradeCap: destrúyelo después del despliegue para mantener la inmutabilidad. 2. initFija: no compartas la gorra si necesitas una inmutabilidad permanente.

###Ejemplo de movimiento:

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

Notas clave: ✔ Sin ellasUpgradeCap, no es posible realizar actualizaciones. ✔ A diferencia de EVM, Sui permite una inmutabilidad reversible.

Alternativa a la CLI:

sui client call --function lock_forever --args <CAP_ID>  
  • (Advertencia: permanente a menos que planifique previamente los métodos de recuperación. ) *
3
Comentarios
.
290697tz.
Jul 30 2025, 12:30

Para evitar actualizaciones no autorizadas de un paquete Move en Sui, el mecanismo principal es el objeto upgrade_cap. Este objeto de capacidad otorga la autoridad exclusiva para actualizar un paquete implementado. Sin poseer el upgrade_cap, nadie puede actualizar el paquete, lo que garantiza la seguridad.

Al publicar un paquete mediante la CLI de Sui:

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

Se crea y devuelve un objeto upgrade_cap. Se debe proporcionar este ID de objeto al actualizar el paquete:

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

Para garantizar el proceso de actualización:

  1. Guarde el upgrade_cap de forma segura, por ejemplo, en un monedero de hardware o un monedero multisig.

  2. Usa una cartera multisig para guardar el upgrade_cap, de modo que se requieran varias firmas para las actualizaciones.

  3. Evite compartir el ID del objeto upgrade_cap o exponerlo públicamente.

  4. Implemente la gobernanza fuera de la cadena para aprobar las actualizaciones antes de su ejecución.

  5. Restrinja el acceso a las actualizaciones mediante controles de entorno o listas blancas de infraestructura.

  6. Supervise las transacciones de la cadena de bloques para detectar intentos de actualización no autorizados.

  7. Haga una copia de seguridad de upgrade_cap de forma segura para evitar perder la capacidad de actualización.

  8. Recuerde que perder el upgrade_cap significa que ya no podrá actualizar su paquete.

  9. A diferencia de los proxies EVM, el control de actualización de Sui se gestiona mediante un objeto distinto, no mediante una lógica de contrato.

  10. El código Move en sí mismo no contiene la lógica de actualización; se gestiona externamente mediante upgrade_cap.

  11. El upgrade_cap está vinculado a los metadatos del paquete y es visible al consultar la información del paquete:

cliente sui: get-package <package_id>

  1. Compruebe siempre la propiedad de upgrade_cap antes de intentar realizar las actualizaciones.

  2. Al actualizar, el ID del paquete permanece constante; solo cambia el código.

  3. La posesión no autorizada del upgrade_cap permite realizar actualizaciones malintencionadas.

  4. Utilice los mecanismos de control de acceso en su entorno operativo para proteger las transacciones de actualización.

  5. Diseñe su proceso de CI/CD de manera que exija los pasos de aprobación manual para las actualizaciones.

  6. Haz un seguimiento de quién tiene el límite de mejora en tu equipo u organización para garantizar la rendición de cuentas.

  7. Puedes transferir el objeto upgrade_cap a otra cuenta si es necesario, pero hazlo con cuidado.

  8. Mantenga las transacciones de actualización eficientes desde el punto de vista del consumo de gas especificando los presupuestos de gas adecuados.

  9. Combinar el control upgrade_cap en cadena con la gobernanza fuera de la cadena es la mejor práctica para actualizar paquetes de forma segura en Sui.

2
Comentarios
.
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
Comentarios
.
Bekky.
Bekky1762
Jul 31 2025, 10:29

1. Mecanismo de seguridad central**

Sui usaupgrade caps(UpgradeCap) para controlar la mutabilidad de los paquetes. A diferencia de los contratos inmutables de EVM, Sui permite las actualizaciones pero con estrictos controles de propiedad.

####Propiedades clave

CaracterísticaDescripción
UpgradeCapObjeto transferible que otorga derechos de actualización
PolíticasLos bitflags definen los cambios permitidos (compatibles con versiones anteriores, aditivos, de interrupción)
**Verificación resumidaGarantiza que el código de bytes coincida con el hash esperado

2. Patrones de implementación**

####Paquete básico inmutable

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

####Actualizaciones controladas por 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. Aplicación de la CLI**

####Implemente de forma inmutable

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

####Verificar la inmutabilidad

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

###4. Mejores prácticas de seguridad**

####Matriz de políticas de actualización

Indicador de políticaCambios permitidosRecomendado para
0x1(COMPATIBLE)Solo correcciones de erroresProtocolos estables
0x3(ADITIVO)Nuevas funcionesSistemas en evolución
0x7(ÚLTIMA HORA)Cambios totalesDesarrollo inicial

####Protección multifirma

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. Vectores de ataque y mitigaciones**

AmenazaSoluciónEjemplo de movimiento
struct TimedCap { unlock_epoch: u64 }Stolen CapActualizaciones de bloqueo temporal
assert!(digest == expected_digest, EINVALID)Actualización maliciosaEs necesaria la verificación del resumen
required = 5/7Adquisición de la gobernabilidadDescentralización progresiva

###6. Estrategias de prueba**

####Localnet Dry-Run

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

####Caso de prueba negativo

#[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. Monitoreo y recuperación**

####Verificación en cadena

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

####Congelación de emergencia

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

###Diferenciadores clave de EVM | Aspect | Sui | EVM | --------| -----| | -----| |Mecanismo de actualización| Centrado en objetos | Patrones de proxy | |Granularidad| Control por paquete | Todo o nada | |Auditabilidad| Historial de actualizaciones en cadena | Administradores de proxy opacos |

Para sistemas de producción:

  1. Almacenar UpgradeCapen cámara frigorífica
  2. Implementemultifirma con demoras de tiempo
  3. UtiliceSui Explorerpara supervisar las propuestas de actualización
1
Comentarios
.

Sabes la respuesta?

Inicie sesión y compártalo.

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

1170Publicaciones3665Respuestas
Sui.X.Peera.

Gana tu parte de 1000 Sui

Gana puntos de reputación y obtén recompensas por ayudar a crecer a la comunidad de Sui.

Campaña de RecompensasAgosto